mirror of
https://github.com/XCharts-Team/XCharts.git
synced 2026-05-21 07:50:16 +00:00
[optimize] radar support area tooltip
This commit is contained in:
@@ -100,7 +100,6 @@ namespace XCharts.Runtime
|
||||
if (!Application.isPlaying)
|
||||
{
|
||||
m_IsOnValidate = true;
|
||||
//Update();
|
||||
}
|
||||
#endif
|
||||
m_PainerDirty = true;
|
||||
|
||||
@@ -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++)
|
||||
{
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user