mirror of
https://github.com/XCharts-Team/XCharts.git
synced 2026-05-28 12:08:46 +00:00
[optimize][serie] optimize index of serieData
This commit is contained in:
@@ -57,6 +57,7 @@
|
|||||||
|
|
||||||
## master
|
## master
|
||||||
|
|
||||||
|
* (2022.08.08) 优化`Serie`的数据项索引维护,增加检测和修复功能
|
||||||
* (2022.07.29) 修复在某些`Unity`版本导入后图表创建异常的问题
|
* (2022.07.29) 修复在某些`Unity`版本导入后图表创建异常的问题
|
||||||
* (2022.07.29) 增加`Axis`为`Time`时间轴时,支持次刻度和次分割线
|
* (2022.07.29) 增加`Axis`为`Time`时间轴时,支持次刻度和次分割线
|
||||||
* (2022.07.28) 优化`Radar`雷达图效果
|
* (2022.07.28) 优化`Radar`雷达图效果
|
||||||
|
|||||||
@@ -72,6 +72,7 @@ namespace XCharts.Editor
|
|||||||
{
|
{
|
||||||
while (listSize > m_Datas.arraySize) m_Datas.arraySize++;
|
while (listSize > m_Datas.arraySize) m_Datas.arraySize++;
|
||||||
while (listSize < m_Datas.arraySize) m_Datas.arraySize--;
|
while (listSize < m_Datas.arraySize) m_Datas.arraySize--;
|
||||||
|
serie.ResetDataIndex();
|
||||||
}
|
}
|
||||||
if (listSize > 30) // && !XCSettings.editorShowAllListData)
|
if (listSize > 30) // && !XCSettings.editorShowAllListData)
|
||||||
{
|
{
|
||||||
@@ -114,7 +115,9 @@ namespace XCharts.Editor
|
|||||||
m_DataElementFoldout[index] = false;
|
m_DataElementFoldout[index] = false;
|
||||||
}
|
}
|
||||||
var fieldCount = dimension + (showName ? 1 : 0);
|
var fieldCount = dimension + (showName ? 1 : 0);
|
||||||
m_DataElementFoldout[index] = ChartEditorHelper.DrawHeader("SerieData " + index, flag, false, null,
|
var serieData = m_Datas.GetArrayElementAtIndex(index);
|
||||||
|
var dataIndex = serieData.FindPropertyRelative("m_Index").intValue;
|
||||||
|
m_DataElementFoldout[index] = ChartEditorHelper.DrawHeader("SerieData " + dataIndex, flag, false, null,
|
||||||
delegate(Rect drawRect)
|
delegate(Rect drawRect)
|
||||||
{
|
{
|
||||||
//drawRect.width -= 2f;
|
//drawRect.width -= 2f;
|
||||||
@@ -124,7 +127,7 @@ namespace XCharts.Editor
|
|||||||
var lastWid = drawRect.width;
|
var lastWid = drawRect.width;
|
||||||
var lastFieldWid = EditorGUIUtility.fieldWidth;
|
var lastFieldWid = EditorGUIUtility.fieldWidth;
|
||||||
var lastLabelWid = EditorGUIUtility.labelWidth;
|
var lastLabelWid = EditorGUIUtility.labelWidth;
|
||||||
var serieData = m_Datas.GetArrayElementAtIndex(index);
|
//var serieData = m_Datas.GetArrayElementAtIndex(index);
|
||||||
var sereName = serieData.FindPropertyRelative("m_Name");
|
var sereName = serieData.FindPropertyRelative("m_Name");
|
||||||
var data = serieData.FindPropertyRelative("m_Data");
|
var data = serieData.FindPropertyRelative("m_Data");
|
||||||
#if UNITY_2019_3_OR_NEWER
|
#if UNITY_2019_3_OR_NEWER
|
||||||
@@ -190,7 +193,7 @@ namespace XCharts.Editor
|
|||||||
EditorGUI.indentLevel++;
|
EditorGUI.indentLevel++;
|
||||||
var serieData = m_Datas.GetArrayElementAtIndex(index);
|
var serieData = m_Datas.GetArrayElementAtIndex(index);
|
||||||
PropertyField(serieData.FindPropertyRelative("m_Name"));
|
PropertyField(serieData.FindPropertyRelative("m_Name"));
|
||||||
PropertyField(serieData.FindPropertyRelative("m_State"));
|
//PropertyField(serieData.FindPropertyRelative("m_State"));
|
||||||
if (serie.GetType().IsDefined(typeof(SerieDataExtraFieldAttribute), false))
|
if (serie.GetType().IsDefined(typeof(SerieDataExtraFieldAttribute), false))
|
||||||
{
|
{
|
||||||
var attribute = serie.GetType().GetAttribute<SerieDataExtraFieldAttribute>();
|
var attribute = serie.GetType().GetAttribute<SerieDataExtraFieldAttribute>();
|
||||||
|
|||||||
@@ -162,6 +162,13 @@ namespace XCharts.Editor
|
|||||||
RefreshEditors();
|
RefreshEditors();
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
editor.menus.Add(new HeaderMenuInfo("Reset Data Index", () =>
|
||||||
|
{
|
||||||
|
if (chart.ResetDataIndex(id))
|
||||||
|
{
|
||||||
|
RefreshEditors();
|
||||||
|
}
|
||||||
|
}));
|
||||||
foreach (var type in GetCovertToSerie(editor.serie.GetType()))
|
foreach (var type in GetCovertToSerie(editor.serie.GetType()))
|
||||||
{
|
{
|
||||||
editor.menus.Add(new HeaderMenuInfo("Covert to " + type.Name, () =>
|
editor.menus.Add(new HeaderMenuInfo("Covert to " + type.Name, () =>
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
@@ -67,26 +68,35 @@ namespace XCharts.Runtime
|
|||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void CheckLegend(BaseChart chart, StringBuilder sb)
|
private static void CheckLegend(BaseChart chart, StringBuilder sb) { }
|
||||||
{ }
|
|
||||||
|
|
||||||
private static void CheckGrid(BaseChart chart, StringBuilder sb)
|
private static void CheckGrid(BaseChart chart, StringBuilder sb) { }
|
||||||
{ }
|
|
||||||
|
|
||||||
private static void CheckSerie(BaseChart chart, StringBuilder sb)
|
private static void CheckSerie(BaseChart chart, StringBuilder sb)
|
||||||
{
|
{
|
||||||
var allDataIsEmpty = true;
|
var allDataIsEmpty = true;
|
||||||
var allDataIsZero = true;
|
var allDataIsZero = true;
|
||||||
var allSerieIsHide = true;
|
var allSerieIsHide = true;
|
||||||
|
var set = new HashSet<int>();
|
||||||
foreach (var serie in chart.series)
|
foreach (var serie in chart.series)
|
||||||
{
|
{
|
||||||
if (serie.show) allSerieIsHide = false;
|
if (serie.show) allSerieIsHide = false;
|
||||||
if (serie.dataCount > 0)
|
if (serie.dataCount > 0)
|
||||||
{
|
{
|
||||||
allDataIsEmpty = false;
|
allDataIsEmpty = false;
|
||||||
|
var dataIndexError = 0;
|
||||||
|
set.Clear();
|
||||||
for (int i = 0; i < serie.dataCount; i++)
|
for (int i = 0; i < serie.dataCount; i++)
|
||||||
{
|
{
|
||||||
var serieData = serie.GetSerieData(i);
|
var serieData = serie.GetSerieData(i);
|
||||||
|
if (set.Contains(serieData.index))
|
||||||
|
{
|
||||||
|
dataIndexError++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
set.Add(serieData.index);
|
||||||
|
}
|
||||||
for (int j = 1; j < serieData.data.Count; j++)
|
for (int j = 1; j < serieData.data.Count; j++)
|
||||||
{
|
{
|
||||||
if (serieData.GetData(j) != 0)
|
if (serieData.GetData(j) != 0)
|
||||||
@@ -101,6 +111,10 @@ namespace XCharts.Runtime
|
|||||||
{
|
{
|
||||||
sb.AppendFormat("warning:serie {0} serieData.data.count[{1}] not match showDataDimension[{2}]\n", serie.index, dataCount, serie.showDataDimension);
|
sb.AppendFormat("warning:serie {0} serieData.data.count[{1}] not match showDataDimension[{2}]\n", serie.index, dataCount, serie.showDataDimension);
|
||||||
}
|
}
|
||||||
|
if (dataIndexError > 0)
|
||||||
|
{
|
||||||
|
sb.AppendFormat("error: data index error, count={0}/{1}\n", dataIndexError, serie.dataCount);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -61,6 +61,18 @@ namespace XCharts.Runtime
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 重置serie的数据项索引。避免数据项索引异常。
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="serieIndex"></param>
|
||||||
|
public bool ResetDataIndex(int serieIndex)
|
||||||
|
{
|
||||||
|
var serie = GetSerie(serieIndex);
|
||||||
|
if (serie != null)
|
||||||
|
return serie.ResetDataIndex();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public bool CanAddSerie<T>() where T : Serie
|
public bool CanAddSerie<T>() where T : Serie
|
||||||
{
|
{
|
||||||
return CanAddSerie(typeof(T));
|
return CanAddSerie(typeof(T));
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ namespace XCharts.Runtime
|
|||||||
m_LastCheckContextFlag = needCheck;
|
m_LastCheckContextFlag = needCheck;
|
||||||
var themeSymbolSize = chart.theme.serie.lineSymbolSize;
|
var themeSymbolSize = chart.theme.serie.lineSymbolSize;
|
||||||
var needInteract = false;
|
var needInteract = false;
|
||||||
|
serie.ResetDataIndex();
|
||||||
if (m_LegendEnter)
|
if (m_LegendEnter)
|
||||||
{
|
{
|
||||||
serie.context.pointerEnter = true;
|
serie.context.pointerEnter = true;
|
||||||
@@ -112,8 +113,10 @@ namespace XCharts.Runtime
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (lastIndex != serie.context.pointerItemDataIndex)
|
if (lastIndex != serie.context.pointerItemDataIndex)
|
||||||
|
{
|
||||||
needInteract = true;
|
needInteract = true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (needInteract)
|
if (needInteract)
|
||||||
{
|
{
|
||||||
if (SeriesHelper.IsStack(chart.series))
|
if (SeriesHelper.IsStack(chart.series))
|
||||||
|
|||||||
@@ -1159,6 +1159,23 @@ namespace XCharts.Runtime
|
|||||||
serieData.interact.Reset();
|
serieData.interact.Reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 重置数据项索引。避免部分数据项的索引异常。
|
||||||
|
/// </summary>
|
||||||
|
public bool ResetDataIndex()
|
||||||
|
{
|
||||||
|
var flag = false;
|
||||||
|
for (int i = 0; i < m_Data.Count; i++)
|
||||||
|
{
|
||||||
|
if (m_Data[i].index != i)
|
||||||
|
{
|
||||||
|
m_Data[i].index = i;
|
||||||
|
flag = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return flag;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 清空所有数据
|
/// 清空所有数据
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
Reference in New Issue
Block a user