3.0 - optimize code

This commit is contained in:
monitor1394
2022-03-04 22:17:32 +08:00
parent 1ee0df09eb
commit 5745fea9a1
59 changed files with 482 additions and 435 deletions

View File

@@ -72,23 +72,23 @@ namespace XCharts.Runtime
/// <summary>
/// 自定义绘制回调。在绘制Serie前调用。
/// </summary>
public Action<VertexHelper> onCustomDraw { set { m_OnCustomDrawBaseCallback = value; } }
public Action<VertexHelper> onDraw { set { m_OnDrawBase = value; } }
/// <summary>
/// 自定义Serie绘制回调。在每个Serie绘制完前调用。
/// </summary>
public Action<VertexHelper, Serie> onCustomDrawBeforeSerie { set { m_OnCustomDrawSerieBeforeCallback = value; } }
public Action<VertexHelper, Serie> onDrawBeforeSerie { set { m_OnDrawSerieBefore = value; } }
/// <summary>
/// 自定义Serie绘制回调。在每个Serie绘制完后调用。
/// </summary>
public Action<VertexHelper, Serie> onCustomDrawAfterSerie { set { m_OnCustomDrawSerieAfterCallback = value; } }
public Action<VertexHelper, Serie> onDrawAfterSerie { set { m_OnDrawSerieAfter = value; } }
/// <summary>
/// 自定义Top绘制回调。在绘制Tooltip前调用。
/// </summary>
public Action<VertexHelper> onCustomDrawTop { set { m_OnCustomDrawTopCallback = value; } }
public Action<VertexHelper> onDrawTop { set { m_OnDrawTop = value; } }
/// <summary>
/// 自定义仪表盘指针绘制回调。参数SerieIndexSerieDataIndexcurrAngle
/// 自定义仪表盘指针绘制委托。
/// </summary>
public Action<VertexHelper, int, int, float> onCustomDrawGagugePointer { set { m_OnCustomDrawGagugePointerCallback = value; } get { return m_OnCustomDrawGagugePointerCallback; } }
public CustomDrawGaugePointerFunction customDrawGaugePointerFunction { set { m_CustomDrawGaugePointerFunction = value; } get { return m_CustomDrawGaugePointerFunction; } }
/// <summary>
/// the callback function of click pie area.
/// 点击饼图区域回调。参数PointerEventDataSerieIndexSerieDataIndex
@@ -102,7 +102,7 @@ namespace XCharts.Runtime
/// <summary>
/// 坐标轴变更数据索引时回调。参数axis, dataIndex/dataValue
/// </summary>
public Action<Axis, double> onUpdateAxisPointer { set { m_OnUpdateAxisPointer = value; } get { return m_OnUpdateAxisPointer; } }
public Action<Axis, double> onAxisPointerValueChanged { set { m_OnAxisPointerValueChanged = value; } get { return m_OnAxisPointerValueChanged; } }
/// <summary>
/// Redraw chart in next frame.
/// 在下一帧刷新图表。

View File

