using UnityEngine; using System.Collections.Generic; namespace XCharts { /// /// The base class of all charts. /// 所有Chart的基类,不可直接使用。 /// public partial class BaseChart { /// /// The title setting of chart. /// 标题组件 /// public Title title { get { return m_Title; } } /// /// The legend setting of chart. /// 图例组件 /// public Legend legend { get { return m_Legend; } } /// /// The tooltip setting of chart. /// 提示框组件 /// public Tooltip tooltip { get { return m_Tooltip; } } /// /// The series setting of chart. /// 系列列表 /// public Series series { get { return m_Series; } } /// /// The width of chart. /// 图表的宽 /// public float chartWidth { get { return m_ChartWidth; } } /// /// The height of chart. /// 图表的高 /// /// public float chartHeight { get { return m_ChartHeight; } } /// /// The min number of data to show in chart. /// 图表所显示数据的最小索引 /// public int minShowDataNumber { get { return m_MinShowDataNumber; } set { m_MinShowDataNumber = value; if (m_MinShowDataNumber < 0) m_MinShowDataNumber = 0; } } /// /// The max number of data to show in chart. /// 图表所显示数据的最大索引 /// public int maxShowDataNumber { get { return m_MaxShowDataNumber; } set { m_MaxShowDataNumber = value; if (m_MaxShowDataNumber < 0) m_MaxShowDataNumber = 0; } } /// /// The max number of serie and axis data cache. /// The first data will be remove when the size of serie and axis data is larger then maxCacheDataNumber. /// default:0,unlimited. /// 图表每个系列中可缓存的最大数据量。默认为0没有限制,大于0时超过指定值会移除旧数据再插入新数据。 /// public int maxCacheDataNumber { get { return m_MaxCacheDataNumber; } set { m_MaxCacheDataNumber = value; if (m_MaxCacheDataNumber < 0) m_MaxCacheDataNumber = 0; } } /// /// the smooth line chart style. /// 平滑折线图的平滑系数。 /// /// public float lineSmoothStyle { get { return m_LineSmoothStyle; } set { m_LineSmoothStyle = value; } } /// /// Set the size of chart. /// 设置图表的大小。 /// /// width /// height public virtual void SetSize(float width, float height) { m_ChartWidth = width; m_ChartHeight = height; m_CheckWidth = width; m_CheckHeight = height; rectTransform.sizeDelta = new Vector2(m_ChartWidth, m_ChartHeight); OnSizeChanged(); } /// /// Remove all series and legend data. /// It just emptying all of serie's data without emptying the list of series. /// 清除所有数据,系列中只是移除数据,列表会保留。 /// public virtual void ClearData() { m_Series.ClearData(); m_Legend.ClearData(); m_CheckAnimation = false; RefreshChart(); } /// /// Remove all data from series and legend. /// The series list is also cleared. /// 清除所有系列和图例数据,系列的列表也会被清除。 /// public virtual void RemoveData() { m_Legend.ClearData(); m_Series.RemoveAll(); m_CheckAnimation = false; RefreshChart(); } /// /// Remove legend and serie by name. /// 清除指定系列名称的数据。 /// /// the name of serie public virtual void RemoveData(string serieName) { m_Series.Remove(serieName); m_Legend.RemoveData(serieName); RefreshChart(); } /// /// Add a serie to serie list. /// 添加一个系列到系列列表中。 /// /// the name of serie /// the type of serie /// whether to show this serie /// the added serie public virtual Serie AddSerie(string serieName, SerieType type, bool show = true) { if(type != SerieType.Pie) { m_Legend.AddData(serieName); } return m_Series.AddSerie(serieName, type); } /// /// Add a data to serie. /// If serieName doesn't exist in legend,will be add to legend. /// 添加一个数据到指定的系列中。 /// /// the name of serie /// the data to add /// the name of data /// Returns True on success public virtual bool AddData(string serieName, float data, string dataName = null) { m_Legend.AddData(serieName); var success = m_Series.AddData(serieName, data, dataName, m_MaxCacheDataNumber); if (success) RefreshChart(); return success; } /// /// Add a data to serie. /// 添加一个数据到指定的系列中。 /// /// the index of serie /// the data to add /// the name of data /// Returns True on success public virtual bool AddData(int serieIndex, float data, string dataName = null) { var success = m_Series.AddData(serieIndex, data, dataName, m_MaxCacheDataNumber); if (success) { RefreshChart(); ReinitChartLabel(); } return success; } /// /// Add an arbitray dimension data to serie,such as (x,y,z,...). /// 添加多维数据(x,y,z...)到指定的系列中。 /// /// the name of serie /// the (x,y,z,...) data /// the name of data /// Returns True on success public virtual bool AddData(string serieName, List multidimensionalData, string dataName = null) { var success = m_Series.AddData(serieName, multidimensionalData, dataName, m_MaxCacheDataNumber); if (success) { RefreshChart(); ReinitChartLabel(); } return success; } /// /// Add an arbitray dimension data to serie,such as (x,y,z,...). /// 添加多维数据(x,y,z...)到指定的系列中。 /// /// the index of serie,index starts at 0 /// the (x,y,z,...) data /// the name of data /// Returns True on success public virtual bool AddData(int serieIndex, List multidimensionalData, string dataName = null) { var success = m_Series.AddData(serieIndex, multidimensionalData, dataName, m_MaxCacheDataNumber); if (success) { RefreshChart(); ReinitChartLabel(); } return success; } /// /// Add a (x,y) data to serie. /// 添加(x,y)数据到指定系列中。 /// /// the name of serie /// x data /// y data /// the name of data /// Returns True on success public virtual bool AddData(string serieName, float xValue, float yValue, string dataName) { var success = m_Series.AddXYData(serieName, xValue, yValue, dataName, m_MaxCacheDataNumber); if (success) { RefreshChart(); ReinitChartLabel(); } return true; } /// /// Add a (x,y) data to serie. /// 添加(x,y)数据到指定系列中。 /// /// the index of serie /// x data /// y data /// the name of data /// Returns True on success public virtual bool AddData(int serieIndex, float xValue, float yValue, string dataName = null) { var success = m_Series.AddXYData(serieIndex, xValue, yValue, dataName, m_MaxCacheDataNumber); if (success) { RefreshChart(); ReinitChartLabel(); } return success; } /// /// Update serie data by serie name. /// 更新指定系列中的指定索引数据。 /// /// the name of serie /// the data will be update /// the index of data public virtual void UpdateData(string serieName, float value, int dataIndex = 0) { m_Series.UpdateData(serieName, value, dataIndex); RefreshChart(); } /// /// Update serie data by serie index. /// 更新指定系列中的指定索引数据。 /// /// the index of serie /// the data will be update /// the index of data public virtual void UpdateData(int serieIndex, float value, int dataIndex = 0) { m_Series.UpdateData(serieIndex, value, dataIndex); RefreshChart(); } /// /// Update serie data name. /// 更新指定系列中的指定索引数据名称。 /// /// /// /// public virtual void UpdateDataName(string serieName, string dataName, int dataIndex = 0) { m_Series.UpdateDataName(serieName, dataName, dataIndex); } /// /// Update serie data name. /// 更新指定系列中的指定索引数据名称。 /// /// /// /// public virtual void UpdateDataName(int serieIndex, string dataName, int dataIndex) { m_Series.UpdateDataName(serieIndex, dataName, dataIndex); } /// /// Whether to show serie. /// 设置指定系列是否显示。 /// /// the name of serie /// Active or not public virtual void SetActive(string serieName, bool active) { var serie = m_Series.GetSerie(serieName); if (serie != null) { SetActive(serie.index, active); } } /// /// Whether to show serie. /// 设置指定系列是否显示。 /// /// the index of serie /// Active or not public virtual void SetActive(int serieIndex, bool active) { m_Series.SetActive(serieIndex, active); var serie = m_Series.GetSerie(serieIndex); if (serie != null && !string.IsNullOrEmpty(serie.name)) { var bgColor1 = active ? m_ThemeInfo.GetColor(serie.index) : m_ThemeInfo.legendUnableColor; m_Legend.UpdateButtonColor(serie.name, bgColor1); } } /// /// Whether serie is activated. /// 获取指定系列是否显示。 /// /// the name of serie /// True when activated public virtual bool IsActive(string serieName) { return m_Series.IsActive(serieName); } /// /// Whether serie is activated. /// 获取指定系列是否显示。 /// /// the index of serie /// True when activated public virtual bool IsActive(int serieIndex) { return m_Series.IsActive(serieIndex); } /// /// Whether serie is activated. /// 获得指定图例名字的系列是否显示。 /// /// /// public virtual bool IsActiveByLegend(string legendName) { foreach (var serie in m_Series.series) { if (serie.show && legendName.Equals(serie.name)) { return true; } else { foreach (var serieData in serie.data) { if (serieData.show && legendName.Equals(serieData.name)) { return true; } } } } return false; } /// /// Redraw chart in next frame. /// 在下一帧刷新图表。 /// public void RefreshChart() { m_RefreshChart = true; } /// /// 重新初始化Label。 /// public void ReinitChartLabel() { m_ReinitLabel = true; } /// /// Update chart theme. /// 切换图表主题。 /// /// theme public void UpdateTheme(Theme theme) { m_ThemeInfo.theme = theme; OnThemeChanged(); RefreshChart(); } /// /// 开始初始动画 /// public void AnimationStart() { m_Series.AnimationStart(); } /// /// 停止初始化动画 /// public void AnimationStop() { m_CheckAnimation = false; m_Series.AnimationStop(); } } }