Line支持Clip

This commit is contained in:
monitor1394
2023-05-11 08:34:04 +08:00
parent fab683f5e1
commit bab788d4cb
2 changed files with 74 additions and 35 deletions

View File

@@ -86,8 +86,13 @@ namespace XCharts.Runtime
var lastDataIsIgnore = false;
for (int i = 0; i < points.Count; i++)
{
var tp = points[i].position;
var isIgnore = points[i].isIgnoreBreak;
var pdata = points[i];
var tp = pdata.position;
if (serie.clip)
{
grid.Clamp(ref tp);
}
var isIgnore = pdata.isIgnoreBreak;
var color = areaColor;
var toColor = areaToColor;
var lerp = areaLerp;
@@ -282,7 +287,7 @@ namespace XCharts.Runtime
var lastDataIsIgnore = datas[0].isIgnoreBreak;
var smooth = serie.lineType == LineType.Smooth;
var firstInGridPointIndex = smooth && serie.clip ? -1 : 1;
var interactPoints = new List<Vector3>();
// var interactPoints = new List<Vector3>();
for (int i = 1; i < dataCount; i++)
{
var cdata = datas[i];
@@ -305,7 +310,7 @@ namespace XCharts.Runtime
var isClip = false;
if (serie.clip)
{
if (smooth)
//if (smooth)
{
if (!grid.Contains(cp))
isClip = true;
@@ -314,29 +319,29 @@ namespace XCharts.Runtime
if (firstInGridPointIndex > 0 && !grid.Contains(np))
isClip = true;
}
else
{
var isLpInGrid = grid.Contains(lp);
var isCpInGrid = grid.Contains(cp);
if (!isLpInGrid || !isCpInGrid)
{
interactPoints.Clear();
if (grid.BoundaryPoint(lp, cp, ref interactPoints))
{
if (interactPoints.Count >= 2)
{
lp = interactPoints[0];
cp = interactPoints[1];
}
else if (isLpInGrid)
cp = interactPoints[0];
else
lp = interactPoints[0];
if (i == dataCount - 1)
np = cp;
}
}
}
// else
// {
// var isLpInGrid = grid.Contains(lp);
// var isCpInGrid = grid.Contains(cp);
// if (!isLpInGrid || !isCpInGrid)
// {
// interactPoints.Clear();
// if (grid.BoundaryPoint(lp, cp, ref interactPoints))
// {
// if (interactPoints.Count >= 2)
// {
// lp = interactPoints[0];
// cp = interactPoints[1];
// }
// else if (isLpInGrid)
// cp = interactPoints[0];
// else
// lp = interactPoints[0];
// if (i == dataCount - 1)
// np = cp;
// }
// }
// }
if (isClip) isIgnore = true;
}
if (!smooth)
@@ -379,7 +384,7 @@ namespace XCharts.Runtime
ref itp, ref ibp,
ref clp, ref crp,
ref bitp, ref bibp, i);
if (i == 1)
if (i == firstInGridPointIndex)
{
AddLineVertToVertexHelper(vh, ltp, lbp, lineColor, isVisualMapGradient, isLineStyleGradient,
visualMap, serie.lineStyle, grid, axis, relativedAxis, false, lastDataIsIgnore, isIgnore);
@@ -498,7 +503,7 @@ namespace XCharts.Runtime
private static void UpdateNormalLineDrawPoints(Serie serie, Settings setting, VisualMap visualMap)
{
var isVisualMapGradient = VisualMapHelper.IsNeedGradient(visualMap);
if (isVisualMapGradient)
if (isVisualMapGradient || serie.clip)
{
var dataPoints = serie.context.dataPoints;
if (dataPoints.Count > 1)