diff --git a/Runtime/Internal/BaseGraph.cs b/Runtime/Internal/BaseGraph.cs index 118b3e5f..e93b7e18 100644 --- a/Runtime/Internal/BaseGraph.cs +++ b/Runtime/Internal/BaseGraph.cs @@ -100,7 +100,6 @@ namespace XCharts.Runtime if (!Application.isPlaying) { m_IsOnValidate = true; - //Update(); } #endif m_PainerDirty = true; diff --git a/Runtime/Serie/Line/LineHelper.cs b/Runtime/Serie/Line/LineHelper.cs index 33a79602..b3f83f43 100644 --- a/Runtime/Serie/Line/LineHelper.cs +++ b/Runtime/Serie/Line/LineHelper.cs @@ -434,9 +434,9 @@ namespace XCharts.Runtime var nep = i < points.Count - 2 ? points[i + 2] : ep; var ignore = serie.context.dataIgnores[i]; if (isY) - UGLHelper.GetBezierListVertical(ref s_CurvesPosList, sp, ep, smoothness); + UGLHelper.GetBezierListVertical(ref s_CurvesPosList, sp, ep, smoothness, setting.lineSmoothStyle); else - UGLHelper.GetBezierList(ref s_CurvesPosList, sp, ep, lsp, nep, smoothness); + UGLHelper.GetBezierList(ref s_CurvesPosList, sp, ep, lsp, nep, smoothness, setting.lineSmoothStyle); for (int j = 1; j < s_CurvesPosList.Count; j++) { diff --git a/Runtime/Serie/Radar/RadarHandler.cs b/Runtime/Serie/Radar/RadarHandler.cs index 77d6ac59..ab05e320 100644 --- a/Runtime/Serie/Radar/RadarHandler.cs +++ b/Runtime/Serie/Radar/RadarHandler.cs @@ -98,6 +98,7 @@ namespace XCharts.Runtime m_LastCheckContextFlag = needCheck; serie.context.pointerEnter = false; serie.context.pointerItemDataIndex = -1; + var areaStyle = serie.areaStyle; switch (serie.radarType) { case RadarType.Multiple: @@ -125,6 +126,23 @@ namespace XCharts.Runtime break; } } + if (!serieData.context.highlight && areaStyle != null) + { + var center = m_RadarCoord.context.center; + var dataPoints = serieData.context.dataPoints; + for (int n = 0; n < dataPoints.Count; n++) + { + var p1 = dataPoints[n]; + var p2 = n >= dataPoints.Count - 1 ? dataPoints[0] : dataPoints[n + 1]; + if (UGLHelper.IsPointInTriangle(p1, center, p2, chart.pointerPos)) + { + serie.context.pointerEnter = true; + serie.context.pointerItemDataIndex = i; + serieData.context.highlight = true; + break; + } + } + } serieData.interact.SetValue(ref needInteract, symbolSize, serieData.context.highlight); } } @@ -141,6 +159,23 @@ namespace XCharts.Runtime return; } } + if (!serie.context.pointerEnter && areaStyle != null) + { + var center = m_RadarCoord.context.center; + var dataPoints = serie.data; + for (int n = 0; n < dataPoints.Count; n++) + { + var p1 = dataPoints[n]; + var p2 = n >= dataPoints.Count - 1 ? dataPoints[0] : dataPoints[n + 1]; + if (UGLHelper.IsPointInTriangle(p1.context.position, center, p2.context.position, chart.pointerPos)) + { + serie.context.pointerEnter = true; + serie.context.pointerItemDataIndex = n; + p1.context.highlight = true; + break; + } + } + } break; } if (needInteract) diff --git a/Runtime/XUGL/UGLHelper.cs b/Runtime/XUGL/UGLHelper.cs index 945d0139..650efed1 100644 --- a/Runtime/XUGL/UGLHelper.cs +++ b/Runtime/XUGL/UGLHelper.cs @@ -339,5 +339,16 @@ namespace XUGL crp = cp + dir1v; } } + + public static bool IsPointInTriangle(Vector3 p1, Vector3 p2, Vector3 p3, Vector3 check) + { + var dire1 = check - p1; + var dire2 = check - p2; + var dire3 = check - p3; + var c1 = dire1.x * dire2.y - dire1.y * dire2.x; + var c2 = dire2.x * dire3.y - dire2.y * dire3.x; + var c3 = dire3.x * dire1.y - dire3.y * dire1.x; + return c1 * c2 >= 0 && c1 * c3 >= 0; + } } } \ No newline at end of file