[feature][UGL] add UGL.DrawPolyon API

This commit is contained in:
monitor1394
2022-07-28 13:33:38 +08:00
parent cdf0bc81e1
commit 44dc1f7b16
5 changed files with 32 additions and 6 deletions

View File

@@ -103,13 +103,13 @@ namespace XCharts.Runtime
serie.context.pointerItemDataIndex = serieData.index;
serie.context.pointerEnter = true;
serieData.context.highlight = true;
SerieHelper.GetItemColor(out color, out toColor, serie, serieData, chart.theme, SerieState.Emphasis);
}
else
{
serieData.context.highlight = false;
SerieHelper.GetItemColor(out color, out toColor, serie, serieData, chart.theme, SerieState.Normal);
}
var state = SerieHelper.GetSerieState(serie, serieData, true);
SerieHelper.GetItemColor(out color, out toColor, serie, serieData, chart.theme, state);
serieData.interact.SetColor(ref needInteract, color, toColor);
}
}

View File

@@ -85,6 +85,7 @@ namespace XCharts.Runtime
{
serie.context.pointerEnter = true;
serie.context.pointerItemDataIndex = i;
needInteract = true;
}
}
}

View File

@@ -155,6 +155,7 @@ namespace XCharts.Runtime
}
break;
case RadarType.Single:
needInteract = false;
for (int i = 0; i < serie.data.Count; i++)
{
var serieData = serie.data[i];
@@ -162,10 +163,14 @@ namespace XCharts.Runtime
var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize);
if (Vector3.Distance(chart.pointerPos, serieData.context.position) < size * 2)
{
serie.highlight = true;
serie.context.pointerEnter = true;
serie.context.pointerItemDataIndex = i;
break;
serieData.context.highlight = true;
needInteract = true;
}
else
{
serieData.context.highlight = false;
}
}
if (!serie.context.pointerEnter && areaStyle != null)
@@ -178,10 +183,10 @@ namespace XCharts.Runtime
var p2 = n >= dataPoints.Count - 1 ? dataPoints[0] : dataPoints[n + 1];
if (UGLHelper.IsPointInTriangle(p1.context.position, center, p2.context.position, chart.pointerPos))
{
serie.highlight = true;
serie.context.pointerEnter = true;
serie.context.pointerItemDataIndex = n;
p1.context.highlight = true;
needInteract = true;
break;
}
}

View File

@@ -244,7 +244,7 @@ namespace XCharts.Runtime
public static SerieState GetSerieState(Serie serie)
{
if (serie.highlight || serie.context.pointerEnter) return SerieState.Emphasis;
if (serie.highlight) return SerieState.Emphasis;
return serie.state;
}

View File

@@ -1940,5 +1940,25 @@ namespace XUGL
angle += smoothness;
}
}
/// <summary>
/// 填充任意多边形(目前只支持凸多边形)
/// </summary>
/// <param name="vh"></param>
/// <param name="points"></param>
/// <param name="color"></param>
public static void DrawPolygon(VertexHelper vh, List<Vector3> points, Color32 color)
{
if (points.Count < 3 || UGLHelper.IsClearColor(color)) return;
var cv = vh.currentVertCount;
foreach (var pos in points)
{
vh.AddVert(pos, color, Vector2.zero);
}
for (int i = 2; i < points.Count; i++)
{
vh.AddTriangle(cv, cv + i - 1, cv + i);
}
}
}
}