mirror of
https://github.com/XCharts-Team/XCharts.git
synced 2026-05-25 10:20:10 +00:00
Added serie's ignoreLineBreak parameter (#164)
This commit is contained in:
@@ -39,6 +39,7 @@
|
|||||||
|
|
||||||
## master
|
## master
|
||||||
|
|
||||||
|
* (2021.08.22) Added `Serie`'s `ignoreLineBreak` (#164)
|
||||||
* (2021.08.22) Fixed `Axis` label may not be updated when `DataZoom` is turn on (#164)
|
* (2021.08.22) Fixed `Axis` label may not be updated when `DataZoom` is turn on (#164)
|
||||||
* (2021.08.15) Improved `Axis`'s `AxisLabel` text rotate setting to avoid inconsistency offset in `DataZoom` (#163)
|
* (2021.08.15) Improved `Axis`'s `AxisLabel` text rotate setting to avoid inconsistency offset in `DataZoom` (#163)
|
||||||
* (2021.08.14) Added `Legend`'s `textAutoColor` to set the text color match with `Serie` color (#163)
|
* (2021.08.14) Added `Legend`'s `textAutoColor` to set the text color match with `Serie` color (#163)
|
||||||
|
|||||||
@@ -39,6 +39,7 @@
|
|||||||
|
|
||||||
## master
|
## master
|
||||||
|
|
||||||
|
* (2021.08.22) 增加`Serie`的`ignoreLineBreak`参数设置忽略数据连线是否断开 (#164)
|
||||||
* (2021.08.22) 修复`Axis`在`DataZoom`开启时`Label`可能不更新的问题 (#164)
|
* (2021.08.22) 修复`Axis`在`DataZoom`开启时`Label`可能不更新的问题 (#164)
|
||||||
* (2021.08.15) 优化`Axis`的`AxisLabel`文本旋转设置,避免在DataZoom开启时偏移不一致 (#163)
|
* (2021.08.15) 优化`Axis`的`AxisLabel`文本旋转设置,避免在DataZoom开启时偏移不一致 (#163)
|
||||||
* (2021.08.14) 增加`Legend`的`textAutoColor`设置文本颜色和`Serie`一致 (#163)
|
* (2021.08.14) 增加`Legend`的`textAutoColor`设置文本颜色和`Serie`一致 (#163)
|
||||||
|
|||||||
@@ -68,6 +68,7 @@ namespace XCharts
|
|||||||
PropertyField(prop, "m_Clip");
|
PropertyField(prop, "m_Clip");
|
||||||
PropertyField(prop, "m_Ignore");
|
PropertyField(prop, "m_Ignore");
|
||||||
PropertyField(prop, "m_IgnoreValue");
|
PropertyField(prop, "m_IgnoreValue");
|
||||||
|
PropertyField(prop, "m_IgnoreLineBreak");
|
||||||
PropertyField(prop, "m_ShowAsPositiveNumber");
|
PropertyField(prop, "m_ShowAsPositiveNumber");
|
||||||
PropertyField(prop, "m_Large");
|
PropertyField(prop, "m_Large");
|
||||||
PropertyField(prop, "m_LargeThreshold");
|
PropertyField(prop, "m_LargeThreshold");
|
||||||
|
|||||||
@@ -327,6 +327,7 @@ namespace XCharts
|
|||||||
[SerializeField] private bool m_Clip = false;
|
[SerializeField] private bool m_Clip = false;
|
||||||
[SerializeField] private bool m_Ignore = false;
|
[SerializeField] private bool m_Ignore = false;
|
||||||
[SerializeField] private double m_IgnoreValue = 0;
|
[SerializeField] private double m_IgnoreValue = 0;
|
||||||
|
[SerializeField] private bool m_IgnoreLineBreak = false;
|
||||||
[SerializeField] private bool m_ShowAsPositiveNumber = false;
|
[SerializeField] private bool m_ShowAsPositiveNumber = false;
|
||||||
[SerializeField] private bool m_Large = true;
|
[SerializeField] private bool m_Large = true;
|
||||||
[SerializeField] private int m_LargeThreshold = 200;
|
[SerializeField] private int m_LargeThreshold = 200;
|
||||||
@@ -771,6 +772,15 @@ namespace XCharts
|
|||||||
set { if (PropertyUtil.SetStruct(ref m_IgnoreValue, value)) SetVerticesDirty(); }
|
set { if (PropertyUtil.SetStruct(ref m_IgnoreValue, value)) SetVerticesDirty(); }
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
/// 忽略数据时折线是断开还是连接。默认false为连接。
|
||||||
|
/// </summary>
|
||||||
|
/// <value></value>
|
||||||
|
public bool ignoreLineBreak
|
||||||
|
{
|
||||||
|
get { return m_IgnoreLineBreak; }
|
||||||
|
set { if (PropertyUtil.SetStruct(ref m_IgnoreLineBreak, value)) SetVerticesDirty(); }
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
/// 雷达图类型。
|
/// 雷达图类型。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public RadarType radarType
|
public RadarType radarType
|
||||||
|
|||||||
@@ -167,8 +167,8 @@ namespace XCharts
|
|||||||
}
|
}
|
||||||
var startIndex = 0;
|
var startIndex = 0;
|
||||||
var endIndex = serie.dataPoints.Count;
|
var endIndex = serie.dataPoints.Count;
|
||||||
var startPos = GetStartPos(serie.dataPoints, ref startIndex);
|
var startPos = GetStartPos(serie.dataPoints, ref startIndex, serie.ignoreLineBreak);
|
||||||
var endPos = GetEndPos(serie.dataPoints, ref endIndex);
|
var endPos = GetEndPos(serie.dataPoints, ref endIndex, serie.ignoreLineBreak);
|
||||||
lp = startPos;
|
lp = startPos;
|
||||||
stPos1 = stPos2 = lastDir = lastDnPos = Vector3.zero;
|
stPos1 = stPos2 = lastDir = lastDnPos = Vector3.zero;
|
||||||
smoothStartPosUp = smoothStartPosDn = Vector3.zero;
|
smoothStartPosUp = smoothStartPosDn = Vector3.zero;
|
||||||
@@ -219,10 +219,16 @@ namespace XCharts
|
|||||||
{
|
{
|
||||||
np = serie.dataPoints[i];
|
np = serie.dataPoints[i];
|
||||||
serie.ClearSmoothList(i);
|
serie.ClearSmoothList(i);
|
||||||
|
var isIgnoreBreak = false;
|
||||||
if (np == Vector3.zero)
|
if (np == Vector3.zero)
|
||||||
{
|
{
|
||||||
serie.animation.SetDataFinish(i);
|
if (serie.ignoreLineBreak)
|
||||||
continue;
|
isIgnoreBreak = true;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
serie.animation.SetDataFinish(i);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!serie.animation.NeedAnimation(i)) break;
|
if (!serie.animation.NeedAnimation(i)) break;
|
||||||
bool isFinish = true;
|
bool isFinish = true;
|
||||||
@@ -239,34 +245,51 @@ namespace XCharts
|
|||||||
switch (serie.lineType)
|
switch (serie.lineType)
|
||||||
{
|
{
|
||||||
case LineType.Normal:
|
case LineType.Normal:
|
||||||
lp = GetLastPos(serie.dataPoints, i, np);
|
lp = GetLastPos(serie.dataPoints, i, np, serie.ignoreLineBreak);
|
||||||
nnp = GetNNPos(serie.dataPoints, i, np);
|
nnp = GetNNPos(serie.dataPoints, i, np, serie.ignoreLineBreak);
|
||||||
isFinish = DrawNormalLine(vh, serie, xAxis, lp, np, nnp, i, lineColor,
|
if (lp == Vector3.zero && serie.ignoreLineBreak) isIgnoreBreak = true;
|
||||||
areaColor, areaToColor, zeroPos, startIndex);
|
isFinish = DrawNormalLine(vh, serie, xAxis, lp, np, nnp, i,
|
||||||
|
isIgnoreBreak ? ColorUtil.clearColor32 : lineColor,
|
||||||
|
isIgnoreBreak ? ColorUtil.clearColor32 : areaColor,
|
||||||
|
isIgnoreBreak ? ColorUtil.clearColor32 : areaToColor,
|
||||||
|
zeroPos, startIndex);
|
||||||
break;
|
break;
|
||||||
case LineType.Smooth:
|
case LineType.Smooth:
|
||||||
case LineType.SmoothDash:
|
case LineType.SmoothDash:
|
||||||
llp = GetLLPos(serie.dataPoints, i, firstLastPos);
|
llp = GetLLPos(serie.dataPoints, i, firstLastPos, serie.ignoreLineBreak);
|
||||||
nnp = GetNNPos(serie.dataPoints, i, lastNextPos);
|
nnp = GetNNPos(serie.dataPoints, i, lastNextPos, serie.ignoreLineBreak);
|
||||||
|
if (lp == Vector3.zero && serie.ignoreLineBreak) isIgnoreBreak = true;
|
||||||
isFinish = DrawSmoothLine(vh, serie, xAxis, lp, np, llp, nnp, i,
|
isFinish = DrawSmoothLine(vh, serie, xAxis, lp, np, llp, nnp, i,
|
||||||
lineColor, areaColor, areaToColor, isStack, zeroPos, startIndex);
|
isIgnoreBreak ? ColorUtil.clearColor32 : lineColor,
|
||||||
|
isIgnoreBreak ? ColorUtil.clearColor32 : areaColor,
|
||||||
|
isIgnoreBreak ? ColorUtil.clearColor32 : areaToColor,
|
||||||
|
isStack, zeroPos, startIndex);
|
||||||
break;
|
break;
|
||||||
case LineType.StepStart:
|
case LineType.StepStart:
|
||||||
case LineType.StepMiddle:
|
case LineType.StepMiddle:
|
||||||
case LineType.StepEnd:
|
case LineType.StepEnd:
|
||||||
nnp = GetNNPos(serie.dataPoints, i, np);
|
nnp = GetNNPos(serie.dataPoints, i, np, serie.ignoreLineBreak);
|
||||||
isFinish = DrawStepLine(vh, serie, xAxis, lp, np, nnp, i, lineColor,
|
if (lp == Vector3.zero && serie.ignoreLineBreak) isIgnoreBreak = true;
|
||||||
areaColor, areaToColor, zeroPos);
|
isFinish = DrawStepLine(vh, serie, xAxis, lp, np, nnp, i,
|
||||||
|
isIgnoreBreak ? ColorUtil.clearColor32 : lineColor,
|
||||||
|
isIgnoreBreak ? ColorUtil.clearColor32 : areaColor,
|
||||||
|
isIgnoreBreak ? ColorUtil.clearColor32 : areaToColor,
|
||||||
|
zeroPos);
|
||||||
break;
|
break;
|
||||||
case LineType.Dash:
|
case LineType.Dash:
|
||||||
case LineType.Dot:
|
case LineType.Dot:
|
||||||
case LineType.DashDot:
|
case LineType.DashDot:
|
||||||
case LineType.DashDotDot:
|
case LineType.DashDotDot:
|
||||||
DrawOtherLine(vh, serie, xAxis, lp, np, i, lineColor, areaColor, areaToColor, zeroPos);
|
if (lp == Vector3.zero && serie.ignoreLineBreak) isIgnoreBreak = true;
|
||||||
|
DrawOtherLine(vh, serie, xAxis, lp, np, i,
|
||||||
|
isIgnoreBreak ? ColorUtil.clearColor32 : lineColor,
|
||||||
|
isIgnoreBreak ? ColorUtil.clearColor32 : areaColor,
|
||||||
|
isIgnoreBreak ? ColorUtil.clearColor32 : areaToColor,
|
||||||
|
zeroPos);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (isFinish) serie.animation.SetDataFinish(i);
|
if (isFinish) serie.animation.SetDataFinish(i);
|
||||||
if (np != Vector3.zero) lp = np;
|
if (np != Vector3.zero || serie.ignoreLineBreak) lp = np;
|
||||||
}
|
}
|
||||||
if (!serie.animation.IsFinish())
|
if (!serie.animation.IsFinish())
|
||||||
{
|
{
|
||||||
@@ -277,22 +300,22 @@ namespace XCharts
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Vector3 GetNNPos(List<Vector3> dataPoints, int index, Vector3 np)
|
private Vector3 GetNNPos(List<Vector3> dataPoints, int index, Vector3 np, bool ignoreLineBreak)
|
||||||
{
|
{
|
||||||
int size = dataPoints.Count;
|
int size = dataPoints.Count;
|
||||||
if (index >= size) return np;
|
if (index >= size) return np;
|
||||||
for (int i = index + 1; i < size; i++)
|
for (int i = index + 1; i < size; i++)
|
||||||
{
|
{
|
||||||
if (dataPoints[i] != Vector3.zero) return dataPoints[i];
|
if (dataPoints[i] != Vector3.zero || ignoreLineBreak) return dataPoints[i];
|
||||||
}
|
}
|
||||||
return np;
|
return np;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Vector3 GetStartPos(List<Vector3> dataPoints, ref int start)
|
private Vector3 GetStartPos(List<Vector3> dataPoints, ref int start, bool ignoreLineBreak)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < dataPoints.Count; i++)
|
for (int i = 0; i < dataPoints.Count; i++)
|
||||||
{
|
{
|
||||||
if (dataPoints[i] != Vector3.zero)
|
if (dataPoints[i] != Vector3.zero || ignoreLineBreak)
|
||||||
{
|
{
|
||||||
start = i;
|
start = i;
|
||||||
return dataPoints[i];
|
return dataPoints[i];
|
||||||
@@ -301,11 +324,11 @@ namespace XCharts
|
|||||||
return Vector3.zero;
|
return Vector3.zero;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Vector3 GetEndPos(List<Vector3> dataPoints, ref int end)
|
private Vector3 GetEndPos(List<Vector3> dataPoints, ref int end, bool ignoreLineBreak)
|
||||||
{
|
{
|
||||||
for (int i = dataPoints.Count - 1; i >= 0; i--)
|
for (int i = dataPoints.Count - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
if (dataPoints[i] != Vector3.zero)
|
if (dataPoints[i] != Vector3.zero || ignoreLineBreak)
|
||||||
{
|
{
|
||||||
end = i;
|
end = i;
|
||||||
return dataPoints[i];
|
return dataPoints[i];
|
||||||
@@ -314,22 +337,22 @@ namespace XCharts
|
|||||||
return Vector3.zero;
|
return Vector3.zero;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Vector3 GetLastPos(List<Vector3> dataPoints, int index, Vector3 pos)
|
private Vector3 GetLastPos(List<Vector3> dataPoints, int index, Vector3 pos, bool ignoreLineBreak)
|
||||||
{
|
{
|
||||||
if (index <= 0) return pos;
|
if (index <= 0) return pos;
|
||||||
for (int i = index - 1; i >= 0; i--)
|
for (int i = index - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
if (dataPoints[i] != Vector3.zero) return dataPoints[i];
|
if (dataPoints[i] != Vector3.zero || ignoreLineBreak) return dataPoints[i];
|
||||||
}
|
}
|
||||||
return pos;
|
return pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Vector3 GetLLPos(List<Vector3> dataPoints, int index, Vector3 lp)
|
private Vector3 GetLLPos(List<Vector3> dataPoints, int index, Vector3 lp, bool ignoreLineBreak)
|
||||||
{
|
{
|
||||||
if (index <= 1) return lp;
|
if (index <= 1) return lp;
|
||||||
for (int i = index - 2; i >= 0; i--)
|
for (int i = index - 2; i >= 0; i--)
|
||||||
{
|
{
|
||||||
if (dataPoints[i] != Vector3.zero) return dataPoints[i];
|
if (dataPoints[i] != Vector3.zero || ignoreLineBreak) return dataPoints[i];
|
||||||
}
|
}
|
||||||
return lp;
|
return lp;
|
||||||
}
|
}
|
||||||
@@ -941,8 +964,8 @@ namespace XCharts
|
|||||||
Vector3 aep = isYAxis ? new Vector3(zeroPos.x, zeroPos.y + grid.runtimeHeight) : new Vector3(zeroPos.x + grid.runtimeWidth, zeroPos.y);
|
Vector3 aep = isYAxis ? new Vector3(zeroPos.x, zeroPos.y + grid.runtimeHeight) : new Vector3(zeroPos.x + grid.runtimeWidth, zeroPos.y);
|
||||||
var sindex = 0;
|
var sindex = 0;
|
||||||
var eindex = 0;
|
var eindex = 0;
|
||||||
var sp = GetStartPos(points, ref sindex);
|
var sp = GetStartPos(points, ref sindex, serie.ignoreLineBreak);
|
||||||
var ep = GetEndPos(points, ref eindex);
|
var ep = GetEndPos(points, ref eindex, serie.ignoreLineBreak);
|
||||||
var cross = ChartHelper.GetIntersection(lp, np, zeroPos, aep);
|
var cross = ChartHelper.GetIntersection(lp, np, zeroPos, aep);
|
||||||
if (cross == Vector3.zero || smoothDownPoints.Count <= 3)
|
if (cross == Vector3.zero || smoothDownPoints.Count <= 3)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user