From 04efcf3959f7a95fac24ef5f8ad6189517431b9b Mon Sep 17 00:00:00 2001 From: monitor1394 Date: Thu, 18 Feb 2021 09:24:01 +0800 Subject: [PATCH] Fixed an issue where the `Radar` could not refresh itself after parameter changing #122 --- Assets/XCharts/CHANGELOG-EN.md | 2 + Assets/XCharts/CHANGELOG.md | 2 + Assets/XCharts/Runtime/API/RadarChart_API.cs | 19 ++++++++ .../XCharts/Runtime/Component/Main/Radar.cs | 6 +++ Assets/XCharts/Runtime/Internal/BaseChart.cs | 39 ++++++++++------ .../Runtime/Internal/DrawSerieRadar.cs | 44 ++++++++----------- 6 files changed, 74 insertions(+), 38 deletions(-) diff --git a/Assets/XCharts/CHANGELOG-EN.md b/Assets/XCharts/CHANGELOG-EN.md index 1792ab74..16e15155 100644 --- a/Assets/XCharts/CHANGELOG-EN.md +++ b/Assets/XCharts/CHANGELOG-EN.md @@ -31,6 +31,8 @@ ## Latest +* (2021.02.18) Fixed an issue where the `Radar` could not refresh itself after parameter changing #122 + ## v2.0.0 * (2021.02.05) Release `v2.0.0` version diff --git a/Assets/XCharts/CHANGELOG.md b/Assets/XCharts/CHANGELOG.md index 3a38fa27..79389252 100644 --- a/Assets/XCharts/CHANGELOG.md +++ b/Assets/XCharts/CHANGELOG.md @@ -31,6 +31,8 @@ ## Latest +* (2021.02.18) 修复`Radar`参数变更后无法自刷新的问题 + ## 2.0.0 * (2021.02.05) 发布`v2.0.0`版本 diff --git a/Assets/XCharts/Runtime/API/RadarChart_API.cs b/Assets/XCharts/Runtime/API/RadarChart_API.cs index 2090cf12..9afe318a 100644 --- a/Assets/XCharts/Runtime/API/RadarChart_API.cs +++ b/Assets/XCharts/Runtime/API/RadarChart_API.cs @@ -26,6 +26,17 @@ namespace XCharts m_Radars.Clear(); } + /// + /// 移除指定Radar的所有Indicator。 + /// + /// + public void RemoveIndicator(int radarIndex) + { + var radar = GetRadar(radarIndex); + if (radar == null) return; + radar.indicatorList.Clear(); + } + /// /// 添加雷达坐标系组件。 /// @@ -61,6 +72,14 @@ namespace XCharts return radar; } + public bool AddIndicator(int radarIndex, Radar.Indicator indicator) + { + var radar = GetRadar(radarIndex); + if (radar == null) return false; + radar.AddIndicator(indicator); + return true; + } + /// /// 添加指示器。 /// diff --git a/Assets/XCharts/Runtime/Component/Main/Radar.cs b/Assets/XCharts/Runtime/Component/Main/Radar.cs index 0cab5c6b..8094ae9a 100644 --- a/Assets/XCharts/Runtime/Component/Main/Radar.cs +++ b/Assets/XCharts/Runtime/Component/Main/Radar.cs @@ -340,6 +340,12 @@ namespace XCharts return new Vector3(x, y); } + public void AddIndicator(Radar.Indicator indicator) + { + indicatorList.Add(indicator); + SetAllDirty(); + } + public Radar.Indicator AddIndicator(string name, float min, float max) { var indicator = new Radar.Indicator(); diff --git a/Assets/XCharts/Runtime/Internal/BaseChart.cs b/Assets/XCharts/Runtime/Internal/BaseChart.cs index 541d16e8..1f45f6d4 100644 --- a/Assets/XCharts/Runtime/Internal/BaseChart.cs +++ b/Assets/XCharts/Runtime/Internal/BaseChart.cs @@ -249,16 +249,19 @@ namespace XCharts m_Theme.ClearDirty(); } CheckComponentDirty(tooltip); - foreach (var title in m_Titles) CheckComponentDirty(title); - foreach (var legend in m_Legends) CheckComponentDirty(legend); - foreach (var dataZoom in m_DataZooms) CheckComponentDirty(dataZoom); - foreach (var visualMap in m_VisualMaps) CheckComponentDirty(visualMap); - foreach (var grid in m_Grids) CheckComponentDirty(grid); - foreach (var axis in m_XAxes) CheckComponentDirty(axis); - foreach (var axis in m_YAxes) CheckComponentDirty(axis); - foreach (var polar in m_Polars) CheckComponentDirty(polar); - foreach (var axis in m_AngleAxes) CheckComponentDirty(axis); - foreach (var axis in m_RadiusAxes) CheckComponentDirty(axis); + foreach (var component in m_Titles) CheckComponentDirty(component); + foreach (var component in m_Legends) CheckComponentDirty(component); + foreach (var component in m_Tooltips) CheckComponentDirty(component); + foreach (var component in m_DataZooms) CheckComponentDirty(component); + foreach (var component in m_VisualMaps) CheckComponentDirty(component); + foreach (var component in m_Grids) CheckComponentDirty(component); + foreach (var component in m_XAxes) CheckComponentDirty(component); + foreach (var component in m_YAxes) CheckComponentDirty(component); + foreach (var component in m_Vessels) CheckComponentDirty(component); + foreach (var component in m_Polars) CheckComponentDirty(component); + foreach (var component in m_AngleAxes) CheckComponentDirty(component); + foreach (var component in m_RadiusAxes) CheckComponentDirty(component); + foreach (var component in m_Radars) CheckComponentDirty(component); foreach (var drawSerie in m_DrawSeries) drawSerie.CheckComponent(); } @@ -278,9 +281,19 @@ namespace XCharts { base.SetAllComponentDirty(); m_Theme.SetAllDirty(); - foreach (var title in m_Titles) title.SetAllDirty(); - foreach (var legend in m_Legends) legend.SetAllDirty(); - tooltip.SetAllDirty(); + foreach (var component in m_Titles) component.SetAllDirty(); + foreach (var component in m_Legends) component.SetAllDirty(); + foreach (var component in m_Tooltips) component.SetAllDirty(); + foreach (var component in m_Grids) component.SetAllDirty(); + foreach (var component in m_XAxes) component.SetAllDirty(); + foreach (var component in m_YAxes) component.SetAllDirty(); + foreach (var component in m_DataZooms) component.SetAllDirty(); + foreach (var component in m_VisualMaps) component.SetAllDirty(); + foreach (var component in m_Vessels) component.SetAllDirty(); + foreach (var component in m_Polars) component.SetAllDirty(); + foreach (var component in m_RadiusAxes) component.SetAllDirty(); + foreach (var component in m_AngleAxes) component.SetAllDirty(); + foreach (var component in m_Radars) component.SetAllDirty(); m_ReinitLabel = true; m_ReinitTitle = true; } diff --git a/Assets/XCharts/Runtime/Internal/DrawSerieRadar.cs b/Assets/XCharts/Runtime/Internal/DrawSerieRadar.cs index 9120a8f2..18c446f0 100644 --- a/Assets/XCharts/Runtime/Internal/DrawSerieRadar.cs +++ b/Assets/XCharts/Runtime/Internal/DrawSerieRadar.cs @@ -18,7 +18,6 @@ namespace XCharts public BaseChart chart; private const string INDICATOR_TEXT = "indicator"; private bool m_IsEnterLegendButtom; - private bool m_RadarsDirty; Dictionary serieNameSet = new Dictionary(); public DrawSerieRadar(BaseChart chart) @@ -28,26 +27,11 @@ namespace XCharts public void InitComponent() { - InitIndicator(); + InitRadars(); } public void CheckComponent() { - var anyDirty = IsAnyRadarDirty(); - if (m_RadarsDirty || anyDirty) - { - InitIndicator(); - chart.RefreshBasePainter(); - chart.tooltip.UpdateToTop(); - if (anyDirty) - { - foreach (var radar in chart.radars) - { - radar.ClearDirty(); - } - } - m_RadarsDirty = false; - } } public void Update() @@ -244,22 +228,31 @@ namespace XCharts { } - private void InitIndicator() + private void InitRadars() { - ChartHelper.HideAllObject(chart.transform, INDICATOR_TEXT); for (int n = 0; n < chart.radars.Count; n++) { Radar radar = chart.radars[n]; + radar.index = n; + InitRadar(radar); + } + } + + private void InitRadar(Radar radar) + { + float txtWid = 100; + float txtHig = 20; + radar.painter = chart.GetPainter(radar.index); + radar.refreshComponent = delegate () + { + ChartHelper.HideAllObject(chart.transform, INDICATOR_TEXT + "_" + radar.index); radar.UpdateRadarCenter(chart.chartPosition, chart.chartWidth, chart.chartHeight); - int indicatorNum = radar.indicatorList.Count; - float txtWid = 100; - float txtHig = 20; - for (int i = 0; i < indicatorNum; i++) + for (int i = 0; i < radar.indicatorList.Count; i++) { var indicator = radar.indicatorList[i]; var pos = radar.GetIndicatorPosition(i); var textStyle = indicator.textStyle; - var objName = INDICATOR_TEXT + "_" + n + "_" + i; + var objName = INDICATOR_TEXT + "_" + radar.index + "_" + i; var txt = ChartHelper.AddTextObject(objName, chart.transform, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(txtWid, txtHig), textStyle, chart.theme.radar); @@ -270,7 +263,8 @@ namespace XCharts var offset = new Vector3(textStyle.offset.x, textStyle.offset.y); AxisHelper.AdjustCircleLabelPos(txt, pos, radar.runtimeCenterPos, txtHig, offset); } - } + }; + radar.refreshComponent?.Invoke(); } private void DrawMutipleRadar(VertexHelper vh, Serie serie, int i)