123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.UI;
-
- namespace XCharts.Runtime
- {
- /// <summary>
- /// The way to get serie symbol size.
- /// |获取标记图形大小的方式。
- /// </summary>
- public enum SymbolSizeType
- {
- /// <summary>
- /// Specify constant for symbol size.
- /// |自定义大小。
- /// </summary>
- Custom,
- /// <summary>
- /// Specify the dataIndex and dataScale to calculate symbol size.
- /// |通过 dataIndex 从数据中获取,再乘以一个比例系数 dataScale 。
- /// </summary>
- FromData,
- /// <summary>
- /// Specify function for symbol size.
- /// |通过委托函数获取。
- /// </summary>
- Function,
- }
-
- /// <summary>
- /// 系列数据项的标记的图形
- /// </summary>
- [System.Serializable]
- public class SerieSymbol : SymbolStyle, ISerieDataComponent
- {
- [SerializeField] private SymbolSizeType m_SizeType = SymbolSizeType.Custom;
- [SerializeField] private int m_DataIndex = 1;
- [SerializeField] private float m_DataScale = 1;
- [SerializeField] private SymbolSizeFunction m_SizeFunction;
- [SerializeField] private int m_StartIndex;
- [SerializeField] private int m_Interval;
- [SerializeField] private bool m_ForceShowLast = false;
- [SerializeField] private bool m_Repeat = false;
- [SerializeField][Since("v3.3.0")] private float m_MinSize = 0f;
- [SerializeField][Since("v3.3.0")] private float m_MaxSize = 0f;
-
- public override void Reset()
- {
- base.Reset();
- m_SizeType = SymbolSizeType.Custom;
- m_DataIndex = 1;
- m_DataScale = 1;
- m_SizeFunction = null;
- m_StartIndex = 0;
- m_Interval = 0;
- m_ForceShowLast = false;
- m_Repeat = false;
- m_MinSize = 0f;
- m_MaxSize = 0f;
- }
-
- /// <summary>
- /// the type of symbol size.
- /// |标记图形的大小获取方式。
- /// </summary>
- public SymbolSizeType sizeType
- {
- get { return m_SizeType; }
- set { if (PropertyUtil.SetStruct(ref m_SizeType, value)) SetVerticesDirty(); }
- }
- /// <summary>
- /// whitch data index is when the sizeType assined as FromData.
- /// |当sizeType指定为FromData时,指定的数据源索引。
- /// </summary>
- public int dataIndex
- {
- get { return m_DataIndex; }
- set { if (PropertyUtil.SetStruct(ref m_DataIndex, value)) SetVerticesDirty(); }
- }
- /// <summary>
- /// the scale of data when sizeType assined as FromData.
- /// |当sizeType指定为FromData时,指定的倍数系数。
- /// </summary>
- public float dataScale
- {
- get { return m_DataScale; }
- set { if (PropertyUtil.SetStruct(ref m_DataScale, value)) SetVerticesDirty(); }
- }
- /// <summary>
- /// the function of size when sizeType assined as Function.
- /// |当sizeType指定为Function时,指定的委托函数。
- /// </summary>
- public SymbolSizeFunction sizeFunction
- {
- get { return m_SizeFunction; }
- set { if (PropertyUtil.SetClass(ref m_SizeFunction, value)) SetVerticesDirty(); }
- }
- /// <summary>
- /// the index start to show symbol.
- /// |开始显示图形标记的索引。
- /// </summary>
- public int startIndex
- {
- get { return m_StartIndex; }
- set { if (PropertyUtil.SetStruct(ref m_StartIndex, value)) SetVerticesDirty(); }
- }
- /// <summary>
- /// the interval of show symbol.
- /// |显示图形标记的间隔。0表示显示所有标签,1表示隔一个隔显示一个标签,以此类推。
- /// </summary>
- public int interval
- {
- get { return m_Interval; }
- set { if (PropertyUtil.SetStruct(ref m_Interval, value)) SetVerticesDirty(); }
- }
- /// <summary>
- /// whether to show the last symbol.
- /// |是否强制显示最后一个图形标记。
- /// </summary>
- public bool forceShowLast
- {
- get { return m_ForceShowLast; }
- set { if (PropertyUtil.SetStruct(ref m_ForceShowLast, value)) SetVerticesDirty(); }
- }
- /// <summary>
- /// 图形是否重复。
- /// </summary>
- public bool repeat
- {
- get { return m_Repeat; }
- set { if (PropertyUtil.SetStruct(ref m_Repeat, value)) SetAllDirty(); }
- }
- /// <summary>
- /// Minimum symbol size.
- /// |图形最小尺寸。只在sizeType为SymbolSizeType.FromData时有效。
- /// </summary>
- public float minSize
- {
- get { return m_MinSize; }
- set { if (PropertyUtil.SetStruct(ref m_MinSize, value)) SetVerticesDirty(); }
- }
- /// <summary>
- /// Maximum symbol size.
- /// |图形最大尺寸。只在sizeType为SymbolSizeType.FromData时有效。
- /// </summary>
- public float maxSize
- {
- get { return m_MaxSize; }
- set { if (PropertyUtil.SetStruct(ref m_MaxSize, value)) SetVerticesDirty(); }
- }
-
- /// <summary>
- /// 根据指定的sizeType获得标记的大小
- /// </summary>
- /// <param name="data"></param>
- /// <returns></returns>
- public float GetSize(List<double> data, float themeSize)
- {
- switch (m_SizeType)
- {
- case SymbolSizeType.Custom:
- return size == 0 ? themeSize : size;
- case SymbolSizeType.FromData:
- if (data != null && dataIndex >= 0 && dataIndex < data.Count)
- {
- var value = (float) data[dataIndex] * m_DataScale;
- if (m_MinSize != 0 && value < m_MinSize) value = m_MinSize;
- if (m_MaxSize != 0 && value > m_MaxSize) value = m_MaxSize;
- return value;
- }
- else
- {
- return size == 0 ? themeSize : size;
- }
- case SymbolSizeType.Function:
- if (data != null && sizeFunction != null) return sizeFunction(data);
- else return size == 0 ? themeSize : size;
- default:
- return size == 0 ? themeSize : size;
- }
- }
-
- public bool ShowSymbol(int dataIndex, int dataCount)
- {
- if (!show)
- return false;
-
- if (dataIndex < startIndex)
- return false;
-
- if (m_Interval <= 0)
- return true;
-
- if (m_ForceShowLast && dataIndex == dataCount - 1)
- return true;
-
- return (dataIndex - startIndex) % (m_Interval + 1) == 0;
- }
- }
- }
|