From 451c237d5882dd7bf6d16b2b7acc08167cdd7da6 Mon Sep 17 00:00:00 2001 From: monitor1394 Date: Fri, 20 Dec 2019 09:17:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0`RadarChart`=E7=9B=B8?= =?UTF-8?q?=E5=85=B3API=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Runtime/API/RadarChart_API.cs | 131 +++++++++++++++++++++++++++++ Runtime/API/RadarChart_API.cs.meta | 11 +++ Runtime/Component/Main/Radar.cs | 26 ++++++ Runtime/Component/Main/Serie.cs | 9 +- Runtime/Component/Sub/SerieData.cs | 5 +- Runtime/RadarChart.cs | 17 +--- 6 files changed, 175 insertions(+), 24 deletions(-) create mode 100644 Runtime/API/RadarChart_API.cs create mode 100644 Runtime/API/RadarChart_API.cs.meta diff --git a/Runtime/API/RadarChart_API.cs b/Runtime/API/RadarChart_API.cs new file mode 100644 index 00000000..df8908fa --- /dev/null +++ b/Runtime/API/RadarChart_API.cs @@ -0,0 +1,131 @@ +/******************************************/ +/* */ +/* Copyright (c) 2018 monitor1394 */ +/* https://github.com/monitor1394 */ +/* */ +/******************************************/ + +using System.Collections.Generic; +using UnityEngine; + +namespace XCharts +{ + public partial class RadarChart + { + /// + /// 雷达坐标系组件列表。 + /// + public List radars { get { return m_Radars; } } + + /// + /// 移除所有数据,包含雷达坐标系指示器数据。 + /// + public override void RemoveData() + { + base.RemoveData(); + foreach (var radar in m_Radars) + { + radar.indicatorList.Clear(); + } + m_CheckRadars.Clear(); + } + + /// + /// 移除所有雷达坐标系组件。 + /// + public void RemoveRadar() + { + m_Radars.Clear(); + } + + /// + /// 添加雷达坐标系组件。 + /// + public void AddRadar(Radar radar) + { + m_Radars.Add(radar); + } + + /// + /// 添加雷达坐标系组件。 + /// + /// 形状,圆形还是多边形 + /// 中心点,0-1浮点数时表示百分比 + /// 半径,0-1浮点数时表示百分比 + /// 指示器轴的分割段数 + /// 线条宽 + /// 是否显示指示器名称 + /// 是否显示分割区域 + /// + public Radar AddRadar(Radar.Shape shape, Vector2 center, float radius, int splitNumber = 5, + float lineWidth = 0.6f, bool showIndicator = true, bool showSplitArea = true) + { + var radar = new Radar(); + radar.shape = shape; + radar.splitNumber = splitNumber; + radar.radius = radius; + radar.indicator = showIndicator; + radar.center[0] = center.x; + radar.center[1] = center.y; + radar.splitArea.show = showSplitArea; + radar.lineStyle.width = lineWidth; + m_Radars.Add(radar); + return radar; + } + + /// + /// 添加指示器。 + /// + /// 雷达坐标系组件索引,从0开始 + /// 指示器名称 + /// 指示器最小值 + /// 指示器最大值 + /// + public Radar.Indicator AddIndicator(int radarIndex, string name, float min, float max) + { + var radar = GetRadar(radarIndex); + if (radar == null) return null; + return radar.AddIndicator(name, min, max); + } + + /// + /// 更新指示器。 + /// + /// 雷达坐标系组件的索引,从0开始 + /// 指示器索引,从0开始 + /// 指示器名称 + /// 指示器最小值 + /// 指示器最大值 + /// + public bool UpdateIndicator(int radarIndex, int indicatorIndex, string name, float min, float max) + { + var radar = GetRadar(radarIndex); + if (radar == null) return false; + return radar.UpdateIndicator(indicatorIndex, name, min, max); + } + + /// + /// 获得指定索引的雷达坐标系组件。 + /// + /// + /// + public Radar GetRadar(int radarIndex) + { + if (radarIndex < 0 || radarIndex > m_Radars.Count - 1) return null; + return m_Radars[radarIndex]; + } + + /// + /// 获得指定雷达坐标系组件指定索引的指示器。 + /// + /// + /// + /// + public Radar.Indicator GetIndicator(int radarIndex, int indicatorIndex) + { + var radar = GetRadar(radarIndex); + if (radar != null) return radar.GetIndicator(indicatorIndex); + else return null; + } + } +} \ No newline at end of file diff --git a/Runtime/API/RadarChart_API.cs.meta b/Runtime/API/RadarChart_API.cs.meta new file mode 100644 index 00000000..111916d9 --- /dev/null +++ b/Runtime/API/RadarChart_API.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f17a7aa35fdd3417dab9414f10fe2886 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Component/Main/Radar.cs b/Runtime/Component/Main/Radar.cs index 0cef4db5..a2e629c1 100644 --- a/Runtime/Component/Main/Radar.cs +++ b/Runtime/Component/Main/Radar.cs @@ -417,5 +417,31 @@ namespace XCharts var y = runtimeCenterPos.y + (runtimeRadius + indicatorGap) * Mathf.Cos(angle); return new Vector3(x, y); } + + public Radar.Indicator AddIndicator(string name, float min, float max) + { + var indicator = new Radar.Indicator(); + indicator.name = name; + indicator.min = min; + indicator.max = max; + indicatorList.Add(indicator); + return indicator; + } + + public bool UpdateIndicator(int indicatorIndex, string name, float min, float max) + { + var indicator = GetIndicator(indicatorIndex); + if (indicator == null) return false; + indicator.name = name; + indicator.min = min; + indicator.max = max; + return true; + } + + public Radar.Indicator GetIndicator(int indicatorIndex) + { + if (indicatorIndex < 0 || indicatorIndex > indicatorList.Count - 1) return null; + return indicatorList[indicatorIndex]; + } } } \ No newline at end of file diff --git a/Runtime/Component/Main/Serie.cs b/Runtime/Component/Main/Serie.cs index a83eb37b..bc7bfd50 100644 --- a/Runtime/Component/Main/Serie.cs +++ b/Runtime/Component/Main/Serie.cs @@ -731,7 +731,6 @@ namespace XCharts var serieData = new SerieData() { data = new List() { xValue, value }, - lastData = new List() { xValue, value }, name = dataName }; serieData.index = xValue; @@ -760,7 +759,6 @@ namespace XCharts var serieData = new SerieData() { data = new List() { xValue, yValue }, - lastData = new List() { xValue, yValue }, name = dataName }; serieData.index = m_Data.Count; @@ -804,7 +802,6 @@ namespace XCharts for (int i = 0; i < valueList.Count; i++) { serieData.data.Add(valueList[i]); - serieData.lastData.Add(valueList[i]); } m_Data.Add(serieData); return serieData; @@ -1041,9 +1038,9 @@ namespace XCharts { if (index >= 0 && index < m_Data.Count && values != null) { - var list = m_Data[index].data; - list.Clear(); - foreach (var v in values) list.Add(v); + var serieData = m_Data[index]; + for (int i = 0; i < values.Count; i++) + serieData.UpdateData(i, values[i]); return true; } return false; diff --git a/Runtime/Component/Sub/SerieData.cs b/Runtime/Component/Sub/SerieData.cs index 554a12a5..cbfb711b 100644 --- a/Runtime/Component/Sub/SerieData.cs +++ b/Runtime/Component/Sub/SerieData.cs @@ -156,7 +156,6 @@ namespace XCharts private List m_LastData = new List(); private List m_DataUpdateTime = new List(); private List m_DataUpdateFlag = new List(); - public List lastData { get { return m_LastData; } internal set { m_LastData = value; } } public float GetData(int index) { @@ -169,7 +168,7 @@ namespace XCharts public float GetLastData(int index) { - if (index >= 0 && index < lastData.Count) + if (index >= 0 && index < m_LastData.Count) { return m_LastData[index]; } @@ -219,6 +218,8 @@ namespace XCharts if (m_LastData.Count != m_Data.Count) { m_LastData.Clear(); + m_DataUpdateTime.Clear(); + m_DataUpdateFlag.Clear(); for (int i = 0; i < m_Data.Count; i++) { m_LastData.Add(m_Data[i]); diff --git a/Runtime/RadarChart.cs b/Runtime/RadarChart.cs index d1295890..6c49234c 100644 --- a/Runtime/RadarChart.cs +++ b/Runtime/RadarChart.cs @@ -16,7 +16,7 @@ namespace XCharts [ExecuteInEditMode] [RequireComponent(typeof(RectTransform))] [DisallowMultipleComponent] - public class RadarChart : BaseChart + public partial class RadarChart : BaseChart { private const string INDICATOR_TEXT = "indicator"; @@ -24,21 +24,6 @@ namespace XCharts private List m_CheckRadars = new List(); private bool m_IsEnterLegendButtom; - public List radars { get { return m_Radars; } } - - /// - /// 移除所有数据,包含指示器数据。 - /// - public override void RemoveData() - { - base.RemoveData(); - foreach (var radar in m_Radars) - { - radar.indicatorList.Clear(); - } - m_CheckRadars.Clear(); - } - protected override void OnLegendButtonClick(int index, string legendName, bool show) { bool active = CheckDataShow(legendName, show);