From 43c31405b8d7503985c9e64ae0aef6d18dd6f356 Mon Sep 17 00:00:00 2001 From: monitor1394 Date: Sun, 1 May 2022 10:54:14 +0800 Subject: [PATCH] [bug][ring] fix ring label formatter (#195) --- Runtime/Helper/FormatterHelper.cs | 2 +- Runtime/Serie/Ring/Ring.cs | 7 +++++++ Runtime/Serie/Ring/RingHandler.cs | 8 +++++--- Runtime/Serie/Serie.cs | 2 +- Runtime/Serie/SerieHandler.cs | 3 ++- 5 files changed, 16 insertions(+), 6 deletions(-) diff --git a/Runtime/Helper/FormatterHelper.cs b/Runtime/Helper/FormatterHelper.cs index d0566e8b..b0d63a31 100644 --- a/Runtime/Helper/FormatterHelper.cs +++ b/Runtime/Helper/FormatterHelper.cs @@ -138,7 +138,7 @@ namespace XCharts.Runtime var value = serie.GetData(bIndex, dimensionIndex, dataZoom); if (isPercent) { - var total = serie.GetDataTotal(dimensionIndex); + var total = serie.GetDataTotal(dimensionIndex, serie.GetSerieData(bIndex)); var percent = total == 0 ? 0 : value / serie.yTotal * 100; content = content.Replace(old, ChartCached.FloatToStr(percent, numericFormatter)); } diff --git a/Runtime/Serie/Ring/Ring.cs b/Runtime/Serie/Ring/Ring.cs index 61d3b32b..2e8388a4 100644 --- a/Runtime/Serie/Ring/Ring.cs +++ b/Runtime/Serie/Ring/Ring.cs @@ -32,5 +32,12 @@ namespace XCharts.Runtime chart.AddData(serie.index, value, max, "data1"); return serie; } + + public override double GetDataTotal(int dimension, SerieData serieData = null) + { + if (serieData == null || serieData.data.Count <= 1) + return base.GetDataTotal(dimension, serieData); + return serieData.GetData(1); + } } } \ No newline at end of file diff --git a/Runtime/Serie/Ring/RingHandler.cs b/Runtime/Serie/Ring/RingHandler.cs index b798cd30..73e90f97 100644 --- a/Runtime/Serie/Ring/RingHandler.cs +++ b/Runtime/Serie/Ring/RingHandler.cs @@ -116,22 +116,24 @@ namespace XCharts.Runtime var toAngle = serieData.context.toAngle; switch (label.position) { - case LabelStyle.Position.Center: - serieData.context.labelPosition = serie.context.center + label.offset; - break; case LabelStyle.Position.Bottom: + case LabelStyle.Position.Start: var px1 = Mathf.Sin(startAngle * Mathf.Deg2Rad) * centerRadius; var py1 = Mathf.Cos(startAngle * Mathf.Deg2Rad) * centerRadius; var xDiff = serie.clockwise ? -label.distance : label.distance; serieData.context.labelPosition = serie.context.center + new Vector3(px1 + xDiff, py1); break; case LabelStyle.Position.Top: + case LabelStyle.Position.End: startAngle += serie.clockwise ? -label.distance : label.distance; toAngle += serie.clockwise ? label.distance : -label.distance; var px2 = Mathf.Sin(toAngle * Mathf.Deg2Rad) * centerRadius; var py2 = Mathf.Cos(toAngle * Mathf.Deg2Rad) * centerRadius; serieData.context.labelPosition = serie.context.center + new Vector3(px2, py2); break; + default: //LabelStyle.Position.Center + serieData.context.labelPosition = serie.context.center + label.offset; + break; } return serieData.context.labelPosition; } diff --git a/Runtime/Serie/Serie.cs b/Runtime/Serie/Serie.cs index 0719cc3e..3e4864e3 100644 --- a/Runtime/Serie/Serie.cs +++ b/Runtime/Serie/Serie.cs @@ -1431,7 +1431,7 @@ namespace XCharts.Runtime } } - public virtual double GetDataTotal(int dimension) + public virtual double GetDataTotal(int dimension, SerieData serieData = null) { if (m_Max > 0) return m_Max; diff --git a/Runtime/Serie/SerieHandler.cs b/Runtime/Serie/SerieHandler.cs index ca2665a6..1a0e5225 100644 --- a/Runtime/Serie/SerieHandler.cs +++ b/Runtime/Serie/SerieHandler.cs @@ -313,7 +313,7 @@ namespace XCharts.Runtime return; var colorIndex = chart.GetLegendRealShowNameIndex(serie.legendName); - var total = serie.GetDataTotal(defaultDimension); + var dataChangeDuration = serie.animation.GetUpdateAnimationDuration(); foreach (var serieData in serie.data) @@ -333,6 +333,7 @@ namespace XCharts.Runtime { //var value = serieData.GetData(defaultDimension); var value = serieData.GetCurrData(defaultDimension, dataChangeDuration); + var total = serie.GetDataTotal(defaultDimension, serieData); var content = string.IsNullOrEmpty(currLabel.formatter) ? ChartCached.NumberToStr(value, serieLabel.numericFormatter) : SerieLabelHelper.GetFormatterContent(serie, serieData, value, total,