From dc46477c157de28e26c5844a4da802be8d540e4a Mon Sep 17 00:00:00 2001 From: monitor1394 Date: Fri, 25 Aug 2023 07:39:10 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D`MarkLine`=E5=9C=A8=E5=BC=80?= =?UTF-8?q?=E5=90=AF`Clip`=E5=90=8E=E8=BF=98=E7=BB=98=E5=88=B6=E5=9C=A8?= =?UTF-8?q?=E5=9D=90=E6=A0=87=E7=B3=BB=E5=A4=96=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Documentation~/zh/changelog.md | 1 + Runtime/Component/Mark/MarkLine.cs | 1 + Runtime/Component/Mark/MarkLineHandler.cs | 18 +++++++++++++----- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/Documentation~/zh/changelog.md b/Documentation~/zh/changelog.md index 78c16247..98049ed2 100644 --- a/Documentation~/zh/changelog.md +++ b/Documentation~/zh/changelog.md @@ -78,6 +78,7 @@ slug: /changelog 日志详情: +* (2023.08.25) 修复`MarkLine`在开启`Clip`后还绘制在坐标系外的问题 * (2023.08.24) 优化`YAxis`在数据全为0时默认设置0-1的范围 * (2023.08.23) 修复`YAxis`的`Label`可能会重复的问题 * (2023.08.22) 修复`Bar`显示隐藏时绘制表现异常的问题 diff --git a/Runtime/Component/Mark/MarkLine.cs b/Runtime/Component/Mark/MarkLine.cs index 76929290..3a7b135f 100644 --- a/Runtime/Component/Mark/MarkLine.cs +++ b/Runtime/Component/Mark/MarkLine.cs @@ -129,6 +129,7 @@ namespace XCharts.Runtime public Vector3 runtimeCurrentEndPosition { get; internal set; } public ChartLabel runtimeLabel { get; internal set; } public double runtimeValue { get; internal set; } + public bool runtimeInGrid { get; internal set; } /// /// Name of the marker, which will display as a label. diff --git a/Runtime/Component/Mark/MarkLineHandler.cs b/Runtime/Component/Mark/MarkLineHandler.cs index 6ac01410..9c21c06a 100644 --- a/Runtime/Component/Mark/MarkLineHandler.cs +++ b/Runtime/Component/Mark/MarkLineHandler.cs @@ -36,7 +36,7 @@ namespace XCharts.Runtime if (data.runtimeLabel != null) { var pos = MarkLineHelper.GetLabelPosition(data); - data.runtimeLabel.SetActive(data.label.show && pos != Vector3.zero); + data.runtimeLabel.SetActive(data.label.show && data.runtimeInGrid); data.runtimeLabel.SetPosition(pos); data.runtimeLabel.SetText(MarkLineHelper.GetFormatterContent(serie, data)); } @@ -49,7 +49,7 @@ namespace XCharts.Runtime var serie = chart.GetSerie(markLine.serieIndex); if (!serie.show || !markLine.show) return; ResetTempMarkLineGroupData(markLine); - var serieColor = (Color) chart.GetItemColor(serie); + var serieColor = (Color)chart.GetItemColor(serie); if (m_TempGroupData.Count > 0) { foreach (var kv in m_TempGroupData) @@ -71,7 +71,7 @@ namespace XCharts.Runtime private void InitMarkLineLabel(Serie serie, MarkLineData data, Color serieColor) { data.painter = chart.m_PainterUpper; - data.refreshComponent = delegate() + data.refreshComponent = delegate () { var textName = string.Format("markLine_{0}_{1}", serie.index, data.index); var content = MarkLineHelper.GetFormatterContent(serie, data); @@ -79,7 +79,7 @@ namespace XCharts.Runtime content, Color.clear, TextAnchor.MiddleCenter); var pos = MarkLineHelper.GetLabelPosition(data); label.SetIconActive(false); - label.SetActive(data.label.show && pos != Vector3.zero); + label.SetActive(data.label.show && data.runtimeInGrid); label.SetPosition(pos); data.runtimeLabel = label; }; @@ -218,9 +218,17 @@ namespace XCharts.Runtime { if (!animation.IsFinish()) ep = Vector3.Lerp(sp, ep, animation.GetCurrDetail()); + if ((!chart.IsInChart(sp) && !chart.IsInChart(ep)) || + (serie.clip && !grid.Contains(sp) && !grid.Contains(ep))) + { + data.runtimeInGrid = false; + m_RefreshLabel = true; + return; + } data.runtimeCurrentEndPosition = ep; if (sp != Vector3.zero || ep != Vector3.zero) { + data.runtimeInGrid = true; m_RefreshLabel = true; chart.ClampInChart(ref sp); chart.ClampInChart(ref ep); @@ -247,7 +255,7 @@ namespace XCharts.Runtime Color32 borderColor; SerieHelper.GetSymbolInfo(out borderColor, out tickness, out cornerRadius, serie, null, chart.theme); chart.DrawClipSymbol(vh, symbol.type, symbol.size, tickness, pos, lineColor, lineColor, - ColorUtil.clearColor32, borderColor, symbol.gap, true, cornerRadius, grid, startPos); + ColorUtil.clearColor32, borderColor, symbol.gap, serie.clip, cornerRadius, grid, startPos); } private void GetStartEndPos(Axis xAxis, Axis yAxis, GridCoord grid, double value, ref Vector3 sp, ref Vector3 ep)