mirror of
https://github.com/XCharts-Team/XCharts.git
synced 2026-05-22 17:00:08 +00:00
增加Heatmap的maxCache参数支持
This commit is contained in:
@@ -609,12 +609,14 @@ namespace XCharts.Runtime
|
||||
{
|
||||
if (maxCache > 0)
|
||||
{
|
||||
if (context.addedDataCount < m_Data.Count)
|
||||
context.addedDataCount = m_Data.Count;
|
||||
while (m_Data.Count >= maxCache)
|
||||
{
|
||||
RemoveData(m_InsertDataToHead ? m_Data.Count - 1 : 0);
|
||||
}
|
||||
}
|
||||
|
||||
context.addedDataCount++;
|
||||
if (m_InsertDataToHead)
|
||||
m_Data.Insert(0, category);
|
||||
else
|
||||
@@ -623,6 +625,16 @@ namespace XCharts.Runtime
|
||||
SetAllDirty();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// get the history data count.
|
||||
/// ||获得添加过的历史数据总数
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public int GetAddedDataCount()
|
||||
{
|
||||
return context.addedDataCount < m_Data.Count ? m_Data.Count : context.addedDataCount;
|
||||
}
|
||||
|
||||
public void RemoveData(int dataIndex)
|
||||
{
|
||||
context.isNeedUpdateFilterData = true;
|
||||
|
||||
@@ -66,6 +66,10 @@ namespace XCharts.Runtime
|
||||
public List<double> labelValueList { get { return m_LabelValueList; } }
|
||||
public List<ChartLabel> labelObjectList { get { return m_AxisLabelList; } }
|
||||
public int dataZoomStartIndex;
|
||||
/// <summary>
|
||||
/// 添加过的历史数据总数
|
||||
/// </summary>
|
||||
public int addedDataCount;
|
||||
|
||||
internal List<string> filterData;
|
||||
internal bool lastCheckInverse;
|
||||
@@ -81,6 +85,7 @@ namespace XCharts.Runtime
|
||||
|
||||
internal void Clear()
|
||||
{
|
||||
addedDataCount = 0;
|
||||
m_RuntimeData.Clear();
|
||||
}
|
||||
|
||||
|
||||
@@ -543,11 +543,14 @@ namespace XCharts.Runtime
|
||||
/// <param name="axis"></param>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
public static int GetAxisValueSplitIndex(Axis axis, double value, int totalSplitNumber = -1)
|
||||
public static int GetAxisValueSplitIndex(Axis axis, double value, bool checkMaxCache, int totalSplitNumber = -1)
|
||||
{
|
||||
if (axis.IsCategory())
|
||||
{
|
||||
return (int)value;
|
||||
if (checkMaxCache)
|
||||
return axis.maxCache > 0 ? (int)value - (axis.GetAddedDataCount() - axis.data.Count) : (int)value;
|
||||
else
|
||||
return (int)value;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -347,8 +347,8 @@ namespace XCharts.Runtime
|
||||
|
||||
private void GetSerieDataByXYAxis(Serie serie, Axis xAxis, Axis yAxis)
|
||||
{
|
||||
var xAxisIndex = AxisHelper.GetAxisValueSplitIndex(xAxis, xAxis.context.pointerValue);
|
||||
var yAxisIndex = AxisHelper.GetAxisValueSplitIndex(yAxis, yAxis.context.pointerValue);
|
||||
var xAxisIndex = AxisHelper.GetAxisValueSplitIndex(xAxis, xAxis.context.pointerValue, false);
|
||||
var yAxisIndex = AxisHelper.GetAxisValueSplitIndex(yAxis, yAxis.context.pointerValue, false);
|
||||
serie.context.pointerItemDataIndex = -1;
|
||||
if (serie is Heatmap)
|
||||
{
|
||||
@@ -361,8 +361,8 @@ namespace XCharts.Runtime
|
||||
}
|
||||
foreach (var serieData in serie.data)
|
||||
{
|
||||
var x = AxisHelper.GetAxisValueSplitIndex(xAxis, serieData.GetData(0));
|
||||
var y = AxisHelper.GetAxisValueSplitIndex(yAxis, serieData.GetData(1));
|
||||
var x = AxisHelper.GetAxisValueSplitIndex(xAxis, serieData.GetData(0), true);
|
||||
var y = AxisHelper.GetAxisValueSplitIndex(yAxis, serieData.GetData(1), true);
|
||||
if (xAxisIndex == x && y == yAxisIndex)
|
||||
{
|
||||
serie.context.pointerItemDataIndex = serieData.index;
|
||||
|
||||
@@ -154,8 +154,8 @@ namespace XCharts.Runtime
|
||||
angleValue = serieData.GetData(1);
|
||||
value = serieData.GetData(2);
|
||||
|
||||
var xIndex = AxisHelper.GetAxisValueSplitIndex(m_RadiusAxis, radiusValue, xCount);
|
||||
var yIndex = AxisHelper.GetAxisValueSplitIndex(m_AngleAxis, angleValue, yCount);
|
||||
var xIndex = AxisHelper.GetAxisValueSplitIndex(m_RadiusAxis, radiusValue, true, xCount);
|
||||
var yIndex = AxisHelper.GetAxisValueSplitIndex(m_AngleAxis, angleValue, true, yCount);
|
||||
|
||||
start = startAngle + yIndex * yWidth;
|
||||
end = start + yWidth;
|
||||
|
||||
@@ -235,8 +235,8 @@ namespace XCharts.Runtime
|
||||
var serieData = serie.data[n];
|
||||
var xValue = serieData.GetData(0);
|
||||
var yValue = serieData.GetData(1);
|
||||
var i = AxisHelper.GetAxisValueSplitIndex(xAxis, xValue, xCount);
|
||||
var j = AxisHelper.GetAxisValueSplitIndex(yAxis, yValue, yCount);
|
||||
var i = AxisHelper.GetAxisValueSplitIndex(xAxis, xValue, true, xCount);
|
||||
var j = AxisHelper.GetAxisValueSplitIndex(yAxis, yValue,true, yCount);
|
||||
|
||||
if (serie.IsIgnoreValue(serieData, dimension))
|
||||
{
|
||||
@@ -367,8 +367,8 @@ namespace XCharts.Runtime
|
||||
{
|
||||
var xValue = serieData.GetData(0);
|
||||
var yValue = serieData.GetData(1);
|
||||
var i = AxisHelper.GetAxisValueSplitIndex(xAxis, xValue, xCount);
|
||||
var j = AxisHelper.GetAxisValueSplitIndex(yAxis, yValue, yCount);
|
||||
var i = AxisHelper.GetAxisValueSplitIndex(xAxis, xValue, true, xCount);
|
||||
var j = AxisHelper.GetAxisValueSplitIndex(yAxis, yValue,true, yCount);
|
||||
var key = GetGridKey(i, j);
|
||||
var count = 0;
|
||||
|
||||
|
||||
@@ -1339,7 +1339,7 @@ namespace XCharts.Runtime
|
||||
/// <param name="dataId">the unique id of data</param>
|
||||
public SerieData AddYData(double value, string dataName = null, string dataId = null)
|
||||
{
|
||||
CheckMaxCache();
|
||||
var flag = CheckMaxCache();
|
||||
int xValue = m_Data.Count;
|
||||
var serieData = SerieDataPool.Get();
|
||||
serieData.data.Add(xValue);
|
||||
@@ -1348,6 +1348,7 @@ namespace XCharts.Runtime
|
||||
serieData.index = xValue;
|
||||
serieData.id = dataId;
|
||||
AddSerieData(serieData);
|
||||
if (flag) ResetDataIndex();
|
||||
m_ShowDataDimension = 2;
|
||||
SetVerticesDirty();
|
||||
CheckDataName(dataName);
|
||||
@@ -1386,7 +1387,7 @@ namespace XCharts.Runtime
|
||||
/// <param name="dataId">the unique id of data</param>
|
||||
public SerieData AddXYData(double xValue, double yValue, string dataName = null, string dataId = null)
|
||||
{
|
||||
CheckMaxCache();
|
||||
var flag = CheckMaxCache();
|
||||
var serieData = SerieDataPool.Get();
|
||||
serieData.data.Clear();
|
||||
serieData.data.Add(xValue);
|
||||
@@ -1395,6 +1396,7 @@ namespace XCharts.Runtime
|
||||
serieData.index = m_Data.Count;
|
||||
serieData.id = dataId;
|
||||
AddSerieData(serieData);
|
||||
if (flag) ResetDataIndex();
|
||||
m_ShowDataDimension = 2;
|
||||
SetVerticesDirty();
|
||||
CheckDataName(dataName);
|
||||
@@ -1414,7 +1416,7 @@ namespace XCharts.Runtime
|
||||
/// <returns></returns>
|
||||
public SerieData AddData(double indexOrTimestamp, double open, double close, double lowest, double heighest, string dataName = null, string dataId = null)
|
||||
{
|
||||
CheckMaxCache();
|
||||
var flag = CheckMaxCache();
|
||||
var serieData = SerieDataPool.Get();
|
||||
serieData.data.Clear();
|
||||
serieData.data.Add(indexOrTimestamp);
|
||||
@@ -1426,6 +1428,7 @@ namespace XCharts.Runtime
|
||||
serieData.index = m_Data.Count;
|
||||
serieData.id = dataId;
|
||||
AddSerieData(serieData);
|
||||
if (flag) ResetDataIndex();
|
||||
m_ShowDataDimension = 5;
|
||||
SetVerticesDirty();
|
||||
CheckDataName(dataName);
|
||||
@@ -1449,7 +1452,7 @@ namespace XCharts.Runtime
|
||||
return AddXYData(valueList[0], valueList[1], dataName, dataId);
|
||||
else
|
||||
{
|
||||
CheckMaxCache();
|
||||
var flag = CheckMaxCache();
|
||||
m_ShowDataDimension = valueList.Count;
|
||||
var serieData = SerieDataPool.Get();
|
||||
serieData.name = dataName;
|
||||
@@ -1460,6 +1463,7 @@ namespace XCharts.Runtime
|
||||
serieData.data.Add(valueList[i]);
|
||||
}
|
||||
AddSerieData(serieData);
|
||||
if (flag) ResetDataIndex();
|
||||
SetVerticesDirty();
|
||||
CheckDataName(dataName);
|
||||
labelDirty = true;
|
||||
@@ -1483,7 +1487,7 @@ namespace XCharts.Runtime
|
||||
return AddXYData(values[0], values[1], dataName, dataId);
|
||||
else
|
||||
{
|
||||
CheckMaxCache();
|
||||
var flag = CheckMaxCache();
|
||||
m_ShowDataDimension = values.Length;
|
||||
var serieData = SerieDataPool.Get();
|
||||
serieData.name = dataName;
|
||||
@@ -1494,6 +1498,7 @@ namespace XCharts.Runtime
|
||||
serieData.data.Add(values[i]);
|
||||
}
|
||||
AddSerieData(serieData);
|
||||
if (flag) ResetDataIndex();
|
||||
SetVerticesDirty();
|
||||
CheckDataName(dataName);
|
||||
labelDirty = true;
|
||||
@@ -1558,15 +1563,18 @@ namespace XCharts.Runtime
|
||||
return link;
|
||||
}
|
||||
|
||||
private void CheckMaxCache()
|
||||
private bool CheckMaxCache()
|
||||
{
|
||||
if (m_MaxCache <= 0) return;
|
||||
if (m_MaxCache <= 0) return false;
|
||||
var flag = false;
|
||||
while (m_Data.Count >= m_MaxCache)
|
||||
{
|
||||
m_NeedUpdateFilterData = true;
|
||||
if (m_InsertDataToHead) RemoveData(m_Data.Count - 1);
|
||||
else RemoveData(0);
|
||||
flag = true;
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
Reference in New Issue
Block a user