@@ -190,7 +190,6 @@ namespace XCharts.Runtime
return true;
}
/// <summary>
/// Add a data to serie.
/// If serieName doesn't exist in legend,will be add to legend.
@@ -199,13 +198,14 @@ namespace XCharts.Runtime
/// <param name="serieName">the name of serie</param>
/// <param name="data">the data to add</param>
/// <param name="dataName">the name of data</param>
/// <param name="dataId">the unique id of data</param>
/// <returns>Returns True on success</returns>
public SerieData AddData(string serieName, double data, string dataName = null)
public SerieData AddData(string serieName, double data, string dataName = null, string dataId = null)
{
var serie = GetSerie(serieName);
if (serie != null)
{
var serieData = serie.AddYData(data, dataName);
var serieData = serie.AddYData(data, dataName, dataId);
RefreshPainter(serie.painter);
return serieData;
}
@@ -219,13 +219,14 @@ namespace XCharts.Runtime
/// <param name="serieIndex">the index of serie</param>
/// <param name="data">the data to add</param>
/// <param name="dataName">the name of data</param>
/// <param name="dataId">the unique id of data</param>
/// <returns>Returns True on success</returns>
public SerieData AddData(int serieIndex, double data, string dataName = null)
public SerieData AddData(int serieIndex, double data, string dataName = null, string dataId = null)
{
var serie = GetSerie(serieIndex);
if (serie != null)
{
var serieData = serie.AddYData(data, dataName);
var serieData = serie.AddYData(data, dataName, dataId);
RefreshPainter(serie.painter);
return serieData;
}
@@ -239,13 +240,14 @@ namespace XCharts.Runtime
/// <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>
/// <param name="dataId">the unique id of data</param>
/// <returns>Returns True on success</returns>
public SerieData AddData(string serieName, List<double> multidimensionalData, string dataName = null)
public SerieData AddData(string serieName, List<double> multidimensionalData, string dataName = null, string dataId = null)
{
var serie = GetSerie(serieName);
if (serie != null)
{
var serieData = serie.AddData(multidimensionalData, dataName);
var serieData = serie.AddData(multidimensionalData, dataName, dataId);
RefreshPainter(serie.painter);
return serieData;
}
@@ -259,13 +261,14 @@ namespace XCharts.Runtime
/// <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>
/// <param name="dataId">the unique id of data</param>
/// <returns>Returns True on success</returns>
public SerieData AddData(int serieIndex, List<double> multidimensionalData, string dataName = null)
public SerieData AddData(int serieIndex, List<double> multidimensionalData, string dataName = null, string dataId = null)
{
var serie = GetSerie(serieIndex);
if (serie != null)
{
var serieData = serie.AddData(multidimensionalData, dataName);
var serieData = serie.AddData(multidimensionalData, dataName, dataId);
RefreshPainter(serie.painter);
return serieData;
}
@@ -280,13 +283,14 @@ namespace XCharts.Runtime
/// <param name="xValue">x data</param>
/// <param name="yValue">y data</param>
/// <param name="dataName">the name of data</param>
/// <param name="dataId">the unique id of data</param>
/// <returns>Returns True on success</returns>
public SerieData AddData(string serieName, double xValue, double yValue, string dataName = null)
public SerieData AddData(string serieName, double xValue, double yValue, string dataName = null, string dataId = null)
{
var serie = GetSerie(serieName);
if (serie != null)
{
var serieData = serie.AddXYData(xValue, yValue, dataName);
var serieData = serie.AddXYData(xValue, yValue, dataName, dataId);
RefreshPainter(serie.painter);
return serieData;
}
@@ -301,35 +305,36 @@ namespace XCharts.Runtime
/// <param name="xValue">x data</param>
/// <param name="yValue">y data</param>
/// <param name="dataName">the name of data</param>
/// <param name="dataId">the unique id of data</param>
/// <returns>Returns True on success</returns>
public SerieData AddData(int serieIndex, double xValue, double yValue, string dataName = null)
public SerieData AddData(int serieIndex, double xValue, double yValue, string dataName = null, string dataId = null)
{
var serie = GetSerie(serieIndex);
if (serie != null)
{
var serieData = serie.AddXYData(xValue, yValue, dataName);
var serieData = serie.AddXYData(xValue, yValue, dataName, dataId);
RefreshPainter(serie.painter);
return serieData;
}
return null;
}
public SerieData AddData(int serieIndex, double open, double close, double lowest, double heighest, string dataName = null)
public SerieData AddData(int serieIndex, double open, double close, double lowest, double heighest, string dataName = null, string dataId = null)
{
var serie = GetSerie(serieIndex);
if (serie != null)
{
var serieData = serie.AddData(open, close, lowest, heighest, dataName);
var serieData = serie.AddData(open, close, lowest, heighest, dataName, dataId);
RefreshPainter(serie.painter);
return serieData;
}
return null;
}
public SerieData AddData(string serieName, double open, double close, double lowest, double heighest, string dataName = null)
public SerieData AddData(string serieName, double open, double close, double lowest, double heighest, string dataName = null, string dataId = null)
{
var serie = GetSerie(serieName);
if (serie != null)
{
var serieData = serie.AddData(open, close, lowest, heighest, dataName);
var serieData = serie.AddData(open, close, lowest, heighest, dataName, dataId);
RefreshPainter(serie.painter);
return serieData;
}
@@ -853,8 +858,9 @@ namespace XCharts.Runtime
}
}
private void InternalAddSerie(Serie serie)
private void AddSerieAfterDeserialize(Serie serie)
{
serie.OnAfterDeserialize();
m_Series.Add(serie);
}

View File

@@ -77,15 +77,17 @@ namespace XCharts.Runtime
protected Vector2 m_ChartMaxAnchor;
protected Vector2 m_ChartPivot;
protected Vector2 m_ChartSizeDelta;
protected Rect m_ChartRect = new Rect(0, 0, 0, 0);
protected Action<VertexHelper> m_OnCustomDrawBaseCallback;
protected Action<VertexHelper> m_OnCustomDrawTopCallback;
protected Action<VertexHelper, Serie> m_OnCustomDrawSerieBeforeCallback;
protected Action<VertexHelper, Serie> m_OnCustomDrawSerieAfterCallback;
protected Action<VertexHelper, int, int, float> m_OnCustomDrawGagugePointerCallback;
protected Action<VertexHelper> m_OnDrawBase;
protected Action<VertexHelper> m_OnDrawTop;
protected Action<VertexHelper, Serie> m_OnDrawSerieBefore;
protected Action<VertexHelper, Serie> m_OnDrawSerieAfter;
protected Action<PointerEventData, int, int> m_OnPointerClickPie;
protected Action<PointerEventData, int> m_OnPointerClickBar;
protected Action<Axis, double> m_OnUpdateAxisPointer;
protected Action<Axis, double> m_OnAxisPointerValueChanged;
protected CustomDrawGaugePointerFunction m_CustomDrawGaugePointerFunction;
internal bool m_CheckAnimation = false;
internal protected List<string> m_LegendRealShowName = new List<string>();
@@ -209,7 +211,7 @@ namespace XCharts.Runtime
{
var painter = GetPainter(index);
if (painter == null) return;
painter.SetActive(flag, m_DebugInfo.showAllChildObject);
painter.SetActive(flag, m_DebugInfo.showAllChartObject);
}
protected virtual void CheckTheme()
@@ -306,7 +308,7 @@ namespace XCharts.Runtime
painter.index = m_PainterList.Count;
painter.type = Painter.Type.Serie;
painter.onPopulateMesh = OnDrawPainterSerie;
painter.SetActive(false, m_DebugInfo.showAllChildObject);
painter.SetActive(false, m_DebugInfo.showAllChartObject);
painter.material = settings.seriePainterMaterial;
painter.transform.SetSiblingIndex(index + 1);
m_PainterList.Add(painter);
@@ -315,7 +317,7 @@ namespace XCharts.Runtime
m_GraphMaxAnchor, m_GraphPivot, sizeDelta, chartHideFlags, 2 + settings.maxPainter);
m_PainterTop.type = Painter.Type.Top;
m_PainterTop.onPopulateMesh = OnDrawPainterTop;
m_PainterTop.SetActive(true, m_DebugInfo.showAllChildObject);
m_PainterTop.SetActive(true, m_DebugInfo.showAllChartObject);
m_PainterTop.material = settings.topPainterMaterial;
m_PainterTop.transform.SetSiblingIndex(settings.maxPainter + 1);
}
@@ -513,9 +515,9 @@ namespace XCharts.Runtime
DrawPainterBase(vh);
foreach (var handler in m_ComponentHandlers) handler.DrawBase(vh);
foreach (var handler in m_SerieHandlers) handler.DrawBase(vh);
if (m_OnCustomDrawBaseCallback != null)
if (m_OnDrawBase != null)
{
m_OnCustomDrawBaseCallback(vh);
m_OnDrawBase(vh);
}
m_BasePainterVertCount = vh.currentVertCount;
}
@@ -535,9 +537,9 @@ namespace XCharts.Runtime
serie.context.dataPoints.Clear();
serie.context.dataIgnores.Clear();
AnimationStyleHelper.UpdateSerieAnimation(serie);
if (m_OnCustomDrawSerieBeforeCallback != null)
if (m_OnDrawSerieBefore != null)
{
m_OnCustomDrawSerieBeforeCallback.Invoke(vh, serie);
m_OnDrawSerieBefore.Invoke(vh, serie);
}
DrawPainterSerie(vh, serie);
if (i >= 0 && i < m_SerieHandlers.Count)
@@ -546,9 +548,9 @@ namespace XCharts.Runtime
handler.DrawSerie(vh);
handler.RefreshLabelNextFrame();
}
if (m_OnCustomDrawSerieAfterCallback != null)
if (m_OnDrawSerieAfter != null)
{
m_OnCustomDrawSerieAfterCallback(vh, serie);
m_OnDrawSerieAfter(vh, serie);
}
serie.context.vertCount = vh.currentVertCount;
}
@@ -559,9 +561,9 @@ namespace XCharts.Runtime
vh.Clear();
DrawPainterTop(vh);
foreach (var draw in m_ComponentHandlers) draw.DrawTop(vh);
if (m_OnCustomDrawTopCallback != null)
if (m_OnDrawTop != null)
{
m_OnCustomDrawTopCallback(vh);
m_OnDrawTop(vh);
}
m_TopPainterVertCount = vh.currentVertCount;
}
@@ -648,6 +650,7 @@ namespace XCharts.Runtime
foreach (var serie in m_Series)
{
FieldInfo field;
serie.OnBeforeSerialize();
if (m_TypeListForSerie.TryGetValue(serie.GetType(), out field))
ReflectionUtil.InvokeListAdd(this, field, serie);
else
@@ -666,7 +669,7 @@ namespace XCharts.Runtime
}
foreach (var kv in m_TypeListForSerie)
{
ReflectionUtil.InvokeListAddTo<Serie>(this, kv.Value, InternalAddSerie);
ReflectionUtil.InvokeListAddTo<Serie>(this, kv.Value, AddSerieAfterDeserialize);
}
m_Series.Sort();
m_Components.Sort();

