diff --git a/Assets/XCharts/CHANGELOG.md b/Assets/XCharts/CHANGELOG.md index a6ecfd5a..56f3c709 100644 --- a/Assets/XCharts/CHANGELOG.md +++ b/Assets/XCharts/CHANGELOG.md @@ -34,6 +34,7 @@ ## Latest +* (2021.04.28) 增加`SerieData`的`ignore`可忽略当前数据项 * (2021.04.28) 修复`DataZoom`下`AxisLabel`显示不准确的问题 #138 * (2021.04.26) 修复运行时动态创建图表会异常的问题 #137 * (2021.04.26) 增加`BarChart`绘制渐变边框的支持 diff --git a/Assets/XCharts/Editor/PropertyDrawers/SerieDrawer.cs b/Assets/XCharts/Editor/PropertyDrawers/SerieDrawer.cs index e688a0b7..7044b3e9 100644 --- a/Assets/XCharts/Editor/PropertyDrawers/SerieDrawer.cs +++ b/Assets/XCharts/Editor/PropertyDrawers/SerieDrawer.cs @@ -393,6 +393,7 @@ namespace XCharts if (showDetail) { EditorGUI.indentLevel += 2; + var m_Ignore = serieData.FindPropertyRelative("m_Ignore"); var m_Icon = serieData.FindPropertyRelative("m_IconStyle"); var m_EnableLabel = serieData.FindPropertyRelative("m_EnableLabel"); var m_Label = serieData.FindPropertyRelative("m_Label"); @@ -402,6 +403,8 @@ namespace XCharts var m_Emphasis = serieData.FindPropertyRelative("m_Emphasis"); var m_EnableSymbol = serieData.FindPropertyRelative("m_EnableSymbol"); var m_Symbol = serieData.FindPropertyRelative("m_Symbol"); + EditorGUI.PropertyField(drawRect, m_Ignore); + AddHeight(EditorGUI.GetPropertyHeight(m_Ignore)); EditorGUI.PropertyField(drawRect, m_Icon); AddHeight(EditorGUI.GetPropertyHeight(m_Icon)); EditorGUI.PropertyField(drawRect, m_Symbol); diff --git a/Assets/XCharts/Runtime/Component/Main/Serie.cs b/Assets/XCharts/Runtime/Component/Main/Serie.cs index 250d8968..e75da2a1 100644 --- a/Assets/XCharts/Runtime/Component/Main/Serie.cs +++ b/Assets/XCharts/Runtime/Component/Main/Serie.cs @@ -1704,19 +1704,22 @@ namespace XCharts } } - public bool IsIgnoreIndex(int index, int dimension) + public bool IsIgnoreIndex(int index, int dimension = 1) { - if (m_Ignore) + var serieData = GetSerieData(index); + if (serieData != null) { - var serieData = GetSerieData(index); - if (serieData != null) - { - return IsIgnoreValue(serieData.GetData(dimension)); - } + return IsIgnoreValue(serieData, dimension); } return false; } + public bool IsIgnoreValue(SerieData serieData, int dimension = 1) + { + if (serieData.ignore) return true; + return IsIgnoreValue(serieData.GetData(dimension)); + } + public bool IsIgnoreValue(float value) { return m_Ignore && Mathf.Approximately(value, m_IgnoreValue); diff --git a/Assets/XCharts/Runtime/Component/Sub/SerieData.cs b/Assets/XCharts/Runtime/Component/Sub/SerieData.cs index b82f6f9a..4fa2a99d 100644 --- a/Assets/XCharts/Runtime/Component/Sub/SerieData.cs +++ b/Assets/XCharts/Runtime/Component/Sub/SerieData.cs @@ -19,6 +19,7 @@ namespace XCharts { [SerializeField] private string m_Name; [SerializeField] private bool m_Selected; + [SerializeField] private bool m_Ignore = false; [SerializeField] private float m_Radius; [SerializeField] private IconStyle m_IconStyle = new IconStyle(); [SerializeField] private bool m_EnableLabel = false; @@ -94,6 +95,14 @@ namespace XCharts /// public SerieSymbol symbol { get { return m_Symbol; } set { m_Symbol = value; } } /// + /// 是否忽略数据。当为 true 时,数据不进行绘制。 + /// + public bool ignore + { + get { return m_Ignore; } + set { if (PropertyUtil.SetStruct(ref m_Ignore, value)) SetVerticesDirty(); } + } + /// /// An arbitrary dimension data list of data item. /// 可指定任意维数的数值列表。 /// diff --git a/Assets/XCharts/Runtime/Helper/SerieLabelHelper.cs b/Assets/XCharts/Runtime/Helper/SerieLabelHelper.cs index dd9205e0..e10e6497 100644 --- a/Assets/XCharts/Runtime/Helper/SerieLabelHelper.cs +++ b/Assets/XCharts/Runtime/Helper/SerieLabelHelper.cs @@ -85,7 +85,7 @@ namespace XCharts public static bool CanShowLabel(Serie serie, SerieData serieData, SerieLabel label, int dimesion) { - return serie.show && serieData.canShowLabel && !serie.IsIgnoreValue(serieData.GetData(dimesion)); + return serie.show && serieData.canShowLabel && !serie.IsIgnoreValue(serieData, dimesion); } public static string GetFormatterContent(Serie serie, SerieData serieData, diff --git a/Assets/XCharts/Runtime/Helper/SeriesHelper.cs b/Assets/XCharts/Runtime/Helper/SeriesHelper.cs index e729e122..8cd73b2b 100644 --- a/Assets/XCharts/Runtime/Helper/SeriesHelper.cs +++ b/Assets/XCharts/Runtime/Helper/SeriesHelper.cs @@ -102,7 +102,7 @@ namespace XCharts case SerieType.Ring: for (int i = 0; i < serie.data.Count; i++) { - if (serie.type == SerieType.Pie && serie.IsIgnoreValue(serie.data[i].GetData(1))) continue; + if (serie.type == SerieType.Pie && serie.IsIgnoreValue(serie.data[i])) continue; if (string.IsNullOrEmpty(serie.data[i].name)) serieNameList.Add(ChartCached.IntToStr(i)); else if (!serieNameList.Contains(serie.data[i].name)) diff --git a/Assets/XCharts/Runtime/Internal/CoordinateChart.cs b/Assets/XCharts/Runtime/Internal/CoordinateChart.cs index e83d683f..7c697584 100644 --- a/Assets/XCharts/Runtime/Internal/CoordinateChart.cs +++ b/Assets/XCharts/Runtime/Internal/CoordinateChart.cs @@ -1684,7 +1684,7 @@ namespace XCharts var pos = serie.dataPoints[j]; var serieLabel = SerieHelper.GetSerieLabel(serie, serieData); var dimension = 1; - var isIgnore = serie.IsIgnoreIndex(j, 1); + var isIgnore = serie.IsIgnoreIndex(j); serieData.labelObject.SetPosition(serieData.labelPosition); serieData.labelObject.UpdateIcon(serieData.iconStyle); if (serie.show && serieLabel.show && serieData.canShowLabel && !isIgnore) diff --git a/Assets/XCharts/Runtime/Internal/CoordinateChart_DrawBar.cs b/Assets/XCharts/Runtime/Internal/CoordinateChart_DrawBar.cs index 1250f23b..dbe0a0fd 100644 --- a/Assets/XCharts/Runtime/Internal/CoordinateChart_DrawBar.cs +++ b/Assets/XCharts/Runtime/Internal/CoordinateChart_DrawBar.cs @@ -49,7 +49,7 @@ namespace XCharts for (int i = serie.minShow; i < maxCount; i++) { var serieData = showData[i]; - if (serie.IsIgnoreValue(serieData.GetData(1))) + if (serie.IsIgnoreValue(serieData)) { serie.dataPoints.Add(Vector3.zero); continue; @@ -185,7 +185,7 @@ namespace XCharts for (int i = serie.minShow; i < maxCount; i++) { var serieData = showData[i]; - if (serie.IsIgnoreValue(serieData.GetData(1))) + if (serie.IsIgnoreValue(serieData)) { serie.dataPoints.Add(Vector3.zero); continue; diff --git a/Assets/XCharts/Runtime/Internal/CoordinateChart_DrawCandlestick.cs b/Assets/XCharts/Runtime/Internal/CoordinateChart_DrawCandlestick.cs index c56e680a..9b655bae 100644 --- a/Assets/XCharts/Runtime/Internal/CoordinateChart_DrawCandlestick.cs +++ b/Assets/XCharts/Runtime/Internal/CoordinateChart_DrawCandlestick.cs @@ -37,7 +37,7 @@ namespace XCharts for (int i = serie.minShow; i < maxCount; i++) { var serieData = showData[i]; - if (serie.IsIgnoreValue(serieData.GetData(1))) + if (serie.IsIgnoreValue(serieData)) { serie.dataPoints.Add(Vector3.zero); continue; diff --git a/Assets/XCharts/Runtime/Internal/CoordinateChart_DrawLine.cs b/Assets/XCharts/Runtime/Internal/CoordinateChart_DrawLine.cs index 13d3873a..f557a4f0 100644 --- a/Assets/XCharts/Runtime/Internal/CoordinateChart_DrawLine.cs +++ b/Assets/XCharts/Runtime/Internal/CoordinateChart_DrawLine.cs @@ -125,7 +125,7 @@ namespace XCharts for (i = serie.minShow; i < maxCount; i += rate) { if (i == maxCount - 1) includeLastData = true; - if (serie.IsIgnoreValue(showData[i].GetData(1))) + if (serie.IsIgnoreValue(showData[i])) { serie.dataPoints.Add(Vector3.zero); showData[i].runtimeStackHig = 0; @@ -146,7 +146,7 @@ namespace XCharts if (!includeLastData) { i = maxCount - 1; - if (serie.IsIgnoreValue(showData[i].GetData(1))) + if (serie.IsIgnoreValue(showData[i])) { serie.dataPoints.Add(Vector3.zero); showData[i].runtimeStackHig = 0; @@ -179,7 +179,7 @@ namespace XCharts if (serie.minShow > 0 && serie.minShow < showData.Count) { i = serie.minShow - 1; - if (serie.IsIgnoreValue(showData[i].GetData(1))) + if (serie.IsIgnoreValue(showData[i])) { serie.dataPoints.Add(Vector3.zero); showData[i].runtimeStackHig = 0; @@ -197,7 +197,7 @@ namespace XCharts if (serie.maxShow > 0 && serie.maxShow < showData.Count) { i = serie.maxShow; - if (serie.IsIgnoreValue(showData[i].GetData(1))) + if (serie.IsIgnoreValue(showData[i])) { serie.dataPoints.Add(Vector3.zero); showData[i].runtimeStackHig = 0; diff --git a/Assets/XCharts/Runtime/Internal/DrawSeriePie.cs b/Assets/XCharts/Runtime/Internal/DrawSeriePie.cs index e78ab63f..aac2b130 100644 --- a/Assets/XCharts/Runtime/Internal/DrawSeriePie.cs +++ b/Assets/XCharts/Runtime/Internal/DrawSeriePie.cs @@ -59,7 +59,7 @@ namespace XCharts for (int n = 0; n < data.Count; n++) { var serieData = data[n]; - if (!serieData.canShowLabel || serie.IsIgnoreValue(serieData.GetData(1))) + if (!serieData.canShowLabel || serie.IsIgnoreValue(serieData)) { serieData.SetLabelActive(false); continue;