diff --git a/Runtime/Component/Main/Axis.cs b/Runtime/Component/Main/Axis.cs
index cee24c64..3ec8ad1a 100644
--- a/Runtime/Component/Main/Axis.cs
+++ b/Runtime/Component/Main/Axis.cs
@@ -587,7 +587,7 @@ namespace XCharts
///
internal List GetDataList(DataZoom dataZoom)
{
- if (dataZoom != null && dataZoom.enable && dataZoom.IsContainsAxisIndex(index))
+ if (dataZoom != null && dataZoom.enable && dataZoom.IsContainsAxis(this))
{
UpdateFilterData(dataZoom);
return filterData;
@@ -610,7 +610,7 @@ namespace XCharts
///
internal void UpdateFilterData(DataZoom dataZoom)
{
- if (dataZoom != null && dataZoom.enable && dataZoom.IsContainsAxisIndex(index))
+ if (dataZoom != null && dataZoom.enable && dataZoom.IsContainsAxis(this))
{
var startIndex = (int)((data.Count - 1) * dataZoom.start / 100);
var endIndex = (int)((data.Count - 1) * dataZoom.end / 100);
diff --git a/Runtime/Component/Main/DataZoom.cs b/Runtime/Component/Main/DataZoom.cs
index 6aeb8c37..70fc8ff5 100644
--- a/Runtime/Component/Main/DataZoom.cs
+++ b/Runtime/Component/Main/DataZoom.cs
@@ -365,6 +365,14 @@ namespace XCharts
public bool runtimeCoordinateDrag { get; internal set; }
public bool runtimeStartDrag { get; internal set; }
public bool runtimeEndDrag { get; internal set; }
+ ///
+ /// 运行时实际范围的开始值
+ ///
+ public float runtimeStartValue { get; internal set; }
+ ///
+ /// 运行时实际范围的结束值
+ ///
+ public float runtimeEndValue { get; internal set; }
class AxisIndexValueInfo
{
@@ -481,9 +489,20 @@ namespace XCharts
return rect.Contains(pos);
}
- public bool IsContainsAxisIndex(int index)
+ public bool IsContainsAxis(Axis axis)
{
- return xAxisIndexs.Contains(index);// || yAxisIndexs.Contains(index);
+ if (axis is XAxis) return xAxisIndexs.Contains(axis.index);
+ else if (axis is YAxis) return yAxisIndexs.Contains(axis.index);
+ else return false;
+ }
+ public bool IsContainsXAxis(int index)
+ {
+ return xAxisIndexs != null && xAxisIndexs.Contains(index);
+ }
+
+ public bool IsContainsYAxis(int index)
+ {
+ return yAxisIndexs != null && yAxisIndexs.Contains(index);
}
public Color32 GetFillerColor(Color32 themeColor)
@@ -957,7 +976,7 @@ namespace XCharts
dataZoom.SetLabelActive(false);
}
}
- if (m_CheckDataZoomLabel)
+ if (m_CheckDataZoomLabel && dataZoom.xAxisIndexs.Count > 0)
{
m_CheckDataZoomLabel = false;
var xAxis = chart.GetXAxis(dataZoom.xAxisIndexs[0]);
diff --git a/Runtime/Component/Main/Serie.cs b/Runtime/Component/Main/Serie.cs
index 639afc80..e5c049e9 100644
--- a/Runtime/Component/Main/Serie.cs
+++ b/Runtime/Component/Main/Serie.cs
@@ -1577,7 +1577,7 @@ namespace XCharts
public List GetDataList(DataZoom dataZoom = null)
{
if (dataZoom != null && dataZoom.enable
- && (dataZoom.xAxisIndexs.Contains(xAxisIndex) || dataZoom.yAxisIndexs.Contains(yAxisIndex)))
+ && (dataZoom.IsContainsXAxis(xAxisIndex) || dataZoom.IsContainsYAxis(yAxisIndex)))
{
SerieHelper.UpdateFilterData(this, dataZoom);
return m_FilterData;
diff --git a/Runtime/Component/Sub/SerieData.cs b/Runtime/Component/Sub/SerieData.cs
index 4fa2a99d..3f145773 100644
--- a/Runtime/Component/Sub/SerieData.cs
+++ b/Runtime/Component/Sub/SerieData.cs
@@ -241,6 +241,18 @@ namespace XCharts
else return 0;
}
+ public float GetData(int index, float min, float max)
+ {
+ if (index >= 0 && index < m_Data.Count)
+ {
+ var value = m_Data[index];
+ if (value < min) return min;
+ else if (value > max) return max;
+ else return value;
+ }
+ else return 0;
+ }
+
public float GetPreviousData(int index, bool inverse = false)
{
if (index >= 0 && index < m_PreviousData.Count)
diff --git a/Runtime/Helper/DataZoomHelper.cs b/Runtime/Helper/DataZoomHelper.cs
new file mode 100644
index 00000000..d359bb86
--- /dev/null
+++ b/Runtime/Helper/DataZoomHelper.cs
@@ -0,0 +1,37 @@
+/************************************************/
+/* */
+/* Copyright (c) 2018 - 2021 monitor1394 */
+/* https://github.com/monitor1394 */
+/* */
+/************************************************/
+using System.Collections.Generic;
+
+namespace XCharts
+{
+ public static class DataZoomHelper
+ {
+ public static DataZoom GetDataZoom(Serie serie, List dataZooms)
+ {
+ if(serie == null) return null;
+ foreach (var dataZoom in dataZooms)
+ {
+ if (!dataZoom.enable) continue;
+ if (dataZoom.IsContainsXAxis(serie.xAxisIndex)
+ || dataZoom.IsContainsYAxis(serie.yAxisIndex))
+ {
+ return dataZoom;
+ }
+ }
+ return null;
+ }
+
+ public static void UpdateDataZoomRuntimeStartEndValue(DataZoom dataZoom, Serie serie){
+ if(dataZoom == null || serie == null) return;
+ float min = 0;
+ float max = 0;
+ SerieHelper.GetMinMaxData(serie, out min, out max, null);
+ dataZoom.runtimeStartValue = min + (max-min) * dataZoom.start / 100;
+ dataZoom.runtimeEndValue = min +(max-min) * dataZoom.end / 100;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Runtime/Helper/DataZoomHelper.cs.meta b/Runtime/Helper/DataZoomHelper.cs.meta
new file mode 100644
index 00000000..6ec44bf7
--- /dev/null
+++ b/Runtime/Helper/DataZoomHelper.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 629319d47e0ca4e4dad76864d4e7226b
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Runtime/Helper/SerieHelper.cs b/Runtime/Helper/SerieHelper.cs
index 6d34bcf3..7f11c2fb 100644
--- a/Runtime/Helper/SerieHelper.cs
+++ b/Runtime/Helper/SerieHelper.cs
@@ -442,7 +442,7 @@ namespace XCharts
public static void UpdateFilterData(Serie serie, DataZoom dataZoom)
{
if (dataZoom == null || !dataZoom.enable) return;
- if (dataZoom.xAxisIndexs.Contains(serie.xAxisIndex))
+ if (dataZoom.IsContainsXAxis(serie.xAxisIndex))
{
if (dataZoom.IsXAxisIndexValue(serie.xAxisIndex))
{
@@ -455,7 +455,7 @@ namespace XCharts
UpdateFilterData_Category(serie, dataZoom);
}
}
- else if (dataZoom.yAxisIndexs.Contains(serie.yAxisIndex))
+ else if (dataZoom.IsContainsYAxis(serie.yAxisIndex))
{
if (dataZoom.IsYAxisIndexValue(serie.yAxisIndex))
{
diff --git a/Runtime/Internal/CoordinateChart.cs b/Runtime/Internal/CoordinateChart.cs
index 3c995bca..d1092321 100644
--- a/Runtime/Internal/CoordinateChart.cs
+++ b/Runtime/Internal/CoordinateChart.cs
@@ -1737,8 +1737,17 @@ namespace XCharts
public Grid GetDataZoomGridOrDefault(DataZoom dataZoom)
{
- var xAxis = GetXAxis(dataZoom.xAxisIndexs[0]);
- Grid grid = GetGrid(xAxis.gridIndex);
+ Grid grid = null;
+ if (dataZoom.xAxisIndexs != null && dataZoom.xAxisIndexs.Count > 0)
+ {
+ var xAxis = GetXAxis(dataZoom.xAxisIndexs[0]);
+ grid = GetGrid(xAxis.gridIndex);
+ }
+ else if (dataZoom.yAxisIndexs != null && dataZoom.yAxisIndexs.Count > 0)
+ {
+ var yAxis = GetYAxis(dataZoom.yAxisIndexs[0]);
+ grid = GetGrid(yAxis.gridIndex);
+ }
if (grid == null) return m_Grids[0];
else return grid;
}