mirror of
https://github.com/XCharts-Team/XCharts.git
synced 2026-05-19 23:10:06 +00:00
Line支持Clip
This commit is contained in:
@@ -133,14 +133,48 @@ namespace XCharts.Runtime
|
||||
return Contains(pos.x, pos.y);
|
||||
}
|
||||
|
||||
[Since("v3.7.0")]
|
||||
public bool Contains(Vector3 pos, bool isYAxis)
|
||||
{
|
||||
return isYAxis ? ContainsY(pos.y) : ContainsX(pos.x);
|
||||
}
|
||||
|
||||
public bool Contains(float x, float y)
|
||||
{
|
||||
if (x < context.x - 1 || x > context.x + context.width + 1 ||
|
||||
y < context.y - 1 || y > context.y + context.height + 1)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
return ContainsX(x) && ContainsY(y);
|
||||
}
|
||||
|
||||
[Since("v3.7.0")]
|
||||
public bool ContainsX(float x)
|
||||
{
|
||||
return x >= context.x && x <= context.x + context.width;
|
||||
}
|
||||
|
||||
[Since("v3.7.0")]
|
||||
public bool ContainsY(float y)
|
||||
{
|
||||
return y >= context.y && y <= context.y + context.height;
|
||||
}
|
||||
|
||||
[Since("v3.7.0")]
|
||||
public void Clamp(ref Vector3 pos)
|
||||
{
|
||||
ClampX(ref pos);
|
||||
ClampY(ref pos);
|
||||
}
|
||||
|
||||
[Since("v3.7.0")]
|
||||
public void ClampX(ref Vector3 pos)
|
||||
{
|
||||
if (pos.x < context.x) pos.x = context.x;
|
||||
else if (pos.x > context.x + context.width) pos.x = context.x + context.width;
|
||||
}
|
||||
|
||||
[Since("v3.7.0")]
|
||||
public void ClampY(ref Vector3 pos)
|
||||
{
|
||||
if (pos.y < context.y) pos.y = context.y;
|
||||
else if (pos.y > context.y + context.height) pos.y = context.y + context.height;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user