mirror of
https://github.com/XCharts-Team/XCharts.git
synced 2026-05-29 12:48:47 +00:00
[optimize] radar support area tooltip
This commit is contained in:
@@ -100,7 +100,6 @@ namespace XCharts.Runtime
|
|||||||
if (!Application.isPlaying)
|
if (!Application.isPlaying)
|
||||||
{
|
{
|
||||||
m_IsOnValidate = true;
|
m_IsOnValidate = true;
|
||||||
//Update();
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
m_PainerDirty = true;
|
m_PainerDirty = true;
|
||||||
|
|||||||
@@ -434,9 +434,9 @@ namespace XCharts.Runtime
|
|||||||
var nep = i < points.Count - 2 ? points[i + 2] : ep;
|
var nep = i < points.Count - 2 ? points[i + 2] : ep;
|
||||||
var ignore = serie.context.dataIgnores[i];
|
var ignore = serie.context.dataIgnores[i];
|
||||||
if (isY)
|
if (isY)
|
||||||
UGLHelper.GetBezierListVertical(ref s_CurvesPosList, sp, ep, smoothness);
|
UGLHelper.GetBezierListVertical(ref s_CurvesPosList, sp, ep, smoothness, setting.lineSmoothStyle);
|
||||||
else
|
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++)
|
for (int j = 1; j < s_CurvesPosList.Count; j++)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -98,6 +98,7 @@ namespace XCharts.Runtime
|
|||||||
m_LastCheckContextFlag = needCheck;
|
m_LastCheckContextFlag = needCheck;
|
||||||
serie.context.pointerEnter = false;
|
serie.context.pointerEnter = false;
|
||||||
serie.context.pointerItemDataIndex = -1;
|
serie.context.pointerItemDataIndex = -1;
|
||||||
|
var areaStyle = serie.areaStyle;
|
||||||
switch (serie.radarType)
|
switch (serie.radarType)
|
||||||
{
|
{
|
||||||
case RadarType.Multiple:
|
case RadarType.Multiple:
|
||||||
@@ -125,6 +126,23 @@ namespace XCharts.Runtime
|
|||||||
break;
|
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);
|
serieData.interact.SetValue(ref needInteract, symbolSize, serieData.context.highlight);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -141,6 +159,23 @@ namespace XCharts.Runtime
|
|||||||
return;
|
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;
|
break;
|
||||||
}
|
}
|
||||||
if (needInteract)
|
if (needInteract)
|
||||||
|
|||||||
@@ -339,5 +339,16 @@ namespace XUGL
|
|||||||
crp = cp + dir1v;
|
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