mirror of
https://github.com/XCharts-Team/XCharts.git
synced 2026-05-28 12:08:46 +00:00
优化图表性能
This commit is contained in:
@@ -67,6 +67,7 @@ namespace XCharts.Runtime
|
||||
m_LastCheckContextFlag = needCheck;
|
||||
var themeSymbolSize = chart.theme.serie.lineSymbolSize;
|
||||
lineWidth = serie.lineStyle.GetWidth(chart.theme.serie.lineWidth);
|
||||
var symbolVisible = serie.symbol != null && serie.symbol.show && serie.symbol.type != SymbolType.None;
|
||||
|
||||
var needInteract = false;
|
||||
if (m_LegendEnter)
|
||||
@@ -76,9 +77,12 @@ namespace XCharts.Runtime
|
||||
for (int i = 0; i < serie.dataCount; i++)
|
||||
{
|
||||
var serieData = serie.data[i];
|
||||
var size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize, SerieState.Emphasis);
|
||||
serieData.context.highlight = true;
|
||||
serieData.interact.SetValue(ref needInteract, size);
|
||||
if (symbolVisible)
|
||||
{
|
||||
var size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize, SerieState.Emphasis);
|
||||
serieData.interact.SetValue(ref needInteract, size);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (serie.context.isTriggerByAxis)
|
||||
@@ -90,13 +94,17 @@ namespace XCharts.Runtime
|
||||
var serieData = serie.data[i];
|
||||
var highlight = i == serie.context.pointerItemDataIndex;
|
||||
serieData.context.highlight = highlight;
|
||||
var state = SerieHelper.GetSerieState(serie, serieData, true);
|
||||
var size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize, state);
|
||||
serieData.interact.SetValue(ref needInteract, size);
|
||||
if (symbolVisible)
|
||||
{
|
||||
var state = SerieHelper.GetSerieState(serie, serieData, true);
|
||||
var size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize, state);
|
||||
serieData.interact.SetValue(ref needInteract, size);
|
||||
}
|
||||
if (highlight)
|
||||
{
|
||||
serie.context.pointerEnter = true;
|
||||
serie.context.pointerItemDataIndex = i;
|
||||
needInteract = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -108,13 +116,21 @@ namespace XCharts.Runtime
|
||||
for (int i = 0; i < serie.dataCount; i++)
|
||||
{
|
||||
var serieData = serie.data[i];
|
||||
var dist = Vector3.Distance(chart.pointerPos, serieData.context.position);
|
||||
var size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize);
|
||||
var highlight = dist <= size;
|
||||
var pointerOffset = (Vector2)chart.pointerPos - (Vector2)serieData.context.position;
|
||||
bool highlight;
|
||||
if (symbolVisible)
|
||||
{
|
||||
var size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize);
|
||||
highlight = pointerOffset.sqrMagnitude <= size * size;
|
||||
var state = SerieHelper.GetSerieState(serie, serieData, true);
|
||||
size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize, state);
|
||||
serieData.interact.SetValue(ref needInteract, size);
|
||||
}
|
||||
else
|
||||
{
|
||||
highlight = pointerOffset.sqrMagnitude <= themeSymbolSize * themeSymbolSize;
|
||||
}
|
||||
serieData.context.highlight = highlight;
|
||||
var state = SerieHelper.GetSerieState(serie, serieData, true);
|
||||
size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize, state);
|
||||
serieData.interact.SetValue(ref needInteract, size);
|
||||
if (highlight)
|
||||
{
|
||||
serie.context.pointerEnter = true;
|
||||
@@ -177,6 +193,18 @@ namespace XCharts.Runtime
|
||||
var dataChangeDuration = serie.animation.GetChangeDuration();
|
||||
var dataAddDuration = serie.animation.GetAdditionDuration();
|
||||
var unscaledTime = serie.animation.unscaledTime;
|
||||
var useCurrentData = false;
|
||||
List<double> sampleSumPrefix = null;
|
||||
if (serie.animation.enable)
|
||||
{
|
||||
useCurrentData = DataHelper.IsAnyDataChanged(ref showData, serie.minShow, maxCount);
|
||||
dataChanging = useCurrentData;
|
||||
}
|
||||
if (!useCurrentData && rate > 1 &&
|
||||
(serie.sampleType == SampleType.Sum || serie.sampleType == SampleType.Average))
|
||||
{
|
||||
sampleSumPrefix = DataHelper.BuildSampleSumPrefix(ref showData, maxCount, relativedAxis.inverse);
|
||||
}
|
||||
|
||||
var interacting = false;
|
||||
var lineWidth = LineHelper.GetLineWidth(ref interacting, serie, chart.theme.serie.lineWidth);
|
||||
@@ -204,7 +232,8 @@ namespace XCharts.Runtime
|
||||
var np = Vector3.zero;
|
||||
var xValue = axis.IsCategory() ? i : serieData.GetData(0, axis.inverse);
|
||||
var relativedValue = DataHelper.SampleValue(ref showData, serie.sampleType, rate, serie.minShow,
|
||||
maxCount, totalAverage, i, dataAddDuration, dataChangeDuration, ref dataChanging, relativedAxis, unscaledTime);
|
||||
maxCount, totalAverage, i, dataAddDuration, dataChangeDuration, ref dataChanging, relativedAxis,
|
||||
unscaledTime, useCurrentData, false, sampleSumPrefix);
|
||||
|
||||
serieData.context.stackHeight = GetDataPoint(isY, axis, relativedAxis, m_SerieGrid, xValue, relativedValue,
|
||||
i, scaleWid, scaleRelativedWid, false, ref np);
|
||||
|
||||
Reference in New Issue
Block a user