增加BarrealtimeSort支持实时排序

This commit is contained in:
monitor1394
2025-03-01 22:30:51 +08:00
parent 063b5529d7
commit ffed67d8ee
16 changed files with 143 additions and 61 deletions

View File

@@ -167,7 +167,7 @@ namespace XCharts.Runtime
}
var dataZoom = chart.GetDataZoomOfAxis(axis);
var showData = serie.GetDataList(dataZoom);
var showData = serie.GetDataList(dataZoom, true);
if (showData.Count <= 0)
return;

View File

@@ -1750,7 +1750,7 @@ namespace XCharts.Runtime
/// </summary>
/// <param name="dataZoom"></param>
/// <returns></returns>
public List<SerieData> GetDataList(DataZoom dataZoom = null)
public List<SerieData> GetDataList(DataZoom dataZoom = null, bool sorted = false)
{
if (dataZoom != null && dataZoom.enable &&
(dataZoom.IsContainsXAxis(xAxisIndex) || dataZoom.IsContainsYAxis(yAxisIndex)))
@@ -1760,7 +1760,7 @@ namespace XCharts.Runtime
}
else
{
return useSortData && context.sortedData.Count > 0 ? context.sortedData : m_Data;
return useSortData && sorted && context.sortedData.Count > 0 ? context.sortedData : m_Data;
}
}

View File

@@ -59,6 +59,7 @@ namespace XCharts.Runtime
public ChartLabel labelObject { get; set; }
public ChartLabel titleObject { get; set; }
public int sortIndex { get; set; }
private bool m_Show = true;
/// <summary>

View File

@@ -955,6 +955,10 @@ namespace XCharts.Runtime
public static void UpdateSerieRuntimeFilterData(Serie serie, bool filterInvisible = true)
{
var realtimeData = true;
var dataChangeDuration = serie.animation.GetChangeDuration();
var dataAddDuration = serie.animation.GetAdditionDuration();
var unscaledTime = serie.animation.unscaledTime;
serie.context.sortedData.Clear();
foreach (var serieData in serie.data)
{
@@ -966,8 +970,12 @@ namespace XCharts.Runtime
case SerieDataSortType.Ascending:
serie.context.sortedData.Sort(delegate (SerieData data1, SerieData data2)
{
var value1 = data1.GetData(1);
var value2 = data2.GetData(1);
var value1 = realtimeData ?
data1.GetCurrData(1, dataAddDuration, dataChangeDuration, false, 0, 0, unscaledTime) :
data1.GetData(1);
var value2 = realtimeData ?
data2.GetCurrData(1, dataAddDuration, dataChangeDuration, false, 0, 0, unscaledTime) :
data2.GetData(1);
if (value1 == value2) return 0;
else if (value1 > value2) return 1;
else return -1;
@@ -976,8 +984,12 @@ namespace XCharts.Runtime
case SerieDataSortType.Descending:
serie.context.sortedData.Sort(delegate (SerieData data1, SerieData data2)
{
var value1 = data1.GetData(1);
var value2 = data2.GetData(1);
var value1 = realtimeData ?
data1.GetCurrData(1, dataAddDuration, dataChangeDuration, false, 0, 0, unscaledTime) :
data1.GetData(1);
var value2 = realtimeData ?
data2.GetCurrData(1, dataAddDuration, dataChangeDuration, false, 0, 0, unscaledTime) :
data2.GetData(1);
if (value1 == value2) return 0;
else if (value1 > value2) return -1;
else return 1;
@@ -986,6 +998,10 @@ namespace XCharts.Runtime
case SerieDataSortType.None:
break;
}
for (int i = 0; i < serie.context.sortedData.Count; i++)
{
serie.context.sortedData[i].sortIndex = i;
}
}
public static T CloneSerie<T>(Serie serie) where T : Serie