View File

@@ -145,7 +145,7 @@ namespace XCharts.Runtime
/// <summary>
/// 移除并重新初始化所有组件。
/// </summary>
public void ReinitAllChartComponent()
public void RemoveAndReinitChartObject()
{
ChartHelper.DestroyAllChildren(transform);
SetAllComponentDirty();

View File

@@ -49,7 +49,7 @@ namespace XCharts.Runtime
protected Vector2 graphAnchorMax { get { return m_GraphMinAnchor; } }
protected Vector2 graphAnchorMin { get { return m_GraphMaxAnchor; } }
protected Vector2 graphPivot { get { return m_GraphPivot; } }
public HideFlags chartHideFlags { get { return m_DebugInfo.showAllChildObject ? HideFlags.None : HideFlags.HideInHierarchy; } }
public HideFlags chartHideFlags { get { return m_DebugInfo.showAllChartObject ? HideFlags.None : HideFlags.HideInHierarchy; } }
public DebugInfo debug { get { return m_DebugInfo; } }
private ScrollRect m_ScrollRect;
@@ -125,7 +125,7 @@ namespace XCharts.Runtime
if (m_EnableTextMeshPro != enableTextMeshPro)
{
m_EnableTextMeshPro = enableTextMeshPro;
ReinitAllChartComponent();
RemoveAndReinitChartObject();
}
}

