[optimize][serie] optimize index of serieData

This commit is contained in:
monitor1394
2022-08-08 07:43:19 +08:00
parent e7f19e72a5
commit 19914586ae
7 changed files with 64 additions and 7 deletions

View File

@@ -57,6 +57,7 @@
## master
* (2022.08.08) 优化`Serie`的数据项索引维护,增加检测和修复功能
* (2022.07.29) 修复在某些`Unity`版本导入后图表创建异常的问题
* (2022.07.29) 增加`Axis``Time`时间轴时,支持次刻度和次分割线
* (2022.07.28) 优化`Radar`雷达图效果

View File

@@ -72,6 +72,7 @@ namespace XCharts.Editor
{
while (listSize > m_Datas.arraySize) m_Datas.arraySize++;
while (listSize < m_Datas.arraySize) m_Datas.arraySize--;
serie.ResetDataIndex();
}
if (listSize > 30) // && !XCSettings.editorShowAllListData)
{
@@ -114,7 +115,9 @@ namespace XCharts.Editor
m_DataElementFoldout[index] = false;
}
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)
{
//drawRect.width -= 2f;
@@ -124,7 +127,7 @@ namespace XCharts.Editor
var lastWid = drawRect.width;
var lastFieldWid = EditorGUIUtility.fieldWidth;
var lastLabelWid = EditorGUIUtility.labelWidth;
var serieData = m_Datas.GetArrayElementAtIndex(index);
//var serieData = m_Datas.GetArrayElementAtIndex(index);
var sereName = serieData.FindPropertyRelative("m_Name");
var data = serieData.FindPropertyRelative("m_Data");
#if UNITY_2019_3_OR_NEWER
@@ -190,7 +193,7 @@ namespace XCharts.Editor
EditorGUI.indentLevel++;
var serieData = m_Datas.GetArrayElementAtIndex(index);
PropertyField(serieData.FindPropertyRelative("m_Name"));
PropertyField(serieData.FindPropertyRelative("m_State"));
//PropertyField(serieData.FindPropertyRelative("m_State"));
if (serie.GetType().IsDefined(typeof(SerieDataExtraFieldAttribute), false))
{
var attribute = serie.GetType().GetAttribute<SerieDataExtraFieldAttribute>();

View File

@@ -162,6 +162,13 @@ namespace XCharts.Editor
RefreshEditors();
}
}));
editor.menus.Add(new HeaderMenuInfo("Reset Data Index", () =>
{
if (chart.ResetDataIndex(id))
{
RefreshEditors();
}
}));
foreach (var type in GetCovertToSerie(editor.serie.GetType()))
{
editor.menus.Add(new HeaderMenuInfo("Covert to " + type.Name, () =>

View File

@@ -1,3 +1,4 @@
using System.Collections.Generic;
using System.Text;
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)
{
var allDataIsEmpty = true;
var allDataIsZero = true;
var allSerieIsHide = true;
var set = new HashSet<int>();
foreach (var serie in chart.series)
{
if (serie.show) allSerieIsHide = false;
if (serie.dataCount > 0)
{
allDataIsEmpty = false;
var dataIndexError = 0;
set.Clear();
for (int i = 0; i < serie.dataCount; 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++)
{
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);
}
if (dataIndexError > 0)
{
sb.AppendFormat("error: data index error, count={0}/{1}\n", dataIndexError, serie.dataCount);
}
}
else
{

View File

@@ -61,6 +61,18 @@ namespace XCharts.Runtime
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
{
return CanAddSerie(typeof(T));

View File

@@ -57,6 +57,7 @@ namespace XCharts.Runtime
m_LastCheckContextFlag = needCheck;
var themeSymbolSize = chart.theme.serie.lineSymbolSize;
var needInteract = false;
serie.ResetDataIndex();
if (m_LegendEnter)
{
serie.context.pointerEnter = true;
@@ -112,7 +113,9 @@ namespace XCharts.Runtime
}
}
if (lastIndex != serie.context.pointerItemDataIndex)
{
needInteract = true;
}
}
if (needInteract)
{

View File

@@ -1159,6 +1159,23 @@ namespace XCharts.Runtime
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>