海拔图和小地图
This commit is contained in:
1 parent
42fa59d103
commit
8ad36c965d
521 files changed
+1985033
-439
No files matched your search
@@ -0,0 +1,22 @@
|
||||
/************************************************/
|
||||
/* */
|
||||
/* Copyright (c) 2018 - 2021 monitor1394 */
|
||||
/* https://github.com/monitor1394 */
|
||||
/* */
|
||||
/************************************************/
|
||||
|
||||
using UnityEngine;
|
||||
using System;
|
||||
using UnityEngine.EventSystems;
|
||||
|
||||
namespace XCharts
|
||||
{
|
||||
public partial class BarChart
|
||||
{
|
||||
/// <summary>
|
||||
/// the callback function of click bar.
|
||||
/// 点击柱形图柱条回调。参数:eventData, dataIndex
|
||||
/// </summary>
|
||||
public Action<PointerEventData, int> onPointerClickBar { set { m_OnPointerClickBar = value; m_ForceOpenRaycastTarget = true; } }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 73ae9e0b481fc4587828be9149026b0f
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,719 @@
|
||||
/************************************************/
|
||||
/* */
|
||||
/* Copyright (c) 2018 - 2021 monitor1394 */
|
||||
/* https://github.com/monitor1394 */
|
||||
/* */
|
||||
/************************************************/
|
||||
|
||||
using UnityEngine;
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
using UnityEngine.UI;
|
||||
using UnityEngine.EventSystems;
|
||||
|
||||
namespace XCharts
|
||||
{
|
||||
/// <summary>
|
||||
/// The base class of all charts.
|
||||
/// 所有Chart的基类。
|
||||
/// </summary>
|
||||
public partial class BaseChart
|
||||
{
|
||||
/// <summary>
|
||||
/// The name of chart.
|
||||
/// </summary>
|
||||
public string chartName
|
||||
{
|
||||
get { return m_ChartName; }
|
||||
set
|
||||
{
|
||||
if (!string.IsNullOrEmpty(value) && XChartsMgr.Instance.ContainsChart(value))
|
||||
{
|
||||
Debug.LogError("chartName repeated:" + value);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_ChartName = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// The theme.
|
||||
/// </summary>
|
||||
public ChartTheme theme { get { return m_Theme; } set { m_Theme = value; } }
|
||||
/// <summary>
|
||||
/// The title setting of chart.
|
||||
/// 标题组件
|
||||
/// </summary>
|
||||
public Title title { get { return m_Titles.Count > 0 ? m_Titles[0] : null; } }
|
||||
public List<Title> titles { get { return m_Titles; } }
|
||||
/// <summary>
|
||||
/// The legend setting of chart.
|
||||
/// 图例组件
|
||||
/// </summary>
|
||||
public Legend legend { get { return m_Legends.Count > 0 ? m_Legends[0] : null; } }
|
||||
public List<Legend> legends { get { return m_Legends; } }
|
||||
/// <summary>
|
||||
/// The tooltip setting of chart.
|
||||
/// 提示框组件
|
||||
/// </summary>
|
||||
public Tooltip tooltip { get { return m_Tooltips.Count > 0 ? m_Tooltips[0] : null; } }
|
||||
/// <summary>
|
||||
/// The series setting of chart.
|
||||
/// 系列列表
|
||||
/// </summary>
|
||||
public Series series { get { return m_Series; } }
|
||||
/// <summary>
|
||||
/// Global parameter setting component.
|
||||
/// 全局设置组件。
|
||||
/// </summary>
|
||||
public Settings settings { get { return m_Settings; } }
|
||||
/// <summary>
|
||||
/// The x of chart.
|
||||
/// 图表的X
|
||||
/// </summary>
|
||||
public float chartX { get { return m_ChartX; } }
|
||||
/// <summary>
|
||||
/// The y of chart.
|
||||
/// 图表的Y
|
||||
/// </summary>
|
||||
public float chartY { get { return m_ChartY; } }
|
||||
/// <summary>
|
||||
/// The width of chart.
|
||||
/// 图表的宽
|
||||
/// </summary>
|
||||
public float chartWidth { get { return m_ChartWidth; } }
|
||||
/// <summary>
|
||||
/// The height of chart.
|
||||
/// 图表的高
|
||||
/// </summary>
|
||||
public float chartHeight { get { return m_ChartHeight; } }
|
||||
public Vector2 chartMinAnchor { get { return m_ChartMinAnchor; } }
|
||||
public Vector2 chartMaxAnchor { get { return m_ChartMaxAnchor; } }
|
||||
public Vector2 chartPivot { get { return m_ChartPivot; } }
|
||||
public Vector2 chartSizeDelta { get { return m_ChartSizeDelta; } }
|
||||
/// <summary>
|
||||
/// The position of chart.
|
||||
/// 图表的左下角起始坐标。
|
||||
/// </summary>
|
||||
public Vector3 chartPosition { get { return m_ChartPosition; } }
|
||||
public Rect chartRect { get { return m_ChartRect; } }
|
||||
|
||||
/// <summary>
|
||||
/// 自定义绘制回调。
|
||||
/// </summary>
|
||||
public Action<VertexHelper> onCustomDraw { set { m_OnCustomDrawCallback = value; } }
|
||||
/// <summary>
|
||||
/// the callback function of click pie area.
|
||||
/// 点击饼图区域回调。参数:PointerEventData,SerieIndex,SerieDataIndex
|
||||
/// </summary>
|
||||
public Action<PointerEventData, int, int> onPointerClickPie { set { m_OnPointerClickPie = value; m_ForceOpenRaycastTarget = true; } get { return m_OnPointerClickPie; } }
|
||||
|
||||
/// <summary>
|
||||
/// Redraw chart in next frame.
|
||||
/// 在下一帧刷新图表。
|
||||
/// </summary>
|
||||
public void RefreshChart()
|
||||
{
|
||||
m_RefreshChart = true;
|
||||
if (m_Painter) m_Painter.Refresh();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Remove all series and legend data.
|
||||
/// It just emptying all of serie's data without emptying the list of series.
|
||||
/// 清除所有数据,系列中只是移除数据,列表会保留。
|
||||
/// </summary>
|
||||
public virtual void ClearData()
|
||||
{
|
||||
m_Series.ClearData();
|
||||
foreach (var legend in m_Legends) legend.ClearData();
|
||||
tooltip.ClearValue();
|
||||
m_CheckAnimation = false;
|
||||
m_ReinitLabel = true;
|
||||
RefreshChart();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Remove all data from series and legend.
|
||||
/// The series list is also cleared.
|
||||
/// 清除所有系列和图例数据,系列的列表也会被清除。
|
||||
/// </summary>
|
||||
public virtual void RemoveData()
|
||||
{
|
||||
foreach (var legend in m_Legends) legend.ClearData();
|
||||
foreach (var radar in m_Radars) radar.indicatorList.Clear();
|
||||
m_Series.RemoveAll();
|
||||
tooltip.ClearValue();
|
||||
m_CheckAnimation = false;
|
||||
m_ReinitLabel = true;
|
||||
m_SerieLabelRoot = null;
|
||||
RefreshChart();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Remove legend and serie by name.
|
||||
/// 清除指定系列名称的数据。
|
||||
/// </summary>
|
||||
/// <param name="serieName">the name of serie</param>
|
||||
public virtual void RemoveData(string serieName)
|
||||
{
|
||||
m_Series.Remove(serieName);
|
||||
foreach (var legend in m_Legends) legend.RemoveData(serieName);
|
||||
m_SerieLabelRoot = null;
|
||||
RefreshChart();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Add a serie to serie list.
|
||||
/// 添加一个系列到系列列表中。
|
||||
/// </summary>
|
||||
/// <param name="serieName">the name of serie</param>
|
||||
/// <param name="type">the type of serie</param>
|
||||
/// <param name="show">whether to show this serie</param>
|
||||
/// <returns>the added serie</returns>
|
||||
public virtual Serie AddSerie(SerieType type, string serieName = null, bool show = true)
|
||||
{
|
||||
return m_Series.AddSerie(type, serieName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Add a data to serie.
|
||||
/// If serieName doesn't exist in legend,will be add to legend.
|
||||
/// 添加一个数据到指定的系列中。
|
||||
/// </summary>
|
||||
/// <param name="serieName">the name of serie</param>
|
||||
/// <param name="data">the data to add</param>
|
||||
/// <param name="dataName">the name of data</param>
|
||||
/// <returns>Returns True on success</returns>
|
||||
public virtual SerieData AddData(string serieName, float data, string dataName = null)
|
||||
{
|
||||
var serieData = m_Series.AddData(serieName, data, dataName);
|
||||
if (serieData != null)
|
||||
{
|
||||
var serie = m_Series.GetSerie(serieName);
|
||||
if (SerieHelper.GetSerieLabel(serie, serieData).show)
|
||||
{
|
||||
RefreshLabel();
|
||||
}
|
||||
RefreshPainter(serie);
|
||||
}
|
||||
return serieData;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Add a data to serie.
|
||||
/// 添加一个数据到指定的系列中。
|
||||
/// </summary>
|
||||
/// <param name="serieIndex">the index of serie</param>
|
||||
/// <param name="data">the data to add</param>
|
||||
/// <param name="dataName">the name of data</param>
|
||||
/// <returns>Returns True on success</returns>
|
||||
public virtual SerieData AddData(int serieIndex, float data, string dataName = null)
|
||||
{
|
||||
var serieData = m_Series.AddData(serieIndex, data, dataName);
|
||||
if (serieData != null)
|
||||
{
|
||||
var serie = m_Series.GetSerie(serieIndex);
|
||||
if (SerieHelper.GetSerieLabel(serie, serieData).show)
|
||||
{
|
||||
RefreshLabel();
|
||||
}
|
||||
RefreshPainter(serie);
|
||||
}
|
||||
return serieData;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Add an arbitray dimension data to serie,such as (x,y,z,...).
|
||||
/// 添加多维数据(x,y,z...)到指定的系列中。
|
||||
/// </summary>
|
||||
/// <param name="serieName">the name of serie</param>
|
||||
/// <param name="multidimensionalData">the (x,y,z,...) data</param>
|
||||
/// <param name="dataName">the name of data</param>
|
||||
/// <returns>Returns True on success</returns>
|
||||
public virtual SerieData AddData(string serieName, List<float> multidimensionalData, string dataName = null)
|
||||
{
|
||||
var serieData = m_Series.AddData(serieName, multidimensionalData, dataName);
|
||||
if (serieData != null)
|
||||
{
|
||||
var serie = m_Series.GetSerie(serieName);
|
||||
if (SerieHelper.GetSerieLabel(serie, serieData).show)
|
||||
{
|
||||
RefreshLabel();
|
||||
}
|
||||
RefreshPainter(serie);
|
||||
}
|
||||
return serieData;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Add an arbitray dimension data to serie,such as (x,y,z,...).
|
||||
/// 添加多维数据(x,y,z...)到指定的系列中。
|
||||
/// </summary>
|
||||
/// <param name="serieIndex">the index of serie,index starts at 0</param>
|
||||
/// <param name="multidimensionalData">the (x,y,z,...) data</param>
|
||||
/// <param name="dataName">the name of data</param>
|
||||
/// <returns>Returns True on success</returns>
|
||||
public virtual SerieData AddData(int serieIndex, List<float> multidimensionalData, string dataName = null)
|
||||
{
|
||||
var serieData = m_Series.AddData(serieIndex, multidimensionalData, dataName);
|
||||
if (serieData != null)
|
||||
{
|
||||
var serie = m_Series.GetSerie(serieIndex);
|
||||
if (SerieHelper.GetSerieLabel(serie, serieData).show)
|
||||
{
|
||||
RefreshLabel();
|
||||
}
|
||||
RefreshPainter(serie);
|
||||
}
|
||||
return serieData;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Add a (x,y) data to serie.
|
||||
/// 添加(x,y)数据到指定系列中。
|
||||
/// </summary>
|
||||
/// <param name="serieName">the name of serie</param>
|
||||
/// <param name="xValue">x data</param>
|
||||
/// <param name="yValue">y data</param>
|
||||
/// <param name="dataName">the name of data</param>
|
||||
/// <returns>Returns True on success</returns>
|
||||
public virtual SerieData AddData(string serieName, float xValue, float yValue, string dataName = null)
|
||||
{
|
||||
var serieData = m_Series.AddXYData(serieName, xValue, yValue, dataName);
|
||||
if (serieData != null)
|
||||
{
|
||||
var serie = m_Series.GetSerie(serieName);
|
||||
if (SerieHelper.GetSerieLabel(serie, serieData).show)
|
||||
{
|
||||
RefreshLabel();
|
||||
}
|
||||
RefreshPainter(serie);
|
||||
}
|
||||
return serieData;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Add a (x,y) data to serie.
|
||||
/// 添加(x,y)数据到指定系列中。
|
||||
/// </summary>
|
||||
/// <param name="serieIndex">the index of serie</param>
|
||||
/// <param name="xValue">x data</param>
|
||||
/// <param name="yValue">y data</param>
|
||||
/// <param name="dataName">the name of data</param>
|
||||
/// <returns>Returns True on success</returns>
|
||||
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)
|
||||
{
|
||||
var serie = m_Series.GetSerie(serieIndex);
|
||||
if (SerieHelper.GetSerieLabel(serie, serieData).show)
|
||||
{
|
||||
RefreshLabel();
|
||||
}
|
||||
RefreshPainter(serie);
|
||||
}
|
||||
return serieData;
|
||||
}
|
||||
public virtual SerieData AddData(int serieIndex, float open, float close, float lowest, float heighest, string dataName = null)
|
||||
{
|
||||
var serieData = m_Series.AddData(serieIndex, open, close, lowest, heighest, dataName);
|
||||
if (serieData != null)
|
||||
{
|
||||
var serie = m_Series.GetSerie(serieIndex);
|
||||
if (SerieHelper.GetSerieLabel(serie, serieData).show)
|
||||
{
|
||||
RefreshLabel();
|
||||
}
|
||||
RefreshPainter(serie);
|
||||
}
|
||||
return serieData;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Update serie data by serie name.
|
||||
/// 更新指定系列中的指定索引数据。
|
||||
/// </summary>
|
||||
/// <param name="serieName">the name of serie</param>
|
||||
/// <param name="dataIndex">the index of data</param>
|
||||
/// <param name="value">the data will be update</param>
|
||||
public virtual bool UpdateData(string serieName, int dataIndex, float value)
|
||||
{
|
||||
if (m_Series.UpdateData(serieName, dataIndex, value))
|
||||
{
|
||||
RefreshPainter(m_Series.GetSerie(serieName));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Update serie data by serie index.
|
||||
/// 更新指定系列中的指定索引数据。
|
||||
/// </summary>
|
||||
/// <param name="serieIndex">the index of serie</param>
|
||||
/// <param name="dataIndex">the index of data</param>
|
||||
/// <param name="value">the data will be update</param>
|
||||
public virtual bool UpdateData(int serieIndex, int dataIndex, float value)
|
||||
{
|
||||
if (m_Series.UpdateData(serieIndex, dataIndex, value))
|
||||
{
|
||||
RefreshPainter(m_Series.GetSerie(serieIndex));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新指定系列指定索引的数据项的多维数据。
|
||||
/// </summary>
|
||||
/// <param name="serieName"></param>
|
||||
/// <param name="dataIndex"></param>
|
||||
/// <param name="multidimensionalData">一个数据项的多维数据列表,而不是多个数据项的数据</param>
|
||||
public virtual bool UpdateData(string serieName, int dataIndex, List<float> multidimensionalData)
|
||||
{
|
||||
if (m_Series.UpdateData(serieName, dataIndex, multidimensionalData))
|
||||
{
|
||||
RefreshPainter(m_Series.GetSerie(serieName));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新指定系列指定索引的数据项的多维数据。
|
||||
/// </summary>
|
||||
/// <param name="serieIndex"></param>
|
||||
/// <param name="dataIndex"></param>
|
||||
/// <param name="multidimensionalData">一个数据项的多维数据列表,而不是多个数据项的数据</param>
|
||||
public virtual bool UpdateData(int serieIndex, int dataIndex, List<float> multidimensionalData)
|
||||
{
|
||||
if (m_Series.UpdateData(serieIndex, dataIndex, multidimensionalData))
|
||||
{
|
||||
RefreshPainter(m_Series.GetSerie(serieIndex));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新指定系列指定索引指定维数的数据。维数从0开始。
|
||||
/// </summary>
|
||||
/// <param name="serieName"></param>
|
||||
/// <param name="dataIndex"></param>
|
||||
/// <param name="dimension">指定维数,从0开始</param>
|
||||
/// <param name="value"></param>
|
||||
public virtual bool UpdateData(string serieName, int dataIndex, int dimension, float value)
|
||||
{
|
||||
if (m_Series.UpdateData(serieName, dataIndex, dimension, value))
|
||||
{
|
||||
RefreshPainter(m_Series.GetSerie(serieName));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新指定系列指定索引指定维数的数据。维数从0开始。
|
||||
/// </summary>
|
||||
/// <param name="serieIndex"></param>
|
||||
/// <param name="dataIndex"></param>
|
||||
/// <param name="dimension">指定维数,从0开始</param>
|
||||
/// <param name="value"></param>
|
||||
public virtual bool UpdateData(int serieIndex, int dataIndex, int dimension, float value)
|
||||
{
|
||||
if (m_Series.UpdateData(serieIndex, dataIndex, dimension, value))
|
||||
{
|
||||
RefreshPainter(m_Series.GetSerie(serieIndex));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Update serie data name.
|
||||
/// 更新指定系列中的指定索引数据名称。
|
||||
/// </summary>
|
||||
/// <param name="serieName"></param>
|
||||
/// <param name="dataIndex"></param>
|
||||
/// <param name="dataName"></param>
|
||||
public virtual bool UpdateDataName(string serieName, int dataIndex, string dataName)
|
||||
{
|
||||
return m_Series.UpdateDataName(serieName, dataIndex, dataName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Update serie data name.
|
||||
/// 更新指定系列中的指定索引数据名称。
|
||||
/// </summary>
|
||||
/// <param name="serieIndex"></param>
|
||||
/// <param name="dataName"></param>
|
||||
/// <param name="dataIndex"></param>
|
||||
public virtual bool UpdateDataName(int serieIndex, int dataIndex, string dataName)
|
||||
{
|
||||
return m_Series.UpdateDataName(serieIndex, dataIndex, dataName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Whether to show serie.
|
||||
/// 设置指定系列是否显示。
|
||||
/// </summary>
|
||||
/// <param name="serieName">the name of serie</param>
|
||||
/// <param name="active">Active or not</param>
|
||||
public virtual void SetActive(string serieName, bool active)
|
||||
{
|
||||
var serie = m_Series.GetSerie(serieName);
|
||||
if (serie != null)
|
||||
{
|
||||
SetActive(serie.index, active);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Whether to show serie.
|
||||
/// 设置指定系列是否显示。
|
||||
/// </summary>
|
||||
/// <param name="serieIndex">the index of serie</param>
|
||||
/// <param name="active">Active or not</param>
|
||||
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))
|
||||
{
|
||||
UpdateLegendColor(serie.name, active);
|
||||
}
|
||||
}
|
||||
|
||||
internal virtual void UpdateLegendColor(string legendName, bool active)
|
||||
{
|
||||
var legendIndex = m_LegendRealShowName.IndexOf(legendName);
|
||||
if (legendIndex >= 0)
|
||||
{
|
||||
foreach (var legend in m_Legends)
|
||||
{
|
||||
var iconColor = LegendHelper.GetIconColor(legend, legendIndex, m_Theme, m_Series, legendName, active);
|
||||
var contentColor = LegendHelper.GetContentColor(legend, m_Theme, active);
|
||||
legend.UpdateButtonColor(legendName, iconColor);
|
||||
legend.UpdateContentColor(legendName, contentColor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Whether serie is activated.
|
||||
/// 获取指定系列是否显示。
|
||||
/// </summary>
|
||||
/// <param name="serieName">the name of serie</param>
|
||||
/// <returns>True when activated</returns>
|
||||
public virtual bool IsActive(string serieName)
|
||||
{
|
||||
return m_Series.IsActive(serieName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Whether serie is activated.
|
||||
/// 获取指定系列是否显示。
|
||||
/// </summary>
|
||||
/// <param name="serieIndex">the index of serie</param>
|
||||
/// <returns>True when activated</returns>
|
||||
public virtual bool IsActive(int serieIndex)
|
||||
{
|
||||
return m_Series.IsActive(serieIndex);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Whether serie is activated.
|
||||
/// 获得指定图例名字的系列是否显示。
|
||||
/// </summary>
|
||||
/// <param name="legendName"></param>
|
||||
/// <returns></returns>
|
||||
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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 刷新文本标签Label,重新初始化,当有改动Label参数时手动调用改接口
|
||||
/// </summary>
|
||||
public void RefreshLabel()
|
||||
{
|
||||
m_ReinitLabel = true;
|
||||
m_SerieLabelRoot = null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 刷新Tooltip组件。
|
||||
/// </summary>
|
||||
public void RefreshTooltip()
|
||||
{
|
||||
InitTooltip();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Update chart theme.
|
||||
/// 切换内置主题。
|
||||
/// </summary>
|
||||
/// <param name="theme">theme</param>
|
||||
public bool UpdateTheme(Theme theme)
|
||||
{
|
||||
if (theme == Theme.Custom)
|
||||
{
|
||||
Debug.LogError("UpdateTheme: not support switch to Custom theme.");
|
||||
return false;
|
||||
}
|
||||
m_Theme.theme = theme;
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Update chart theme info.
|
||||
/// 切换图表主题。
|
||||
/// </summary>
|
||||
/// <param name="theme">theme</param>
|
||||
public void UpdateTheme(ChartTheme theme)
|
||||
{
|
||||
m_Theme.CopyTheme(theme);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Whether series animation enabel.
|
||||
/// 启用或关闭起始动画。
|
||||
/// </summary>
|
||||
/// <param name="flag"></param>
|
||||
public void AnimationEnable(bool flag)
|
||||
{
|
||||
m_Series.AnimationEnable(flag);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// fadeIn animation.
|
||||
/// 开始渐入动画。
|
||||
/// </summary>
|
||||
public void AnimationFadeIn()
|
||||
{
|
||||
m_Series.AnimationFadeIn();
|
||||
RefreshChart();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// fadeIn animation.
|
||||
/// 开始渐出动画。
|
||||
/// </summary>
|
||||
public void AnimationFadeOut()
|
||||
{
|
||||
m_Series.AnimationFadeOut();
|
||||
RefreshChart();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Pause animation.
|
||||
/// 暂停动画。
|
||||
/// </summary>
|
||||
public void AnimationPause()
|
||||
{
|
||||
m_Series.AnimationPause();
|
||||
RefreshChart();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Stop play animation.
|
||||
/// 继续动画。
|
||||
/// </summary>
|
||||
public void AnimationResume()
|
||||
{
|
||||
m_Series.AnimationResume();
|
||||
RefreshChart();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reset animation.
|
||||
/// 重置动画。
|
||||
/// </summary>
|
||||
public void AnimationReset()
|
||||
{
|
||||
m_Series.AnimationReset();
|
||||
RefreshChart();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 点击图例按钮
|
||||
/// </summary>
|
||||
/// <param name="legendIndex">图例按钮索引</param>
|
||||
/// <param name="legendName">图例按钮名称</param>
|
||||
/// <param name="show">显示还是隐藏</param>
|
||||
public void ClickLegendButton(int legendIndex, string legendName, bool show)
|
||||
{
|
||||
OnLegendButtonClick(legendIndex, legendName, show);
|
||||
RefreshChart();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 坐标是否在图表范围内
|
||||
/// </summary>
|
||||
/// <param name="local"></param>
|
||||
/// <returns></returns>
|
||||
public bool IsInChart(Vector2 local)
|
||||
{
|
||||
return IsInChart(local.x, local.y);
|
||||
}
|
||||
|
||||
public bool IsInChart(float x, float y)
|
||||
{
|
||||
if (x < m_ChartX || x > m_ChartX + m_ChartWidth ||
|
||||
y < m_ChartY || y > m_ChartY + m_ChartHeight)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public void ClampInChart(ref Vector3 pos)
|
||||
{
|
||||
if (!IsInChart(pos.x, pos.y))
|
||||
{
|
||||
if (pos.x < m_ChartX) pos.x = m_ChartX;
|
||||
if (pos.x > m_ChartX + m_ChartWidth) pos.x = m_ChartX + m_ChartWidth;
|
||||
if (pos.y < m_ChartY) pos.y = m_ChartY;
|
||||
if (pos.y > m_ChartY + m_ChartHeight) pos.y = m_ChartY + m_ChartHeight;
|
||||
}
|
||||
}
|
||||
|
||||
public Vector3 GetTitlePosition(Title title)
|
||||
{
|
||||
return chartPosition + title.location.GetPosition(chartWidth, chartHeight);
|
||||
}
|
||||
|
||||
public bool ContainsSerie(SerieType serieType)
|
||||
{
|
||||
return SeriesHelper.ContainsSerie(m_Series, serieType);
|
||||
}
|
||||
|
||||
public void UnbindTheme()
|
||||
{
|
||||
var theme = m_Theme.CloneTheme();
|
||||
m_Theme = theme;
|
||||
RefreshChart();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d078e85e5877d4d0f990c8dc43006247
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,159 @@
|
||||
/************************************************/
|
||||
/* */
|
||||
/* Copyright (c) 2018 - 2021 monitor1394 */
|
||||
/* https://github.com/monitor1394 */
|
||||
/* */
|
||||
/************************************************/
|
||||
|
||||
using UnityEngine;
|
||||
using System;
|
||||
using UnityEngine.EventSystems;
|
||||
|
||||
namespace XCharts
|
||||
{
|
||||
/// <summary>
|
||||
/// The base class of all graphs or components.
|
||||
/// 所有图形的基类。
|
||||
/// </summary>
|
||||
public partial class BaseGraph
|
||||
{
|
||||
/// <summary>
|
||||
/// The background component.
|
||||
/// 背景组件。
|
||||
/// </summary>
|
||||
/// <value></value>
|
||||
public Background background { get { return m_Background; } }
|
||||
/// <summary>
|
||||
/// The x of graph.
|
||||
/// 图形的X
|
||||
/// </summary>
|
||||
public float graphX { get { return m_GraphX; } }
|
||||
/// <summary>
|
||||
/// The y of graph.
|
||||
/// 图形的Y
|
||||
/// </summary>
|
||||
public float graphY { get { return m_GraphY; } }
|
||||
/// <summary>
|
||||
/// The width of graph.
|
||||
/// 图形的宽
|
||||
/// </summary>
|
||||
public float graphWidth { get { return m_GraphWidth; } }
|
||||
/// <summary>
|
||||
/// The height of graph.
|
||||
/// 图形的高
|
||||
/// </summary>
|
||||
public float graphHeight { get { return m_GraphHeight; } }
|
||||
/// <summary>
|
||||
/// The position of graph.
|
||||
/// 图形的左下角起始坐标。
|
||||
/// </summary>
|
||||
public Vector3 graphPosition { get { return m_GraphPosition; } }
|
||||
public Rect graphRect { get { return m_GraphRect; } }
|
||||
/// <summary>
|
||||
/// The postion of pointer.
|
||||
/// 鼠标位置。
|
||||
/// </summary>
|
||||
public Vector2 pointerPos { get; protected set; }
|
||||
/// <summary>
|
||||
/// Whether the mouse pointer is in the chart.
|
||||
/// 鼠标是否在图表内。
|
||||
/// </summary>
|
||||
public bool isPointerInChart { get; protected set; }
|
||||
/// <summary>
|
||||
/// 警告信息。
|
||||
/// </summary>
|
||||
public string warningInfo { get; protected set; }
|
||||
public bool isControlledByLayout { get { return m_IsControlledByLayout; } }
|
||||
/// <summary>
|
||||
/// 强制开启鼠标事件检测。
|
||||
/// </summary>
|
||||
public bool forceOpenRaycastTarget { get { return m_ForceOpenRaycastTarget; } set { m_ForceOpenRaycastTarget = value; } }
|
||||
/// <summary>
|
||||
/// 鼠标点击回调。
|
||||
/// </summary>
|
||||
public Action<PointerEventData, BaseGraph> onPointerClick { set { m_OnPointerClick = value; m_ForceOpenRaycastTarget = true; } }
|
||||
/// <summary>
|
||||
/// 鼠标按下回调。
|
||||
/// </summary>
|
||||
public Action<PointerEventData, BaseGraph> onPointerDown { set { m_OnPointerDown = value; m_ForceOpenRaycastTarget = true; } }
|
||||
/// <summary>
|
||||
/// 鼠标弹起回调。
|
||||
/// </summary>
|
||||
public Action<PointerEventData, BaseGraph> onPointerUp { set { m_OnPointerUp = value; m_ForceOpenRaycastTarget = true; } }
|
||||
/// <summary>
|
||||
/// 鼠标进入回调。
|
||||
/// </summary>
|
||||
public Action<PointerEventData, BaseGraph> onPointerEnter { set { m_OnPointerEnter = value; m_ForceOpenRaycastTarget = true; } }
|
||||
/// <summary>
|
||||
/// 鼠标退出回调。
|
||||
/// </summary>
|
||||
public Action<PointerEventData, BaseGraph> onPointerExit { set { m_OnPointerExit = value; m_ForceOpenRaycastTarget = true; } }
|
||||
/// <summary>
|
||||
/// 鼠标开始拖拽回调。
|
||||
/// </summary>
|
||||
public Action<PointerEventData, BaseGraph> onBeginDrag { set { m_OnBeginDrag = value; m_ForceOpenRaycastTarget = true; } }
|
||||
/// <summary>
|
||||
/// 鼠标拖拽回调。
|
||||
/// </summary>
|
||||
public Action<PointerEventData, BaseGraph> onDrag { set { m_OnDrag = value; m_ForceOpenRaycastTarget = true; } }
|
||||
/// <summary>
|
||||
/// 鼠标结束拖拽回调。
|
||||
/// </summary>
|
||||
public Action<PointerEventData, BaseGraph> onEndDrag { set { m_OnEndDrag = value; m_ForceOpenRaycastTarget = true; } }
|
||||
/// <summary>
|
||||
/// 鼠标滚动回调。
|
||||
/// </summary>
|
||||
public Action<PointerEventData, BaseGraph> onScroll { set { m_OnScroll = value; m_ForceOpenRaycastTarget = true; } }
|
||||
|
||||
/// <summary>
|
||||
/// 设置图形的宽高(在非stretch pivot下才有效,其他情况需要自己调整RectTransform)
|
||||
/// </summary>
|
||||
/// <param name="width"></param>
|
||||
/// <param name="height"></param>
|
||||
public virtual void SetSize(float width, float height)
|
||||
{
|
||||
if (LayerHelper.IsFixedWidthHeight(rectTransform))
|
||||
{
|
||||
rectTransform.sizeDelta = new Vector2(width, height);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError("Can't set size on stretch pivot,you need to modify rectTransform by yourself.");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Redraw graph in next frame.
|
||||
/// 在下一帧刷新图形。
|
||||
/// </summary>
|
||||
public void RefreshGraph()
|
||||
{
|
||||
m_RefreshChart = true;
|
||||
}
|
||||
|
||||
public void RefreshAllComponent()
|
||||
{
|
||||
SetAllComponentDirty();
|
||||
RefreshGraph();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 检测警告信息。
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public string CheckWarning()
|
||||
{
|
||||
warningInfo = CheckHelper.CheckChart(this);
|
||||
return warningInfo;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 移除所有图表子节点,会自动重现初始化。
|
||||
/// </summary>
|
||||
public void RemoveChartObject()
|
||||
{
|
||||
ChartHelper.DestroyAllChildren(transform);
|
||||
//SetAllComponentDirty();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e17adfd3dc62d435cb79fa8c330fe186
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,301 @@
|
||||
/************************************************/
|
||||
/* */
|
||||
/* Copyright (c) 2018 - 2021 monitor1394 */
|
||||
/* https://github.com/monitor1394 */
|
||||
/* */
|
||||
/************************************************/
|
||||
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace XCharts
|
||||
{
|
||||
/// <summary>
|
||||
/// The basic class of rectangular coordinate chart,such as LineChart,BarChart and ScatterChart.
|
||||
/// 直角坐标系类型图表的基类,如折线图LineChart,柱状图BarChart,散点图ScatterChart都属于这类型的图表。
|
||||
/// 不可用直接将CoordinateChart绑定到GameObject上。
|
||||
/// </summary>
|
||||
public partial class CoordinateChart
|
||||
{
|
||||
/// <summary>
|
||||
/// grid component.
|
||||
/// 网格组件。
|
||||
/// </summary>
|
||||
public Grid grid { get { return m_Grids.Count > 0 ? m_Grids[0] : null; } }
|
||||
public List<Grid> grids { get { return m_Grids; } }
|
||||
/// <summary>
|
||||
/// the x Axes,xAxes[0] is the first x axis, xAxes[1] is the second x axis.
|
||||
/// 两个x轴。
|
||||
/// </summary>
|
||||
public List<XAxis> xAxes { get { return m_XAxes; } }
|
||||
/// <summary>
|
||||
/// the y Axes, yAxes[0] is the first y axis, yAxes[1] is the second y axis.
|
||||
/// 两个y轴。
|
||||
/// </summary>
|
||||
public List<YAxis> yAxes { get { return m_YAxes; } }
|
||||
/// <summary>
|
||||
/// dataZoom component.
|
||||
/// 区域缩放组件。
|
||||
/// </summary>
|
||||
public DataZoom dataZoom { get { return m_DataZooms.Count > 0 ? m_DataZooms[0] : null; } }
|
||||
/// <summary>
|
||||
/// visualMap component.
|
||||
/// 视觉映射组件。
|
||||
/// </summary>
|
||||
public VisualMap visualMap { get { return m_VisualMaps.Count > 0 ? m_VisualMaps[0] : null; } }
|
||||
/// <summary>
|
||||
/// X轴(下)
|
||||
/// </summary>
|
||||
public XAxis xAxis0 { get { return m_XAxes.Count > 0 ? m_XAxes[0] : null; } }
|
||||
/// <summary>
|
||||
/// X轴(上)
|
||||
/// </summary>
|
||||
public XAxis xAxis1 { get { return m_XAxes.Count > 1 ? m_XAxes[1] : null; } }
|
||||
/// <summary>
|
||||
/// Y轴(左)
|
||||
/// </summary>
|
||||
public YAxis yAxis0 { get { return m_YAxes.Count > 0 ? m_YAxes[0] : null; } }
|
||||
/// <summary>
|
||||
/// Y轴(右)
|
||||
/// </summary>
|
||||
public YAxis yAxis1 { get { return m_YAxes.Count > 1 ? m_YAxes[1] : null; } }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Remove all data from series,legend and axis.
|
||||
/// It just emptying all of serie's data without emptying the list of series.
|
||||
/// 清空所有图例,系列和坐标轴类目数据。系列中指示清空系列中的数据,会保留系列列表。
|
||||
/// </summary>
|
||||
public override void ClearData()
|
||||
{
|
||||
base.ClearData();
|
||||
ClearAxisData();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Remove all data from series,legend and axis.
|
||||
/// The series list is also cleared.
|
||||
/// 清空所有图例,系列和坐标轴类目数据。系列的列表也会被清空。
|
||||
/// </summary>
|
||||
public override void RemoveData()
|
||||
{
|
||||
base.RemoveData();
|
||||
ClearAxisData();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Remove all data of Axes.
|
||||
/// 清除所有x轴和y轴的类目数据。
|
||||
/// </summary>
|
||||
public void ClearAxisData()
|
||||
{
|
||||
foreach (var axis in m_XAxes)
|
||||
{
|
||||
axis.data.Clear();
|
||||
axis.SetAllDirty();
|
||||
}
|
||||
foreach (var axis in m_YAxes)
|
||||
{
|
||||
axis.data.Clear();
|
||||
axis.SetAllDirty();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Add a category data to xAxis.
|
||||
/// 添加一个类目数据到指定的x轴。
|
||||
/// </summary>
|
||||
/// <param name="category">the category data</param>
|
||||
/// <param name="xAxisIndex">which xAxis should category add to</param>
|
||||
public void AddXAxisData(string category, int xAxisIndex = 0)
|
||||
{
|
||||
m_XAxes[xAxisIndex].AddData(category);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Add a category data to yAxis.
|
||||
/// 添加一个类目数据到指定的y轴。
|
||||
/// </summary>
|
||||
/// <param name="category">the category data</param>
|
||||
/// <param name="yAxisIndex">which yAxis should category add to</param>
|
||||
public void AddYAxisData(string category, int yAxisIndex = 0)
|
||||
{
|
||||
m_YAxes[yAxisIndex].AddData(category);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// reutrn true when all the show axis is `Value` type.
|
||||
/// 纯数值坐标轴(数值轴或对数轴)。
|
||||
/// </summary>
|
||||
public bool IsValue()
|
||||
{
|
||||
foreach (var axis in m_XAxes)
|
||||
{
|
||||
if (axis.show && !axis.IsValue() && !axis.IsLog()) return false;
|
||||
}
|
||||
foreach (var axis in m_YAxes)
|
||||
{
|
||||
if (axis.show && !axis.IsValue() && !axis.IsLog()) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 纯类目轴。
|
||||
/// </summary>
|
||||
public bool IsCategory()
|
||||
{
|
||||
foreach (var axis in m_XAxes)
|
||||
{
|
||||
if (axis.show && !axis.IsCategory()) return false;
|
||||
}
|
||||
foreach (var axis in m_YAxes)
|
||||
{
|
||||
if (axis.show && !axis.IsCategory()) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 坐标是否在坐标轴内。
|
||||
/// </summary>
|
||||
public bool IsInGrid(Grid grid, Vector2 local)
|
||||
{
|
||||
return IsInGrid(grid, local.x, local.y);
|
||||
}
|
||||
|
||||
public bool IsInGrid(Grid grid, Vector3 local)
|
||||
{
|
||||
return IsInGrid(grid, local.x, local.y);
|
||||
}
|
||||
|
||||
public bool IsInGrid(Grid grid, float x, float y)
|
||||
{
|
||||
if (x < grid.runtimeX - 1 || x > grid.runtimeX + grid.runtimeWidth + 1 ||
|
||||
y < grid.runtimeY - 1 || y > grid.runtimeY + grid.runtimeHeight + 1)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool IsInAnyGrid(Vector2 local)
|
||||
{
|
||||
foreach (var grid in m_Grids)
|
||||
{
|
||||
if (IsInGrid(grid, local)) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public Grid GetGrid(Vector2 local)
|
||||
{
|
||||
for (int i = 0; i < m_Grids.Count; i++)
|
||||
{
|
||||
var grid = m_Grids[i];
|
||||
grid.index = i;
|
||||
if (IsInGrid(grid, local)) return grid;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 在下一帧刷新DataZoom
|
||||
/// </summary>
|
||||
public void RefreshDataZoom()
|
||||
{
|
||||
RefreshDataZoomLabel();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 立即刷新数值坐标轴的最大最小值
|
||||
/// </summary>
|
||||
public void RefreshAxisMinMaxValue()
|
||||
{
|
||||
CheckMinMaxValue();
|
||||
}
|
||||
|
||||
public Vector3 ClampInGrid(Grid grid, Vector3 pos)
|
||||
{
|
||||
if (IsInGrid(grid, pos)) return pos;
|
||||
else
|
||||
{
|
||||
// var pos = new Vector3(pos.x, pos.y);
|
||||
if (pos.x < grid.runtimeX) pos.x = grid.runtimeX;
|
||||
if (pos.x > grid.runtimeX + grid.runtimeWidth) pos.x = grid.runtimeX + grid.runtimeWidth;
|
||||
if (pos.y < grid.runtimeY) pos.y = grid.runtimeY;
|
||||
if (pos.y > grid.runtimeY + grid.runtimeHeight) pos.y = grid.runtimeY + grid.runtimeHeight;
|
||||
return pos;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 转换X轴和Y轴的配置
|
||||
/// </summary>
|
||||
/// <param name="index">坐标轴索引,0或1</param>
|
||||
public void CovertXYAxis(int index)
|
||||
{
|
||||
if (index >= 0 && index <= 1)
|
||||
{
|
||||
var xAxis = m_XAxes[index];
|
||||
var yAxis = m_YAxes[index];
|
||||
var tempX = m_XAxes[index].Clone();
|
||||
xAxis.Copy(m_YAxes[index]);
|
||||
yAxis.Copy(tempX);
|
||||
xAxis.runtimeZeroXOffset = 0;
|
||||
xAxis.runtimeZeroYOffset = 0;
|
||||
yAxis.runtimeZeroXOffset = 0;
|
||||
yAxis.runtimeZeroYOffset = 0;
|
||||
xAxis.runtimeMinValue = 0;
|
||||
xAxis.runtimeMaxValue = 0;
|
||||
yAxis.runtimeMinValue = 0;
|
||||
yAxis.runtimeMaxValue = 0;
|
||||
RefreshChart();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新坐标系原点和宽高
|
||||
/// </summary>
|
||||
public void UpdateCoordinate()
|
||||
{
|
||||
foreach (var grid in m_Grids)
|
||||
{
|
||||
grid.UpdateRuntimeData(m_ChartX, m_ChartY, m_ChartWidth, m_ChartHeight);
|
||||
}
|
||||
foreach (var dataZoom in m_DataZooms)
|
||||
{
|
||||
dataZoom.UpdateRuntimeData(m_ChartX, m_ChartY, m_ChartWidth, m_ChartHeight);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置可缓存的最大数据量。当数据量超过该值时,会自动删除第一个值再加入最新值。
|
||||
/// </summary>
|
||||
public void SetMaxCache(int maxCache)
|
||||
{
|
||||
foreach (var serie in m_Series.list) serie.maxCache = maxCache;
|
||||
foreach (var axis in m_XAxes) axis.maxCache = maxCache;
|
||||
foreach (var axis in m_YAxes) axis.maxCache = maxCache;
|
||||
}
|
||||
|
||||
public Grid GetGrid(int index)
|
||||
{
|
||||
if (index >= 0 && index < m_Grids.Count) return m_Grids[index];
|
||||
else return null;
|
||||
}
|
||||
|
||||
public XAxis GetXAxis(int index)
|
||||
{
|
||||
if (index >= 0 && index < m_XAxes.Count) return m_XAxes[index];
|
||||
else return null;
|
||||
}
|
||||
|
||||
public YAxis GetYAxis(int index)
|
||||
{
|
||||
if (index >= 0 && index < m_YAxes.Count) return m_YAxes[index];
|
||||
else return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 032e5d8f514854bf39f5fd7052119271
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,62 @@
|
||||
/************************************************/
|
||||
/* */
|
||||
/* Copyright (c) 2018 - 2021 monitor1394 */
|
||||
/* https://github.com/monitor1394 */
|
||||
/* */
|
||||
/************************************************/
|
||||
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace XCharts
|
||||
{
|
||||
public partial class BaseChart
|
||||
{
|
||||
public Vessel vessel { get { return m_Vessels.Count > 0 ? m_Vessels[0] : null; } }
|
||||
/// <summary>
|
||||
/// 容器组件列表。
|
||||
/// </summary>
|
||||
public List<Vessel> vessels { get { return m_Vessels; } }
|
||||
|
||||
/// <summary>
|
||||
/// 移除所有容器组件。
|
||||
/// </summary>
|
||||
public void RemoveVessel()
|
||||
{
|
||||
m_Vessels.Clear();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加容器组件。
|
||||
/// </summary>
|
||||
public void AddVessel(Vessel vessel)
|
||||
{
|
||||
m_Vessels.Add(vessel);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加容器组件。
|
||||
/// </summary>
|
||||
public Vessel AddVessel(Vessel.Shape shape, Vector2 center, float radius)
|
||||
{
|
||||
var vessel = new Vessel();
|
||||
vessel.shape = shape;
|
||||
vessel.radius = radius;
|
||||
vessel.center[0] = center.x;
|
||||
vessel.center[1] = center.y;
|
||||
AddVessel(vessel);
|
||||
return vessel;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获得指定索引的容器组件。
|
||||
/// </summary>
|
||||
/// <param name="radarIndex"></param>
|
||||
/// <returns></returns>
|
||||
public Vessel GetVessel(int vesselIndex)
|
||||
{
|
||||
if (vesselIndex < 0 || vesselIndex > m_Vessels.Count - 1) return null;
|
||||
return m_Vessels[vesselIndex];
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fd14dec4102b848f699bbf42babbe4c4
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,27 @@
|
||||
/************************************************/
|
||||
/* */
|
||||
/* Copyright (c) 2018 - 2021 monitor1394 */
|
||||
/* https://github.com/monitor1394 */
|
||||
/* */
|
||||
/************************************************/
|
||||
|
||||
namespace XCharts
|
||||
{
|
||||
public partial class BaseChart
|
||||
{
|
||||
/// <summary>
|
||||
/// 极坐标。
|
||||
/// </summary>
|
||||
public Polar polar { get { return m_Polars.Count > 0 ? m_Polars[0] : null; } }
|
||||
/// <summary>
|
||||
/// Angle axis of Polar Coordinate.
|
||||
/// 极坐标系的角度轴。
|
||||
/// </summary>
|
||||
public AngleAxis angleAxis { get { return m_AngleAxes.Count > 0 ? m_AngleAxes[0] : null; } }
|
||||
/// <summary>
|
||||
/// Radial axis of polar coordinate.
|
||||
/// 极坐标系的径向轴。
|
||||
/// </summary>
|
||||
public RadiusAxis radiusAxis { get { return m_RadiusAxes.Count > 0 ? m_RadiusAxes[0] : null; } }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 42960f04fcc2442baa061d32386aaaa8
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,138 @@
|
||||
/************************************************/
|
||||
/* */
|
||||
/* Copyright (c) 2018 - 2021 monitor1394 */
|
||||
/* https://github.com/monitor1394 */
|
||||
/* */
|
||||
/************************************************/
|
||||
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace XCharts
|
||||
{
|
||||
public partial class BaseChart
|
||||
{
|
||||
public Radar radar { get { return m_Radars.Count > 0 ? m_Radars[0] : null; } }
|
||||
/// <summary>
|
||||
/// 雷达坐标系组件列表。
|
||||
/// </summary>
|
||||
public List<Radar> radars { get { return m_Radars; } }
|
||||
|
||||
/// <summary>
|
||||
/// 移除所有雷达坐标系组件。
|
||||
/// </summary>
|
||||
public void RemoveRadar()
|
||||
{
|
||||
m_Radars.Clear();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 移除指定Radar的所有Indicator。
|
||||
/// </summary>
|
||||
/// <param name="radarIndex"></param>
|
||||
public void RemoveIndicator(int radarIndex)
|
||||
{
|
||||
var radar = GetRadar(radarIndex);
|
||||
if (radar == null) return;
|
||||
radar.indicatorList.Clear();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加雷达坐标系组件。
|
||||
/// </summary>
|
||||
public void AddRadar(Radar radar)
|
||||
{
|
||||
m_Radars.Add(radar);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加雷达坐标系组件。
|
||||
/// </summary>
|
||||
/// <param name="shape">形状,圆形还是多边形</param>
|
||||
/// <param name="center">中心点,0-1浮点数时表示百分比</param>
|
||||
/// <param name="radius">半径,0-1浮点数时表示百分比</param>
|
||||
/// <param name="splitNumber">指示器轴的分割段数</param>
|
||||
/// <param name="lineWidth">线条宽</param>
|
||||
/// <param name="showIndicator">是否显示指示器名称</param>
|
||||
/// <param name="showSplitArea">是否显示分割区域</param>
|
||||
/// <returns></returns>
|
||||
public Radar AddRadar(Radar.Shape shape, Vector2 center, float radius, int splitNumber = 5,
|
||||
float lineWidth = 0f, 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.splitLine.lineStyle.width = lineWidth;
|
||||
m_Radars.Add(radar);
|
||||
return radar;
|
||||
}
|
||||
|
||||
public bool AddIndicator(int radarIndex, Radar.Indicator indicator)
|
||||
{
|
||||
var radar = GetRadar(radarIndex);
|
||||
if (radar == null) return false;
|
||||
radar.AddIndicator(indicator);
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加指示器。
|
||||
/// </summary>
|
||||
/// <param name="radarIndex">雷达坐标系组件索引,从0开始</param>
|
||||
/// <param name="name">指示器名称</param>
|
||||
/// <param name="min">指示器最小值</param>
|
||||
/// <param name="max">指示器最大值</param>
|
||||
/// <returns></returns>
|
||||
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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新指示器。
|
||||
/// </summary>
|
||||
/// <param name="radarIndex">雷达坐标系组件的索引,从0开始</param>
|
||||
/// <param name="indicatorIndex">指示器索引,从0开始</param>
|
||||
/// <param name="name">指示器名称</param>
|
||||
/// <param name="min">指示器最小值</param>
|
||||
/// <param name="max">指示器最大值</param>
|
||||
/// <returns></returns>
|
||||
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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获得指定索引的雷达坐标系组件。
|
||||
/// </summary>
|
||||
/// <param name="radarIndex"></param>
|
||||
/// <returns></returns>
|
||||
public Radar GetRadar(int radarIndex)
|
||||
{
|
||||
if (radarIndex < 0 || radarIndex > m_Radars.Count - 1) return null;
|
||||
return m_Radars[radarIndex];
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获得指定雷达坐标系组件指定索引的指示器。
|
||||
/// </summary>
|
||||
/// <param name="radarIndex"></param>
|
||||
/// <param name="indicatorIndex"></param>
|
||||
/// <returns></returns>
|
||||
public Radar.Indicator GetIndicator(int radarIndex, int indicatorIndex)
|
||||
{
|
||||
var radar = GetRadar(radarIndex);
|
||||
if (radar != null) return radar.GetIndicator(indicatorIndex);
|
||||
else return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f17a7aa35fdd3417dab9414f10fe2886
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,88 @@
|
||||
/************************************************/
|
||||
/* */
|
||||
/* Copyright (c) 2018 - 2021 monitor1394 */
|
||||
/* https://github.com/monitor1394 */
|
||||
/* */
|
||||
/************************************************/
|
||||
|
||||
namespace XCharts
|
||||
{
|
||||
public partial class RingChart
|
||||
{
|
||||
/// <summary>
|
||||
/// 更新指定系列执行数据项的最大值
|
||||
/// </summary>
|
||||
/// <param name="serieIndex"></param>
|
||||
/// <param name="dataIndex"></param>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
public bool UpdateMax(int serieIndex, int dataIndex, float value)
|
||||
{
|
||||
var serie = m_Series.GetSerie(serieIndex);
|
||||
if (serie != null)
|
||||
{
|
||||
return serie.UpdateData(dataIndex, 1, value);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新指定系列的所有数据项的最大值
|
||||
/// </summary>
|
||||
/// <param name="serieIndex"></param>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
public bool UpdateMax(int serieIndex, float value)
|
||||
{
|
||||
var serie = m_Series.GetSerie(serieIndex);
|
||||
if (serie != null)
|
||||
{
|
||||
var flag = true;
|
||||
for (int i = 0; i < serie.dataCount; i++)
|
||||
{
|
||||
if (serie.UpdateData(i, 1, value)) flag = false;
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新第一个系列第一个数据项的最大值
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
public bool UpdateMax(float value)
|
||||
{
|
||||
return UpdateMax(0, 0, value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds the data with the specified maximum value to the specified serie.
|
||||
/// 添加指定最大值的数据到指定系列中。
|
||||
/// </summary>
|
||||
/// <param name="serieName">the name of serie</param>
|
||||
/// <param name="value">the data</param>
|
||||
/// <param name="max">the max data</param>
|
||||
/// <param name="dataName">the name of data</param>
|
||||
/// <returns>Returns True on success</returns>
|
||||
public override SerieData AddData(string serieName, float value, float max, string dataName = null)
|
||||
{
|
||||
return base.AddData(serieName, value, max, dataName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds the data with the specified maximum value to the specified serie.
|
||||
/// 添加指定最大值的数据到指定系列中。
|
||||
/// </summary>
|
||||
/// <param name="serieIndex">the index of serie</param>
|
||||
/// <param name="value">the data</param>
|
||||
/// <param name="max">the max data</param>
|
||||
/// <param name="dataName">the name of data</param>
|
||||
/// <returns>Returns True on success</returns>
|
||||
public override SerieData AddData(int serieIndex, float value, float max, string dataName = null)
|
||||
{
|
||||
return base.AddData(serieIndex, value, max, dataName);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7a1cd7e0dade8470cb91d6a7971ff022
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in new issue
Block a user