[bug][datazoom] fix chart display error when datazoom enable.

This commit is contained in:
monitor1394
2022-08-13 13:38:02 +08:00
parent ca5470a351
commit f32808a36d
18 changed files with 52 additions and 21 deletions

View File

@@ -69,6 +69,7 @@
### 日志详情
* (2022.08.13) 修复`DataZoom`组件开启时图表显示效果可能不正确的问题
* (2022.08.11) 优化`Tooltip`支持`ignoreDataDefaultContent`
* (2022.08.10) 修复`Chart`在3D相机下部分组件显示异常的问题
* (2022.08.10) 修复`RemoveSerie()`接口不生效的问题 (#219)

View File

@@ -293,7 +293,6 @@ namespace XCharts.Runtime
for (int i = 0; i < dataCount; i++)
{
var serieData = serie.data[i];
serieData.index = i;
serie.context.sortedData.Add(serieData);
}
serie.context.sortedData.Sort(delegate(SerieData a, SerieData b)
@@ -490,7 +489,6 @@ namespace XCharts.Runtime
private void DrawXAxisIndicator(VertexHelper vh, Tooltip tooltip, GridCoord grid)
{
var xAxes = chart.GetChartComponents<XAxis>();
var lineType = tooltip.lineStyle.GetType(chart.theme.tooltip.lineType);
var lineWidth = tooltip.lineStyle.GetWidth(chart.theme.tooltip.lineWidth);
@@ -512,6 +510,8 @@ namespace XCharts.Runtime
pX += xAxis.IsCategory() ?
(float) (xAxis.context.pointerValue * splitWidth + (xAxis.boundaryGap ? splitWidth / 2 : 0)) :
xAxis.GetDistance(xAxis.context.axisTooltipValue, grid.context.width);
if (pX < grid.context.x)
break;
Vector2 sp = new Vector2(pX, grid.context.y);
Vector2 ep = new Vector2(pX, grid.context.y + grid.context.height);
var lineColor = TooltipHelper.GetLineColor(tooltip, chart.theme);
@@ -529,6 +529,8 @@ namespace XCharts.Runtime
float tooltipSplitWid = splitWidth < 1 ? 1 : splitWidth;
pX = (float) (grid.context.x + splitWidth * xAxis.context.pointerValue -
(xAxis.boundaryGap ? 0 : splitWidth / 2));
if (pX < grid.context.x)
break;
float pY = grid.context.y + grid.context.height;
Vector3 p1 = new Vector3(pX, grid.context.y);
Vector3 p2 = new Vector3(pX, pY);
@@ -571,6 +573,8 @@ namespace XCharts.Runtime
case Tooltip.Type.Line:
float pY = (float) (grid.context.y + yAxis.context.pointerValue * splitWidth +
(yAxis.boundaryGap ? splitWidth / 2 : 0));
if (pY < grid.context.y)
break;
Vector2 sp = new Vector2(grid.context.x, pY);
Vector2 ep = new Vector2(grid.context.x + grid.context.width, pY);
var lineColor = TooltipHelper.GetLineColor(tooltip, chart.theme);
@@ -589,6 +593,8 @@ namespace XCharts.Runtime
float pX = grid.context.x + grid.context.width;
pY = (float) (grid.context.y + splitWidth * yAxis.context.pointerValue -
(yAxis.boundaryGap ? 0 : splitWidth / 2));
if (pY < grid.context.y)
break;
Vector3 p1 = new Vector3(grid.context.x, pY);
Vector3 p2 = new Vector3(grid.context.x, pY + tooltipSplitWid);
Vector3 p3 = new Vector3(pX, pY + tooltipSplitWid);

View File

@@ -575,6 +575,7 @@ namespace XCharts.Runtime
var serie = m_Series[i];
serie.context.colorIndex = GetLegendRealShowNameIndex(serie.legendName);
serie.context.dataPoints.Clear();
serie.context.dataIndexs.Clear();
serie.context.dataIgnores.Clear();
serie.animation.context.isAllItemAnimationEnd = true;
if (!serie.context.pointerEnter)

View File

@@ -176,10 +176,10 @@ namespace XCharts.Runtime
for (int i = serie.minShow; i < maxCount; i++)
{
var serieData = showData[i];
serieData.index = i;
if (!serieData.show || serie.IsIgnoreValue(serieData))
{
serie.context.dataPoints.Add(Vector3.zero);
serie.context.dataIndexs.Add(serieData.index);
continue;
}
@@ -228,9 +228,14 @@ namespace XCharts.Runtime
Rect.MinMaxRect(plb.x, m_SerieGrid.context.y, prb.x, m_SerieGrid.context.y + relativedAxisLength);
if (!serie.clip || (serie.clip && m_SerieGrid.Contains(top)))
{
serie.context.dataPoints.Add(top);
serie.context.dataIndexs.Add(serieData.index);
}
else
{
continue;
}
if (serie.show && currHig != 0 && !serie.placeHolder)
{

View File

@@ -152,6 +152,7 @@ namespace XCharts.Runtime
if (!serieData.show || serie.IsIgnoreValue(serieData))
{
serie.context.dataPoints.Add(Vector3.zero);
serie.context.dataIndexs.Add(serieData.index);
continue;
}
@@ -184,6 +185,7 @@ namespace XCharts.Runtime
serieData.context.position = top;
serieData.context.rect = Rect.MinMaxRect(plb.x, plb.y, prb.x, prt.y);
serie.context.dataPoints.Add(top);
serie.context.dataIndexs.Add(serieData.index);
DrawNormalBar(vh, serie, serieData, itemStyle, colorIndex, highlight, gap, barWidth,
pX, pY, plb, plt, prt, prb, false, m_SerieGrid, areaColor, areaToColor);

View File

@@ -111,6 +111,7 @@ namespace XCharts.Runtime
if (serie.IsIgnoreValue(serieData))
{
serie.context.dataPoints.Add(Vector3.zero);
serie.context.dataIndexs.Add(serieData.index);
continue;
}
var state = SerieHelper.GetSerieState(serie, serieData);
@@ -154,6 +155,7 @@ namespace XCharts.Runtime
top = chart.ClampInGrid(grid, top);
}
serie.context.dataPoints.Add(top);
serie.context.dataIndexs.Add(serieData.index);
var areaColor = isRise ?
itemStyle.GetColor(theme.serie.candlestickColor) :
itemStyle.GetColor0(theme.serie.candlestickColor0);

View File

@@ -113,6 +113,7 @@ namespace XCharts.Runtime
if (serie.IsIgnoreValue(serieData))
{
serie.context.dataPoints.Add(Vector3.zero);
serie.context.dataIndexs.Add(serieData.index);
continue;
}
var open = serieData.GetCurrData(0, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue);
@@ -154,6 +155,7 @@ namespace XCharts.Runtime
// top = chart.ClampInGrid(grid, top);
// }
serie.context.dataPoints.Add(top);
serie.context.dataIndexs.Add(serieData.index);
var areaColor = isRise ?
itemStyle.GetColor(theme.serie.candlestickColor) :
itemStyle.GetColor0(theme.serie.candlestickColor0);

View File

@@ -155,7 +155,6 @@ namespace XCharts.Runtime
ChartConst.clearColor32;
borderToColor.a = (byte) (borderToColor.a * serie.itemStyle.opacity);
serie.context.dataPoints.Clear();
serie.animation.InitProgress(0, xCount);
var animationIndex = serie.animation.GetCurrIndex();
var dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
@@ -165,13 +164,13 @@ namespace XCharts.Runtime
for (int n = 0; n < serie.dataCount; n++)
{
var serieData = serie.data[n];
serieData.index = n;
var i = (int) serieData.GetData(0);
var j = (int) serieData.GetData(1);
var dimension = VisualMapHelper.GetDimension(visualMap, serieData.data.Count);
if (serie.IsIgnoreValue(serieData, dimension))
{
serie.context.dataPoints.Add(Vector3.zero);
serie.context.dataIndexs.Add(serieData.index);
continue;
}
var value = serieData.GetCurrData(dimension, dataChangeDuration, yAxis.inverse,
@@ -180,6 +179,7 @@ namespace XCharts.Runtime
var pos = new Vector3(zeroX + (i + (xAxis.boundaryGap ? 0.5f : 0)) * xWidth,
zeroY + (j + (yAxis.boundaryGap ? 0.5f : 0)) * yWidth);
serie.context.dataPoints.Add(pos);
serie.context.dataIndexs.Add(serieData.index);
serieData.context.position = pos;
serieData.context.canShowLabel = false;

View File

@@ -109,13 +109,16 @@ namespace XCharts.Runtime
{
serie.context.pointerEnter = true;
serie.context.pointerItemDataIndex = serieData.index;
serie.interact.SetValue(ref needInteract, lineWidth, true);
}
}
if (lastIndex != serie.context.pointerItemDataIndex)
{
needInteract = true;
}
if (serie.context.pointerItemDataIndex >= 0)
serie.interact.SetValue(ref needInteract, lineWidth, true, chart.theme.serie.selectedRate);
else
serie.interact.SetValue(ref needInteract, lineWidth);
}
if (needInteract)
{
@@ -148,7 +151,8 @@ namespace XCharts.Runtime
for (int i = 0; i < count; i++)
{
var serieData = serie.GetSerieData(i);
var index = serie.context.dataIndexs[i];
var serieData = serie.GetSerieData(index);
if (serieData == null)
continue;
if (serieData.context.isClip)
@@ -156,7 +160,7 @@ namespace XCharts.Runtime
var state = SerieHelper.GetSerieState(serie, serieData, true);
var symbol = SerieHelper.GetSerieSymbol(serie, serieData, state);
if (!symbol.show || !symbol.ShowSymbol(i, count))
if (!symbol.show || !symbol.ShowSymbol(index, count))
continue;
var pos = serie.context.dataPoints[i];
@@ -178,7 +182,6 @@ namespace XCharts.Runtime
serieData.interact.SetValue(ref interacting, symbolSize);
symbolSize = serie.animation.GetSysmbolSize(symbolSize);
}
float symbolBorder = 0f;
float[] cornerRadius = null;
Color32 symbolColor, symbolToColor, symbolEmptyColor, borderColor;
@@ -335,6 +338,7 @@ namespace XCharts.Runtime
serie.context.dataIgnores.Add(false);
serieData.context.position = np;
serie.context.dataPoints.Add(np);
serie.context.dataIndexs.Add(serieData.index);
lp = np;
}
}

View File

@@ -208,6 +208,7 @@ namespace XCharts.Runtime
serieData.context.position = np;
serie.context.dataPoints.Add(np);
serie.context.dataIndexs.Add(serieData.index);
serie.context.dataIgnores.Add(false);
}
}

View File

@@ -51,7 +51,6 @@ namespace XCharts.Runtime
serie.animation.InitProgress(currDetailProgress, totalDetailProgress);
serie.context.dataPoints.Clear();
serie.containerIndex = parallel.index;
serie.containterInstanceId = parallel.instanceId;

View File

@@ -195,7 +195,6 @@ namespace XCharts.Runtime
for (int n = 0; n < data.Count; n++)
{
var serieData = data[n];
serieData.index = n;
var value = isAllZeroValue ? zeroReplaceValue : serieData.GetCurrData(1, dataChangeDuration);
serieData.context.startAngle = startDegree;
serieData.context.toAngle = startDegree;

View File

@@ -110,7 +110,6 @@ namespace XCharts.Runtime
for (int i = 0; i < serie.data.Count; i++)
{
var serieData = serie.data[i];
serieData.index = i;
var symbol = SerieHelper.GetSerieSymbol(serie, serieData);
var symbolSize = symbol.GetSize(serieData.data, chart.theme.serie.lineSymbolSize);
if (needHideAll || m_LegendEnter)
@@ -159,7 +158,6 @@ namespace XCharts.Runtime
for (int i = 0; i < serie.data.Count; i++)
{
var serieData = serie.data[i];
serieData.index = i;
var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize);
if (Vector3.Distance(chart.pointerPos, serieData.context.position) < size * 2)
{
@@ -351,7 +349,6 @@ namespace XCharts.Runtime
var angle = 2 * Mathf.PI / indicatorNum;
var centerPos = m_RadarCoord.context.center;
serie.animation.InitProgress(0, 1);
serie.context.dataPoints.Clear();
if (!serie.show || serie.animation.HasFadeOut())
{
return;
@@ -371,7 +368,6 @@ namespace XCharts.Runtime
for (int j = 0; j < serie.data.Count; j++)
{
var serieData = serie.data[j];
serieData.index = j;
string dataName = serieData.name;
if (!serieData.show)
@@ -430,6 +426,7 @@ namespace XCharts.Runtime
lastColor = lineColor;
}
serie.context.dataPoints.Add(startPoint);
serie.context.dataIndexs.Add(serieData.index);
serieData.context.position = startPoint;
serieData.context.labelPosition = startPoint;

View File

@@ -152,7 +152,6 @@ namespace XCharts.Runtime
for (int j = 0; j < data.Count; j++)
{
var serieData = data[j];
serieData.index = j;
if (!serieData.show) continue;
if (serieData.IsDataChanged()) dataChanging = true;
var value = serieData.GetFirstData(dataChangeDuration);
@@ -303,7 +302,6 @@ namespace XCharts.Runtime
for (int i = 0; i < serie.data.Count; i++)
{
var serieData = serie.data[i];
serieData.index = i;
if (dist >= serieData.context.insideRadius &&
dist <= serieData.context.outsideRadius &&
angle >= serieData.context.startAngle &&

View File

@@ -172,6 +172,7 @@ namespace XCharts.Runtime
continue;
serie.context.dataPoints.Add(pos);
serie.context.dataIndexs.Add(serieData.index);
serieData.context.position = pos;
var datas = serieData.data;
var symbolSize = 0f;
@@ -276,6 +277,7 @@ namespace XCharts.Runtime
pos = new Vector3(axis.context.x + xDataHig, axis.context.y + yDataHig);
}
serie.context.dataPoints.Add(pos);
serie.context.dataIndexs.Add(serieData.index);
serieData.context.position = pos;
var datas = serieData.data;

View File

@@ -96,6 +96,10 @@ namespace XCharts.Runtime
/// </summary>
public List<bool> dataIgnores = new List<bool>();
/// <summary>
/// 数据对应的index索引。dataIndexs 和 dataPoints 一一对应。
/// </summary>
public List<int> dataIndexs = new List<int>();
/// <summary>
/// 排序后的数据
/// </summary>
public List<SerieData> sortedData = new List<SerieData>();

View File

@@ -549,6 +549,10 @@ namespace XCharts.Runtime
public void SetLabelActive(bool flag)
{
if (labelObject != null) labelObject.SetActive(flag);
foreach (var labelObject in context.dataLabels)
{
labelObject.SetActive(false);
}
}
public void SetIconActive(bool flag)
{

View File

@@ -368,10 +368,18 @@ namespace XCharts.Runtime
return;
var dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
var needCheck = serie.context.dataIndexs.Count > 0;
foreach (var serieData in serie.data)
{
if (serieData.labelObject == null && serieData.context.dataLabels.Count <= 0)
{
continue;
}
if (needCheck && !serie.context.dataIndexs.Contains(serieData.index))
{
serieData.SetLabelActive(false);
continue;
};
var currLabel = SerieHelper.GetSerieLabel(serie, serieData);
var isIgnore = serie.IsIgnoreIndex(serieData.index, defaultDimension);
if (serie.show &&
@@ -429,10 +437,6 @@ namespace XCharts.Runtime
else
{
serieData.SetLabelActive(false);
foreach (var labelObject in serieData.context.dataLabels)
{
labelObject.SetActive(false);
}
}
}
}