mirror of
https://github.com/XCharts-Team/XCharts.git
synced 2026-05-14 20:00:09 +00:00
[optimize][serie] optimize index of serieData
This commit is contained in:
@@ -57,6 +57,7 @@
|
||||
|
||||
## master
|
||||
|
||||
* (2022.08.08) 优化`Serie`的数据项索引维护,增加检测和修复功能
|
||||
* (2022.07.29) 修复在某些`Unity`版本导入后图表创建异常的问题
|
||||
* (2022.07.29) 增加`Axis`为`Time`时间轴时,支持次刻度和次分割线
|
||||
* (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--;
|
||||
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>();
|
||||
|
||||
@@ -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, () =>
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user