From a7c4e24555d3a2d97e0b1dde66b8327e5563c919 Mon Sep 17 00:00:00 2001 From: monitor1394 Date: Tue, 30 Aug 2022 08:10:18 +0800 Subject: [PATCH] [bug][datazoom] fix datazoom range error (#221) --- Assets/XCharts/CHANGELOG.md | 2 ++ Assets/XCharts/Runtime/Component/Main/Axis.cs | 8 ++++---- Assets/XCharts/Runtime/Helper/SerieHelper.cs | 8 ++++---- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/Assets/XCharts/CHANGELOG.md b/Assets/XCharts/CHANGELOG.md index 873aa796..9324e845 100644 --- a/Assets/XCharts/CHANGELOG.md +++ b/Assets/XCharts/CHANGELOG.md @@ -46,6 +46,8 @@ ## branch-2.0 +* (2022.08.30) 修复`DataZoom`在某些情况下计算范围不准确的问题 (#221) + ## v2.8.2 * (2022.08.15) 发布`v2.8.2`版本 diff --git a/Assets/XCharts/Runtime/Component/Main/Axis.cs b/Assets/XCharts/Runtime/Component/Main/Axis.cs index ff909097..6b6077cc 100644 --- a/Assets/XCharts/Runtime/Component/Main/Axis.cs +++ b/Assets/XCharts/Runtime/Component/Main/Axis.cs @@ -712,13 +712,13 @@ namespace XCharts int start = 0, end = 0; if (dataZoom.runtimeInvert) { - end = Mathf.CeilToInt(data.Count * dataZoom.end / 100); + end = Mathf.RoundToInt(data.Count * dataZoom.end / 100); start = end - range; if (start < 0) start = 0; } else { - start = Mathf.FloorToInt(data.Count * dataZoom.start / 100); + start = Mathf.RoundToInt(data.Count * dataZoom.start / 100); end = start + range; if (end > data.Count) end = data.Count; } @@ -735,8 +735,8 @@ namespace XCharts if (filterMinShow > data.Count) range = data.Count; else range = filterMinShow; } - if (range > data.Count - start - 1) - start = data.Count - range - 1; + if (range > data.Count - start) + start = data.Count - range; filterData = data.GetRange(start, range); } else diff --git a/Assets/XCharts/Runtime/Helper/SerieHelper.cs b/Assets/XCharts/Runtime/Helper/SerieHelper.cs index fb520507..edd10557 100644 --- a/Assets/XCharts/Runtime/Helper/SerieHelper.cs +++ b/Assets/XCharts/Runtime/Helper/SerieHelper.cs @@ -642,13 +642,13 @@ namespace XCharts int start = 0, end = 0; if (dataZoom.runtimeInvert) { - end = Mathf.CeilToInt(data.Count * dataZoom.end / 100); + end = Mathf.RoundToInt(data.Count * dataZoom.end / 100); start = end - range; if (start < 0) start = 0; } else { - start = Mathf.FloorToInt(data.Count * dataZoom.start / 100); + start = Mathf.RoundToInt(data.Count * dataZoom.start / 100); end = start + range; if (end > data.Count) end = data.Count; } @@ -666,8 +666,8 @@ namespace XCharts if (dataZoom.minShowNum > data.Count) range = data.Count; else range = dataZoom.minShowNum; } - if (range > data.Count - start - 1) - start = data.Count - range - 1; + if (range > data.Count - start) + start = data.Count - range; serie.m_FilterData = data.GetRange(start, range); } else