View File

@@ -23,7 +23,7 @@ namespace XCharts.Runtime
[NonSerialized] public SerieContext context = new SerieContext();
[NonSerialized] public InteractData interact = new InteractData();
internal SerieHandler handler { get; set; }
public SerieHandler handler { get; set; }
public virtual void SetVerticesDirty()
@@ -68,6 +68,19 @@ namespace XCharts.Runtime
handler.RemoveComponent();
}
public virtual void OnDataUpdate()
{
}
public virtual void OnBeforeSerialize()
{
}
public virtual void OnAfterDeserialize()
{
OnDataUpdate();
}
public void RefreshLabel()
{
if (handler != null)

View File

@@ -7,7 +7,7 @@ namespace XCharts.Runtime
[System.Serializable]
public class ChildComponent
{
public int index { get; set; }
public virtual int index { get; set; }
[NonSerialized] protected bool m_VertsDirty;
[NonSerialized] protected bool m_ComponentDirty;
[NonSerialized] protected Painter m_Painter;

View File

@@ -1,5 +1,8 @@
using System.Collections.Generic;
using UnityEngine.UI;
namespace XCharts.Runtime
{
/// <summary>
@@ -10,7 +13,7 @@ namespace XCharts.Runtime
/// <param name="value">当前label对应的数值数据Value轴或Time轴有效</param>
/// <param name="category">当前label对应的类目数据Category轴有效</param>
/// <returns>最终显示的文本内容</returns>
public delegate string DelegateAxisLabelFormatter(int labelIndex, double value, string category);
public delegate string AxisLabelFormatterFunction(int labelIndex, double value, string category);
/// <summary>
/// The delegate function for SerieLabels formatter.
/// SerieLabel的formatter自定义委托。
@@ -18,5 +21,14 @@ namespace XCharts.Runtime
/// <param name="dataIndex">数据索引</param>
/// <param name="value">数值</param>
/// <returns>最终显示的文本内容</returns>
public delegate string DelegateSerieLabelFormatter(int dataIndex, double value);
public delegate string SerieLabelFormatterFunction(int dataIndex, double value);
public delegate float AnimationDelayFunction(int dataIndex);
public delegate float AnimationDurationFunction(int dataIndex);
/// <summary>
/// 获取标记大小的回调。
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public delegate float SymbolSizeFunction(List<double> data);
public delegate void CustomDrawGaugePointerFunction(VertexHelper vh, int serieIndex, int dataIndex, float currentAngle);
}

View File

@@ -19,7 +19,6 @@ namespace XCharts.Runtime
private static Dictionary<Color, string> s_ColorDotStr = new Dictionary<Color, string>(100);
private static Dictionary<Type, Dictionary<int, string>> s_ComponentObjectName = new Dictionary<Type, Dictionary<int, string>>();
private static Dictionary<int, string> s_AxisLabelName = new Dictionary<int, string>();
private static Dictionary<string, string> s_AxisLabel = new Dictionary<string, string>();
private static Dictionary<Type, string> s_TypeName = new Dictionary<Type, string>();
@@ -158,15 +157,6 @@ namespace XCharts.Runtime
}
}
internal static string GetAxisTooltipLabel(string axisName)
{
if (!s_AxisLabel.ContainsKey(axisName))
{
s_AxisLabel[axisName] = axisName + "_label";
}
return s_AxisLabel[axisName];
}
internal static string GetTypeName<T>()
{
return GetTypeName(typeof(T));

View File

@@ -794,9 +794,6 @@ namespace XCharts.Runtime
}
}
public static Vector3 RotateRound(Vector3 position, Vector3 center, Vector3 axis, float angle)
{
Vector3 point = Quaternion.AngleAxis(angle, axis) * (position - center);
@@ -857,23 +854,7 @@ namespace XCharts.Runtime
}
}
public static float GetRuntimeRelativeOrAbsoluteValue(float check, float total)
{
if (check <= 0)
{
return 0;
}
else if (check <= 1)
{
return total * check;
}
else
{
return check;
}
}
public static Vector3 GetLastPoint(List<Vector3> list)
public static Vector3 GetLastValue(List<Vector3> list)
{
if (list.Count <= 0) return Vector3.zero;
else return list[list.Count - 1];

View File

@@ -19,6 +19,7 @@ namespace XCharts.Runtime
}
return null;
}
public static RadiusAxis GetRadiusAxis(List<MainComponent> components, int polarIndex)
{
foreach (var component in components)
@@ -32,32 +33,6 @@ namespace XCharts.Runtime
return null;
}
public static YAxis GetYAxisRelatedWitchXAxis(List<MainComponent> components, XAxis axis)
{
foreach (var component in components)
{
if (component is YAxis)
{
var yAxis = component as YAxis;
if (yAxis.gridIndex == axis.gridIndex) return yAxis;
}
}
return null;
}
public static XAxis GetXAxisRelatedWithYAxis(List<MainComponent> components, YAxis axis)
{
foreach (var component in components)
{
if (component is XAxis)
{
var xAxis = component as XAxis;
if (xAxis.gridIndex == axis.gridIndex) return xAxis;
}
}
return null;
}
public static float GetXAxisOnZeroOffset(List<MainComponent> components, XAxis axis)
{
if (!axis.axisLine.onZero) return 0;

View File

@@ -122,7 +122,7 @@ namespace XCharts.Runtime
foreach (var chart in chartList)
{
if (chart != null)
chart.ReinitAllChartComponent();
chart.RemoveAndReinitChartObject();
}
}