修复Line开启clip时绘制的顶点数可能反而增加的问题

This commit is contained in:
monitor1394
2023-12-25 23:05:06 +08:00
parent cbd527316e
commit 178215d980
8 changed files with 43 additions and 14 deletions

View File

@@ -356,7 +356,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, visualMap, lineWidth, isY);
LineHelper.UpdateSerieDrawPoints(serie, chart.settings, chart.theme, visualMap, lineWidth, isY, m_SerieGrid);
LineHelper.DrawSerieLineArea(vh, serie, lastSerie, chart.theme, visualMap, isY, axis, relativedAxis, m_SerieGrid);
LineHelper.DrawSerieLine(vh, chart.theme, serie, visualMap, m_SerieGrid, axis, relativedAxis, lineWidth);

View File

@@ -470,7 +470,7 @@ namespace XCharts.Runtime
}
internal static void UpdateSerieDrawPoints(Serie serie, Settings setting, ThemeStyle theme, VisualMap visualMap,
float lineWidth, bool isY = false)
float lineWidth, bool isY, GridCoord grid)
{
serie.context.drawPoints.Clear();
var last = Vector3.zero;
@@ -485,12 +485,12 @@ namespace XCharts.Runtime
UpdateStepLineDrawPoints(serie, setting, theme, isY, lineWidth);
break;
default:
UpdateNormalLineDrawPoints(serie, setting, visualMap);
UpdateNormalLineDrawPoints(serie, setting, visualMap, grid);
break;
}
}
private static void UpdateNormalLineDrawPoints(Serie serie, Settings setting, VisualMap visualMap)
private static void UpdateNormalLineDrawPoints(Serie serie, Settings setting, VisualMap visualMap, GridCoord grid)
{
var isVisualMapGradient = VisualMapHelper.IsNeedGradient(visualMap);
if (isVisualMapGradient || serie.clip || (serie.lineStyle.IsNotSolidLine()))
@@ -499,11 +499,16 @@ namespace XCharts.Runtime
if (dataPoints.Count > 1)
{
var sp = dataPoints[0];
var ip = Vector3.zero;
for (int i = 1; i < dataPoints.Count; i++)
{
var ep = dataPoints[i];
var ignore = serie.context.dataIgnores[i];
if (serie.clip && grid.NotAnyIntersect(sp, ep))
{
sp = ep;
continue;
}
var dir = (ep - sp).normalized;
var dist = Vector3.Distance(sp, ep);
var segment = (int)(dist / setting.lineSegmentDistance);

View File

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