/******************************************/ /* */ /* Copyright (c) 2018 monitor1394 */ /* https://github.com/monitor1394 */ /* */ /******************************************/ using UnityEngine; using System.Collections.Generic; using System; using UnityEngine.UI; namespace XCharts { /// /// The base class of all charts. /// 所有Chart的基类,不可直接使用。 /// public partial class BaseChart { /// /// The theme info. /// public ThemeInfo themeInfo { get { return m_ThemeInfo; } } /// /// 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; } } /// /// Global parameter setting component. /// 全局设置组件。 /// public Settings settings { get { return m_Settings; } } /// /// The width of chart. /// 图表的宽 /// public float chartWidth { get { return m_ChartWidth; } } /// /// The height of chart. /// 图表的高 /// public float chartHeight { get { return m_ChartHeight; } } /// /// The postion of pointer. /// 鼠标位置 /// public Vector2 pointerPos { get; protected set; } /// /// 自定义绘制回调。 /// public Action customDrawCallback { set { m_CustomDrawCallback = 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(SerieType type, string serieName = null, bool show = true) { return m_Series.AddSerie(type, serieName); } /// /// 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 SerieData AddData(string serieName, float data, string dataName = null) { var serieData = m_Series.AddData(serieName, data, dataName); if (serieData != null) { RefreshChart(); RefreshLabel(); } return serieData; } /// /// Add a data to serie. /// 添加一个数据到指定的系列中。 /// /// the index of serie /// the data to add /// the name of data /// Returns True on success public virtual SerieData AddData(int serieIndex, float data, string dataName = null) { var serieData = m_Series.AddData(serieIndex, data, dataName); if (serieData != null) { RefreshChart(); RefreshLabel(); } return serieData; } /// /// 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 SerieData AddData(string serieName, List multidimensionalData, string dataName = null) { var serieData = m_Series.AddData(serieName, multidimensionalData, dataName); if (serieData != null) { RefreshChart(); RefreshLabel(); } return serieData; } /// /// 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 SerieData AddData(int serieIndex, List multidimensionalData, string dataName = null) { var serieData = m_Series.AddData(serieIndex, multidimensionalData, dataName); if (serieData != null) { RefreshChart(); RefreshLabel(); } return serieData; } /// /// 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 SerieData AddData(string serieName, float xValue, float yValue, string dataName) { var serieData = m_Series.AddXYData(serieName, xValue, yValue, dataName); if (serieData != null) { RefreshChart(); RefreshLabel(); } return serieData; } /// /// 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 SerieData AddData(int serieIndex, float xValue, float yValue, string dataName = null) { var serieData = m_Series.AddXYData(serieIndex, xValue, yValue, dataName); if (serieData != null) { RefreshChart(); RefreshLabel(); } return serieData; } /// /// Update serie data by serie name. /// 更新指定系列中的指定索引数据。 /// /// the name of serie /// the index of data /// the data will be update public virtual void UpdateData(string serieName, int dataIndex, float value) { m_Series.UpdateData(serieName, dataIndex, value); RefreshChart(); } /// /// Update serie data by serie index. /// 更新指定系列中的指定索引数据。 /// /// the index of serie /// the index of data /// the data will be update public virtual void UpdateData(int serieIndex, int dataIndex, float value) { m_Series.UpdateData(serieIndex, dataIndex, value); RefreshChart(); } /// /// Update serie data name. /// 更新指定系列中的指定索引数据名称。 /// /// /// /// public virtual void UpdateDataName(string serieName, int dataIndex, string dataName) { m_Series.UpdateDataName(serieName, dataIndex, dataName); } /// /// Update serie data name. /// 更新指定系列中的指定索引数据名称。 /// /// /// /// public virtual void UpdateDataName(int serieIndex, int dataIndex, string dataName) { m_Series.UpdateDataName(serieIndex, dataIndex, dataName); } /// /// 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 legendIndex = m_LegendRealShowName.IndexOf(serie.name); var bgColor1 = active ? m_ThemeInfo.GetColor(legendIndex) : 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.list) { 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; } [Obsolete("Use BaseChart.RefreshLabel() instead.", true)] public void ReinitChartLabel() { RefreshLabel(); } /// /// 刷新文本标签Label,重新初始化,当有改动Label参数时手动调用改接口 /// public void RefreshLabel() { m_ReinitLabel = true; } /// /// Update chart theme. /// 切换图表主题。 /// /// theme public void UpdateTheme(Theme theme) { m_ThemeInfo.theme = theme; OnThemeChanged(); RefreshChart(); } /// /// Update chart theme info. /// /// info public void UpdateThemeInfo(ThemeInfo info) { m_ThemeInfo = info; UpdateTheme(m_ThemeInfo.theme); } /// /// Whether series animation enabel. /// 启用或关闭起始动画。 /// /// public void AnimationEnable(bool flag) { m_Series.AnimationEnable(flag); } /// /// Start play animation. /// 开始初始动画。 /// public void AnimationStart() { m_Series.AnimationStart(); } /// /// Stop play animation. /// 停止初始化动画。 /// public void AnimationStop() { m_CheckAnimation = false; m_Series.AnimationStop(); } /// /// Reset animation to play. /// 重置初始动画,重新播放。 /// public void AnimationReset() { m_CheckAnimation = false; m_Series.AnimationReset(); RefreshChart(); } /// /// 点击图例按钮 /// /// 图例按钮索引 /// 图例按钮名称 /// 显示还是隐藏 public void ClickLegendButton(int legendIndex, string legendName, bool show) { OnLegendButtonClick(legendIndex, legendName, show); RefreshChart(); } } }