[optimize] radar support area tooltip

This commit is contained in:
monitor1394
2022-04-12 08:09:18 +08:00
parent 9a3461084c
commit 7ca4ddcb88
4 changed files with 48 additions and 3 deletions

View File

@@ -100,7 +100,6 @@ namespace XCharts.Runtime
if (!Application.isPlaying)
{
m_IsOnValidate = true;
//Update();
}
#endif
m_PainerDirty = true;

View File

@@ -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++)
{

View File

@@ -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)

View File

@@ -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;
}
}
}