[optimize] visualmap

This commit is contained in:
monitor1394
2022-04-09 21:30:28 +08:00
parent e2b0c935e0
commit be4ed41ca6
9 changed files with 76 additions and 19 deletions

View File

@@ -348,7 +348,7 @@ namespace XCharts.Runtime
serie.animation.InitProgress(serie.context.dataPoints, isY);
VisualMapHelper.AutoSetLineMinMax(visualMap, serie, isY, axis, relativedAxis);
LineHelper.UpdateSerieDrawPoints(serie, chart.settings, chart.theme, lineWidth, isY);
LineHelper.UpdateSerieDrawPoints(serie, chart.settings, chart.theme, visualMap, lineWidth, isY);
LineHelper.DrawSerieLineArea(vh, serie, lastSerie, chart.theme, isY, axis, relativedAxis, m_SerieGrid);
LineHelper.DrawSerieLine(vh, chart.theme, serie, visualMap, m_SerieGrid, axis, relativedAxis, lineWidth);

View File

@@ -358,9 +358,9 @@ namespace XCharts.Runtime
UGL.AddVertToVertexHelper(vh, tp, bp, ColorUtil.clearColor32, false);
}
internal static void UpdateSerieDrawPoints(Serie serie, Settings setting, ThemeStyle theme, float lineWidth, bool isY = false)
internal static void UpdateSerieDrawPoints(Serie serie, Settings setting, ThemeStyle theme, VisualMap visualMap,
float lineWidth, bool isY = false)
{
serie.context.drawPoints.Clear();
var last = Vector3.zero;
switch (serie.lineType)
@@ -374,14 +374,54 @@ namespace XCharts.Runtime
UpdateStepLineDrawPoints(serie, setting, theme, isY, lineWidth);
break;
default:
for (int i = 0; i < serie.context.dataPoints.Count; i++)
{
serie.context.drawPoints.Add(new PointInfo(serie.context.dataPoints[i], serie.context.dataIgnores[i]));
}
UpdateNormalLineDrawPoints(serie, setting, visualMap);
break;
}
}
private static void UpdateNormalLineDrawPoints(Serie serie, Settings setting, VisualMap visualMap)
{
var isVisualMapGradient = VisualMapHelper.IsNeedGradient(visualMap);
if (isVisualMapGradient)
{
var dataPoints = serie.context.dataPoints;
if (dataPoints.Count > 1)
{
var sp = dataPoints[0];
for (int i = 1; i < dataPoints.Count; i++)
{
var ep = dataPoints[i];
var ignore = serie.context.dataIgnores[i];
var dir = (ep - sp).normalized;
var dist = Vector3.Distance(sp, ep);
var segment = (int)(dist / setting.lineSegmentDistance);
serie.context.drawPoints.Add(new PointInfo(sp, ignore));
for (int j = 1; j < segment; j++)
{
var np = sp + dir * dist * j / segment;
serie.context.drawPoints.Add(new PointInfo(np, ignore));
}
sp = ep;
if (i == dataPoints.Count - 1)
{
serie.context.drawPoints.Add(new PointInfo(ep, ignore));
}
}
}
else
{
serie.context.drawPoints.Add(new PointInfo(dataPoints[0], serie.context.dataIgnores[0]));
}
}
else
{
for (int i = 0; i < serie.context.dataPoints.Count; i++)
{
serie.context.drawPoints.Add(new PointInfo(serie.context.dataPoints[i], serie.context.dataIgnores[i]));
}
}
}
private static void UpdateSmoothLineDrawPoints(Serie serie, Settings setting, bool isY)
{
var points = serie.context.dataPoints;

View File

@@ -238,7 +238,7 @@ namespace XCharts.Runtime
serie.animation.InitProgress(serie.context.dataPoints, isY);
LineHelper.UpdateSerieDrawPoints(serie, chart.settings, chart.theme, lineWidth, isY);
LineHelper.UpdateSerieDrawPoints(serie, chart.settings, chart.theme, null, lineWidth, isY);
LineHelper.DrawSerieLineArea(vh, serie, null, chart.theme, isY, axis, relativedAxis, m_SerieGrid);
LineHelper.DrawSerieLine(vh, chart.theme, serie, null, m_SerieGrid, axis, relativedAxis, lineWidth);