From 816e26f51772d35a8da6f3793ec05f92a6ad84a7 Mon Sep 17 00:00:00 2001 From: monitor1394 Date: Mon, 17 Jul 2023 22:15:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0`Animation`=E7=9A=84`Interact?= =?UTF-8?q?ion`=E4=BA=A4=E4=BA=92=E5=8A=A8=E7=94=BB=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Editor/ChildComponents/AnimationDrawer.cs | 1 + .../ChildComponents/ComponentThemeDrawer.cs | 3 - Resources/XCSettings.asset | 2 - Resources/XCTheme-Dark.asset | 3 - Resources/XCTheme-Default.asset | 3 - Runtime/Component/Animation/AnimationInfo.cs | 14 +++- Runtime/Component/Animation/AnimationStyle.cs | 8 ++ Runtime/Component/Interaction/InteractData.cs | 18 +++++ Runtime/Component/Label/SerieLabelHelper.cs | 5 +- Runtime/Internal/XCSettings.cs | 4 - Runtime/Serie/Bar/BarHandler.PolarCoord.cs | 2 +- .../Heatmap/HeatmapHandler.PolarCoord.cs | 2 +- Runtime/Serie/Heatmap/HeatmapHandler.cs | 6 +- Runtime/Serie/Line/LineHandler.GridCoord.cs | 10 +-- Runtime/Serie/Line/LineHandler.PolarCoord.cs | 4 +- Runtime/Serie/Line/LineHandler.cs | 2 +- Runtime/Serie/Line/SimplifiedLineHandler.cs | 8 +- Runtime/Serie/Pie/PieHandler.cs | 73 ++++++++++++------- Runtime/Serie/Radar/RadarHandler.cs | 6 +- Runtime/Serie/Scatter/BaseScatterHandler.cs | 8 +- Runtime/Serie/SerieHelper.cs | 2 +- Runtime/Theme/SerieTheme.cs | 24 ------ 22 files changed, 113 insertions(+), 95 deletions(-) diff --git a/Editor/ChildComponents/AnimationDrawer.cs b/Editor/ChildComponents/AnimationDrawer.cs index 6188282d..53fc5af0 100644 --- a/Editor/ChildComponents/AnimationDrawer.cs +++ b/Editor/ChildComponents/AnimationDrawer.cs @@ -62,6 +62,7 @@ namespace XCharts.Editor PropertyField(prop, "m_Duration"); PropertyField(prop, "m_WidthRate"); PropertyField(prop, "m_RadiusRate"); + PropertyField(prop, "m_Offset"); --EditorGUI.indentLevel; } } diff --git a/Editor/ChildComponents/ComponentThemeDrawer.cs b/Editor/ChildComponents/ComponentThemeDrawer.cs index 06bec277..128f0f9e 100644 --- a/Editor/ChildComponents/ComponentThemeDrawer.cs +++ b/Editor/ChildComponents/ComponentThemeDrawer.cs @@ -148,9 +148,6 @@ namespace XCharts.Editor PropertyField(prop, "m_LineWidth"); PropertyField(prop, "m_LineSymbolSize"); PropertyField(prop, "m_ScatterSymbolSize"); - PropertyField(prop, "m_SelectedRate"); - PropertyField(prop, "m_PieTooltipExtraRadius"); - PropertyField(prop, "m_PieSelectedOffset"); PropertyField(prop, "m_CandlestickColor"); PropertyField(prop, "m_CandlestickColor0"); PropertyField(prop, "m_CandlestickBorderColor"); diff --git a/Resources/XCSettings.asset b/Resources/XCSettings.asset index 5587633c..07e20fb5 100644 --- a/Resources/XCSettings.asset +++ b/Resources/XCSettings.asset @@ -45,8 +45,6 @@ MonoBehaviour: m_LineSegmentDistance: 3 m_CicleSmoothness: 2 m_VisualMapTriangeLen: 20 - m_PieTooltipExtraRadius: 8 - m_PieSelectedOffset: 8 m_CustomThemes: - {fileID: 11400000, guid: 289d2fc7f4ce24f73b9ed8ec52639f72, type: 2} - {fileID: 11400000, guid: e1dc23a10de1e4c5dbfbaf74c4dfd218, type: 2} diff --git a/Resources/XCTheme-Dark.asset b/Resources/XCTheme-Dark.asset index 11c2806d..63d26000 100644 --- a/Resources/XCTheme-Dark.asset +++ b/Resources/XCTheme-Dark.asset @@ -188,9 +188,6 @@ MonoBehaviour: m_LineWidth: 1.8 m_LineSymbolSize: 5 m_ScatterSymbolSize: 20 - m_PieTooltipExtraRadius: 8 - m_SelectedRate: 1.3 - m_PieSelectedOffset: 8 m_CandlestickColor: serializedVersion: 2 rgba: 4283846390 diff --git a/Resources/XCTheme-Default.asset b/Resources/XCTheme-Default.asset index e05e5787..53fae3ef 100644 --- a/Resources/XCTheme-Default.asset +++ b/Resources/XCTheme-Default.asset @@ -145,9 +145,6 @@ MonoBehaviour: m_LineWidth: 1.8 m_LineSymbolSize: 5 m_ScatterSymbolSize: 20 - m_PieTooltipExtraRadius: 8 - m_SelectedRate: 1.3 - m_PieSelectedOffset: 8 m_CandlestickColor: serializedVersion: 2 rgba: 4283716843 diff --git a/Runtime/Component/Animation/AnimationInfo.cs b/Runtime/Component/Animation/AnimationInfo.cs index 520dd039..a0a41622 100644 --- a/Runtime/Component/Animation/AnimationInfo.cs +++ b/Runtime/Component/Animation/AnimationInfo.cs @@ -413,7 +413,8 @@ namespace XCharts.Runtime public class AnimationInteraction : AnimationInfo { [SerializeField][Since("v3.8.0")] private float m_WidthRate = 1.3f; - [SerializeField][Since("v3.8.0")] private float m_RadiusRate = 1.3f; + [SerializeField][Since("v3.8.0")] private float m_RadiusRate = 1.1f; + [SerializeField][Since("v3.8.0")] private float m_Offset = 8f; /// /// the size rate of the width. @@ -425,5 +426,16 @@ namespace XCharts.Runtime /// |半径的放大倍率。 /// public float radiusRate { get { return m_RadiusRate; } set { m_RadiusRate = value; } } + /// + /// the offset when interaction. Such as the offset of the pie chart when the sector is selected. + /// |交互时的偏移。如饼图的扇形选中时的偏移。 + /// + public float offset { get { return m_Offset; } set { m_Offset = value; } } + + + public float GetRadius(float radius) + { + return radius * radiusRate; + } } } \ No newline at end of file diff --git a/Runtime/Component/Animation/AnimationStyle.cs b/Runtime/Component/Animation/AnimationStyle.cs index 226e5f42..d217c084 100644 --- a/Runtime/Component/Animation/AnimationStyle.cs +++ b/Runtime/Component/Animation/AnimationStyle.cs @@ -538,6 +538,14 @@ namespace XCharts.Runtime return 0; } + public float GetInteractionRadius(float radius){ + + if (m_Enable && m_Interaction.enable) + return m_Interaction.GetRadius(radius); + else + return radius; + } + public bool HasFadeOut() { return enable && m_FadeOut.context.end; diff --git a/Runtime/Component/Interaction/InteractData.cs b/Runtime/Component/Interaction/InteractData.cs index 1333001c..ce388e6a 100644 --- a/Runtime/Component/Interaction/InteractData.cs +++ b/Runtime/Component/Interaction/InteractData.cs @@ -15,6 +15,15 @@ namespace XCharts.Runtime private bool m_ValueEnable = false; internal float targetVaue { get { return m_TargetValue; } } + internal float previousValue { get { return m_PreviousValue; } } + internal bool valueEnable { get { return m_ValueEnable; } } + internal bool updateFlag { get { return m_UpdateFlag; } } + + public override string ToString() + { + return string.Format("m_PreviousValue:{0},m_TargetValue:{1},m_UpdateTime:{2},m_UpdateFlag:{3},m_ValueEnable:{4}", + m_PreviousValue, m_TargetValue, m_UpdateTime, m_UpdateFlag, m_ValueEnable); + } public void SetValue(ref bool needInteract, float size, bool highlight, float rate = 1.3f) { @@ -33,6 +42,10 @@ namespace XCharts.Runtime m_PreviousValue = m_TargetValue; m_TargetValue = size; } + else if (m_UpdateFlag) + { + needInteract = true; + } } public void SetColor(ref bool needInteract, Color32 color) @@ -49,6 +62,10 @@ namespace XCharts.Runtime } m_TargetColor = color; } + else if (m_UpdateFlag) + { + needInteract = true; + } } public void SetColor(ref bool needInteract, Color32 color, Color32 toColor) { @@ -186,6 +203,7 @@ namespace XCharts.Runtime public void Reset() { + Debug.LogError("Reset:"+this); m_UpdateFlag = false; m_ValueEnable = false; m_PreviousValue = float.NaN; diff --git a/Runtime/Component/Label/SerieLabelHelper.cs b/Runtime/Component/Label/SerieLabelHelper.cs index 5d9c5a65..6baf1026 100644 --- a/Runtime/Component/Label/SerieLabelHelper.cs +++ b/Runtime/Component/Label/SerieLabelHelper.cs @@ -161,6 +161,7 @@ namespace XCharts.Runtime } if (!serieData.show) return; var serieLabel = SerieHelper.GetSerieLabel(serie, serieData); + if (serieLabel == null) return; var isOutside = serieLabel.position == LabelStyle.Position.Outside || serieLabel.position == LabelStyle.Position.Default; if (!serieLabel.show) return; @@ -187,11 +188,11 @@ namespace XCharts.Runtime var angle = ChartHelper.GetAngle360(Vector2.up, newPos - serie.context.center); if (angle >= 180 && angle <= 270) { - serieData.context.labelPosition = new Vector3(isLeft?(++lastX): (--lastX), y1); + serieData.context.labelPosition = new Vector3(isLeft ? (++lastX) : (--lastX), y1); } else if (angle < 180 && angle >= 90) { - serieData.context.labelPosition = new Vector3(isLeft?(++lastX): (--lastX), y1); + serieData.context.labelPosition = new Vector3(isLeft ? (++lastX) : (--lastX), y1); } else { diff --git a/Runtime/Internal/XCSettings.cs b/Runtime/Internal/XCSettings.cs index d1617bcc..6d5f7a9e 100644 --- a/Runtime/Internal/XCSettings.cs +++ b/Runtime/Internal/XCSettings.cs @@ -60,8 +60,6 @@ namespace XCharts.Runtime [SerializeField][Range(1f, 20)] protected float m_LineSegmentDistance = 3f; [SerializeField][Range(1, 10)] protected float m_CicleSmoothness = 2f; [SerializeField][Range(10, 50)] protected float m_VisualMapTriangeLen = 20f; - [SerializeField][Range(1, 20)] protected float m_PieTooltipExtraRadius = 8f; - [SerializeField][Range(1, 20)] protected float m_PieSelectedOffset = 8f; [SerializeField] protected List m_CustomThemes = new List(); public static Lang lang { get { return Instance.m_Lang; } } @@ -112,8 +110,6 @@ namespace XCharts.Runtime public static float lineSegmentDistance { get { return Instance.m_LineSegmentDistance; } } public static float cicleSmoothness { get { return Instance.m_CicleSmoothness; } } public static float visualMapTriangeLen { get { return Instance.m_VisualMapTriangeLen; } } - public static float pieTooltipExtraRadius { get { return Instance.m_PieTooltipExtraRadius; } } - public static float pieSelectedOffset { get { return Instance.m_PieSelectedOffset; } } #endregion public static List customThemes { get { return Instance.m_CustomThemes; } } diff --git a/Runtime/Serie/Bar/BarHandler.PolarCoord.cs b/Runtime/Serie/Bar/BarHandler.PolarCoord.cs index af436cca..04688c44 100644 --- a/Runtime/Serie/Bar/BarHandler.PolarCoord.cs +++ b/Runtime/Serie/Bar/BarHandler.PolarCoord.cs @@ -57,7 +57,7 @@ namespace XCharts.Runtime for (int i = 0; i < serie.dataCount; i++) { var serieData = serie.data[i]; - var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize, SerieState.Emphasis); + var size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize, SerieState.Emphasis); serieData.context.highlight = true; serieData.interact.SetValue(ref needInteract, size); } diff --git a/Runtime/Serie/Heatmap/HeatmapHandler.PolarCoord.cs b/Runtime/Serie/Heatmap/HeatmapHandler.PolarCoord.cs index 879e9268..6b225c37 100644 --- a/Runtime/Serie/Heatmap/HeatmapHandler.PolarCoord.cs +++ b/Runtime/Serie/Heatmap/HeatmapHandler.PolarCoord.cs @@ -57,7 +57,7 @@ namespace XCharts.Runtime for (int i = 0; i < serie.dataCount; i++) { var serieData = serie.data[i]; - var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize, SerieState.Emphasis); + var size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize, SerieState.Emphasis); serieData.context.highlight = true; serieData.interact.SetValue(ref needInteract, size); } diff --git a/Runtime/Serie/Heatmap/HeatmapHandler.cs b/Runtime/Serie/Heatmap/HeatmapHandler.cs index a4aefd14..878d4b90 100644 --- a/Runtime/Serie/Heatmap/HeatmapHandler.cs +++ b/Runtime/Serie/Heatmap/HeatmapHandler.cs @@ -284,7 +284,7 @@ namespace XCharts.Runtime } else { - var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, defaultSymbolSize, state); + var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, defaultSymbolSize, state); rectWid = symbolSize; rectHig = symbolSize; } @@ -298,7 +298,7 @@ namespace XCharts.Runtime } else { - var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, defaultSymbolSize, state); + var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, defaultSymbolSize, state); var emptyColor = SerieHelper.GetItemBackgroundColor(serie, serieData, chart.theme, serie.context.colorIndex, state); serieData.context.rect = new Rect(pos.x - symbolSize / 2, pos.y - symbolSize / 2, symbolSize, symbolSize); chart.DrawSymbol(vh, symbol.type, symbolSize, symbolBorder, pos, @@ -398,7 +398,7 @@ namespace XCharts.Runtime } var state = SerieHelper.GetSerieState(serie, null, true); var symbol = SerieHelper.GetSerieSymbol(serie, null, state); - var symbolSize = SerieHelper.GetSysmbolSize(serie, null, chart.theme, defaultSymbolSize, state); + var symbolSize = SerieHelper.GetSysmbolSize(serie, null, defaultSymbolSize, state); var isRectSymbol = symbol.type == SymbolType.Rect; float symbolBorder = 0f; float[] cornerRadius = null; diff --git a/Runtime/Serie/Line/LineHandler.GridCoord.cs b/Runtime/Serie/Line/LineHandler.GridCoord.cs index c4564619..90a569ca 100644 --- a/Runtime/Serie/Line/LineHandler.GridCoord.cs +++ b/Runtime/Serie/Line/LineHandler.GridCoord.cs @@ -65,7 +65,7 @@ namespace XCharts.Runtime for (int i = 0; i < serie.dataCount; i++) { var serieData = serie.data[i]; - var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize, SerieState.Emphasis); + var size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize, SerieState.Emphasis); serieData.context.highlight = true; serieData.interact.SetValue(ref needInteract, size); } @@ -80,7 +80,7 @@ namespace XCharts.Runtime var highlight = i == serie.context.pointerItemDataIndex; serieData.context.highlight = highlight; var state = SerieHelper.GetSerieState(serie, serieData, true); - var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize, state); + var size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize, state); serieData.interact.SetValue(ref needInteract, size); if (highlight) { @@ -99,11 +99,11 @@ namespace XCharts.Runtime { var serieData = serie.data[i]; var dist = Vector3.Distance(chart.pointerPos, serieData.context.position); - var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize); + var size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize); var highlight = dist <= size; serieData.context.highlight = highlight; var state = SerieHelper.GetSerieState(serie, serieData, true); - size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize, state); + size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize, state); serieData.interact.SetValue(ref needInteract, size); if (highlight) { @@ -179,7 +179,7 @@ namespace XCharts.Runtime var symbolSize = 0f; if (!serieData.interact.TryGetValue(ref symbolSize, ref interacting, interactDuration)) { - symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, chart.theme.serie.lineSymbolSize, state); + symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme.serie.lineSymbolSize, state); serieData.interact.SetValue(ref interacting, symbolSize); symbolSize = serie.animation.GetSysmbolSize(symbolSize); } diff --git a/Runtime/Serie/Line/LineHandler.PolarCoord.cs b/Runtime/Serie/Line/LineHandler.PolarCoord.cs index 3567d839..41f0dd34 100644 --- a/Runtime/Serie/Line/LineHandler.PolarCoord.cs +++ b/Runtime/Serie/Line/LineHandler.PolarCoord.cs @@ -57,7 +57,7 @@ namespace XCharts.Runtime for (int i = 0; i < serie.dataCount; i++) { var serieData = serie.data[i]; - var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize, SerieState.Emphasis); + var size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize, SerieState.Emphasis); serieData.context.highlight = true; serieData.interact.SetValue(ref needInteract, size); } @@ -269,7 +269,7 @@ namespace XCharts.Runtime if (!symbol.show || !symbol.ShowSymbol(i, count)) continue; - var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, chart.theme.serie.lineSymbolSize, state); + var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme.serie.lineSymbolSize, state); SerieHelper.GetItemColor(out symbolColor, out symbolToColor, out symbolEmptyColor, serie, serieData, chart.theme, n); SerieHelper.GetSymbolInfo(out borderColor, out symbolBorder, out cornerRadius, serie, null, chart.theme, state); diff --git a/Runtime/Serie/Line/LineHandler.cs b/Runtime/Serie/Line/LineHandler.cs index 6ff1865c..9e4d7698 100644 --- a/Runtime/Serie/Line/LineHandler.cs +++ b/Runtime/Serie/Line/LineHandler.cs @@ -100,7 +100,7 @@ namespace XCharts.Runtime public override int GetPointerItemDataIndex() { - var symbolSize = SerieHelper.GetSysmbolSize(serie, null, chart.theme, chart.theme.serie.lineSymbolSize) * 1.5f; + var symbolSize = SerieHelper.GetSysmbolSize(serie, null, chart.theme.serie.lineSymbolSize) * 1.5f; var count = serie.context.dataPoints.Count; for (int i = 0; i < count; i++) { diff --git a/Runtime/Serie/Line/SimplifiedLineHandler.cs b/Runtime/Serie/Line/SimplifiedLineHandler.cs index 6dc165af..40348d7d 100644 --- a/Runtime/Serie/Line/SimplifiedLineHandler.cs +++ b/Runtime/Serie/Line/SimplifiedLineHandler.cs @@ -76,7 +76,7 @@ namespace XCharts.Runtime for (int i = 0; i < serie.dataCount; i++) { var serieData = serie.data[i]; - var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize, SerieState.Emphasis); + var size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize, SerieState.Emphasis); serieData.context.highlight = true; serieData.interact.SetValue(ref needInteract, size); } @@ -91,7 +91,7 @@ namespace XCharts.Runtime var highlight = i == serie.context.pointerItemDataIndex; serieData.context.highlight = highlight; var state = SerieHelper.GetSerieState(serie, serieData, true); - var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize, state); + var size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize, state); serieData.interact.SetValue(ref needInteract, size); if (highlight) { @@ -109,11 +109,11 @@ namespace XCharts.Runtime { var serieData = serie.data[i]; var dist = Vector3.Distance(chart.pointerPos, serieData.context.position); - var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize); + var size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize); var highlight = dist <= size; serieData.context.highlight = highlight; var state = SerieHelper.GetSerieState(serie, serieData, true); - size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize, state); + size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize, state); serieData.interact.SetValue(ref needInteract, size); if (highlight) { diff --git a/Runtime/Serie/Pie/PieHandler.cs b/Runtime/Serie/Pie/PieHandler.cs index a3207652..91018fc7 100644 --- a/Runtime/Serie/Pie/PieHandler.cs +++ b/Runtime/Serie/Pie/PieHandler.cs @@ -108,19 +108,27 @@ namespace XCharts.Runtime { if (m_LastCheckContextFlag != needCheck) { - m_LastCheckContextFlag = needCheck; serie.context.pointerItemDataIndex = -1; serie.context.pointerEnter = false; + foreach (var serieData in serie.data) { var colorIndex = chart.GetLegendRealShowNameIndex(serieData.legendName); SerieHelper.GetItemColor(out color, out toColor, serie, serieData, chart.theme, colorIndex, SerieState.Normal); + Debug.LogError("end:"+serieData.interact); serieData.context.highlight = false; serieData.interact.SetValueAndColor(ref needInteract, serieData.context.outsideRadius, color, toColor); } - if (needInteract) + if (needInteract){ chart.RefreshPainter(serie); + Debug.LogError("PieHandler update:" + needInteract + "," + m_LastCheckContextFlag + "," + needCheck); + }else{ + m_LastCheckContextFlag = needCheck; + serie.ResetInteract(); + Debug.LogError("PieHandler end:" + needInteract + "," + m_LastCheckContextFlag + "," + needCheck); + } } + return; } m_LastCheckContextFlag = needCheck; @@ -128,32 +136,36 @@ namespace XCharts.Runtime var dataIndex = GetPiePosIndex(serie, chart.pointerPos); serie.context.pointerItemDataIndex = -1; serie.context.pointerEnter = dataIndex >= 0; + + bool isAllZeroValue = SerieHelper.IsAllZeroValue(serie, 1); + var zeroReplaceValue = isAllZeroValue ? 360 / serie.dataCount : 0; + for (int i = 0; i < serie.dataCount; i++) { var serieData = serie.data[i]; + var value = isAllZeroValue ? zeroReplaceValue : serieData.GetCurrData(1, serie.animation); + var state = SerieState.Normal; if (dataIndex == i || (m_LegendEnter && m_LegendEnterIndex == i)) { serie.context.pointerItemDataIndex = i; serieData.context.highlight = true; - - var colorIndex = chart.GetLegendRealShowNameIndex(serieData.legendName); - SerieHelper.GetItemColor(out color, out toColor, serie, serieData, chart.theme, colorIndex, SerieState.Emphasis); - var value = serieData.context.outsideRadius + chart.theme.serie.pieTooltipExtraRadius; - serieData.interact.SetValueAndColor(ref needInteract, value, color, toColor); + state = SerieState.Emphasis; } else { serieData.context.highlight = false; - var colorIndex = chart.GetLegendRealShowNameIndex(serieData.legendName); - SerieHelper.GetItemColor(out color, out toColor, serie, serieData, chart.theme, colorIndex, SerieState.Normal); - serieData.interact.SetValueAndColor(ref needInteract, serieData.context.outsideRadius, color, toColor); } + UpdateSerieDataRadius(serieData, value); + var colorIndex = chart.GetLegendRealShowNameIndex(serieData.legendName); + SerieHelper.GetItemColor(out color, out toColor, serie, serieData, chart.theme, colorIndex, state); + serieData.interact.SetValueAndColor(ref needInteract, serieData.context.outsideRadius, color, toColor); + } if (lastPointerItemDataIndex != serie.context.pointerItemDataIndex) { needInteract = true; } - if (needInteract) + //if (needInteract) { chart.RefreshPainter(serie); } @@ -207,20 +219,11 @@ namespace XCharts.Runtime (float)(totalDegree * value / dataTotalFilterMinAngle); if (serie.minAngle > 0 && degree < serie.minAngle) degree = serie.minAngle; serieData.context.toAngle = startDegree + degree; - if (serieData.radius > 0) - serieData.context.outsideRadius = ChartHelper.GetActualValue(serieData.radius, Mathf.Min(chart.chartWidth, chart.chartHeight)); - else - serieData.context.outsideRadius = serie.pieRoseType > 0 ? - serie.context.insideRadius + (float)((serie.context.outsideRadius - serie.context.insideRadius) * value / serie.context.dataMax) : - serie.context.outsideRadius; - if (serieData.context.highlight) - { - serieData.context.outsideRadius += chart.theme.serie.pieTooltipExtraRadius; - } + UpdateSerieDataRadius(serieData, value); var offset = 0f; if (serie.pieClickOffset && (serieData.selected || serieData.context.selected)) { - offset += chart.theme.serie.pieSelectedOffset; + offset += serie.animation.interaction.offset; } if (serie.animation.CheckDetailBreak(serieData.context.toAngle)) { @@ -247,12 +250,12 @@ namespace XCharts.Runtime serieData.context.outsideRadius -= serieData.context.offsetRadius; if (serie.pieClickOffset && (serieData.selected || serieData.context.selected)) { - serieData.context.offsetRadius += chart.theme.serie.pieSelectedOffset; + serieData.context.offsetRadius += serie.animation.interaction.offset; if (serieData.context.insideRadius > 0) { - serieData.context.insideRadius += chart.theme.serie.pieSelectedOffset; + serieData.context.insideRadius += serie.animation.interaction.offset; } - serieData.context.outsideRadius += chart.theme.serie.pieSelectedOffset; + serieData.context.outsideRadius += serie.animation.interaction.offset; } serieData.context.offsetCenter = new Vector3( serie.context.center.x + serieData.context.offsetRadius * currSin, @@ -265,6 +268,20 @@ namespace XCharts.Runtime SerieLabelHelper.AvoidLabelOverlap(serie, chart.theme.common); } + private void UpdateSerieDataRadius(SerieData serieData, double value) + { + if (serieData.radius > 0) + serieData.context.outsideRadius = ChartHelper.GetActualValue(serieData.radius, Mathf.Min(chart.chartWidth, chart.chartHeight)); + else + serieData.context.outsideRadius = serie.pieRoseType > 0 ? + serie.context.insideRadius + (float)((serie.context.outsideRadius - serie.context.insideRadius) * value / serie.context.dataMax) : + serie.context.outsideRadius; + if (serieData.context.highlight) + { + serieData.context.outsideRadius = serie.animation.GetInteractionRadius(serieData.context.outsideRadius); + } + } + private double GetTotalAngle(Serie serie, double dataTotal, ref float totalAngle) { totalAngle = serie.context.startAngle + 360f; @@ -308,6 +325,7 @@ namespace XCharts.Runtime var interacting = false; var color = ColorUtil.clearColor32; var toColor = ColorUtil.clearColor32; + var interactDuration = serie.animation.GetInteractionDuration(); var data = serie.data; serie.animation.InitProgress(0, 360); for (int n = 0; n < data.Count; n++) @@ -330,13 +348,12 @@ namespace XCharts.Runtime var progress = AnimationStyleHelper.CheckDataAnimation(chart, serie, n, 1); var insideRadius = serieData.context.insideRadius * progress; - //if (!serieData.interact.TryGetValueAndColor(ref outsideRadius, ref color, ref toColor, ref interacting)) + if (!serieData.interact.TryGetValueAndColor(ref outsideRadius, ref color, ref toColor, ref interacting, interactDuration)) { SerieHelper.GetItemColor(out color, out toColor, serie, serieData, chart.theme, colorIndex); outsideRadius = serieData.context.outsideRadius * progress; serieData.interact.SetValueAndColor(ref interacting, outsideRadius, color, toColor); } - if (serie.pieClickOffset && (serieData.selected || serieData.context.selected)) { var drawEndDegree = serieData.context.currentAngle; @@ -514,7 +531,7 @@ namespace XCharts.Runtime return -1; var dist = Vector2.Distance(local, serie.context.center); - var maxRadius = serie.context.outsideRadius + 3 * chart.theme.serie.pieSelectedOffset; + var maxRadius = serie.context.outsideRadius + 3 * serie.animation.interaction.offset; if (dist < serie.context.insideRadius || dist > maxRadius) return -1; diff --git a/Runtime/Serie/Radar/RadarHandler.cs b/Runtime/Serie/Radar/RadarHandler.cs index 97158704..4710a1e0 100644 --- a/Runtime/Serie/Radar/RadarHandler.cs +++ b/Runtime/Serie/Radar/RadarHandler.cs @@ -173,7 +173,7 @@ namespace XCharts.Runtime for (int i = 0; i < serie.data.Count; i++) { var serieData = serie.data[i]; - var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize); + var size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize); if (Vector3.Distance(chart.pointerPos, serieData.context.position) < size * 2) { serie.context.pointerEnter = true; @@ -334,7 +334,7 @@ namespace XCharts.Runtime var symbolSize = 0f; if (!serieData.interact.TryGetValue(ref symbolSize, ref interacting, interactDuration)) { - symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, chart.theme.serie.lineSymbolSize, serieState); + symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme.serie.lineSymbolSize, serieState); serieData.interact.SetValue(ref interacting, symbolSize); symbolSize = serie.animation.GetSysmbolSize(symbolSize); } @@ -481,7 +481,7 @@ namespace XCharts.Runtime var serieData = serie.data[j]; if (!serieData.show) continue; var state = SerieHelper.GetSerieState(serie, serieData); - var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, chart.theme.serie.lineSymbolSize, state); + var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme.serie.lineSymbolSize, state); var colorIndex = serie.colorByData ? serieData.index : serie.context.colorIndex; SerieHelper.GetItemColor(out symbolColor, out symbolToColor, out symbolEmptyColor, serie, serieData, chart.theme, colorIndex, state); SerieHelper.GetSymbolInfo(out borderColor, out symbolBorder, out cornerRadius, serie, serieData, chart.theme, state); diff --git a/Runtime/Serie/Scatter/BaseScatterHandler.cs b/Runtime/Serie/Scatter/BaseScatterHandler.cs index c56db250..bf611e31 100644 --- a/Runtime/Serie/Scatter/BaseScatterHandler.cs +++ b/Runtime/Serie/Scatter/BaseScatterHandler.cs @@ -81,7 +81,7 @@ namespace XCharts.Runtime for (int i = serie.dataCount - 1; i >= 0; i--) { var serieData = serie.data[i]; - var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize); + var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize); if (m_LegendEnter || (!needHideAll && Vector3.Distance(serieData.context.position, chart.pointerPos) <= symbolSize)) { @@ -94,7 +94,7 @@ namespace XCharts.Runtime serieData.context.highlight = false; } var state = SerieHelper.GetSerieState(serie, serieData, true); - symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize, state); + symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize, state); serieData.interact.SetValue(ref needInteract, symbolSize); } if (needInteract) @@ -179,7 +179,7 @@ namespace XCharts.Runtime var symbolSize = 0f; if (!serieData.interact.TryGetValue(ref symbolSize, ref interacting, interactDuration)) { - symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, chart.theme.serie.scatterSymbolSize, state); + symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme.serie.scatterSymbolSize, state); serieData.interact.SetValue(ref interacting, symbolSize); } @@ -283,7 +283,7 @@ namespace XCharts.Runtime serieData.context.position = pos; var datas = serieData.data; - var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, chart.theme.serie.scatterSymbolSize, state); + var symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme.serie.scatterSymbolSize, state); symbolSize *= rate; if (isEffectScatter) diff --git a/Runtime/Serie/SerieHelper.cs b/Runtime/Serie/SerieHelper.cs index 50ea076b..9c351243 100644 --- a/Runtime/Serie/SerieHelper.cs +++ b/Runtime/Serie/SerieHelper.cs @@ -673,7 +673,7 @@ namespace XCharts.Runtime } } - public static float GetSysmbolSize(Serie serie, SerieData serieData, ThemeStyle theme, float defaultSize, SerieState state = SerieState.Auto) + public static float GetSysmbolSize(Serie serie, SerieData serieData, float defaultSize, SerieState state = SerieState.Auto) { if (serie == null) return defaultSize; if (state == SerieState.Auto) diff --git a/Runtime/Theme/SerieTheme.cs b/Runtime/Theme/SerieTheme.cs index a6e6f478..e41f052a 100644 --- a/Runtime/Theme/SerieTheme.cs +++ b/Runtime/Theme/SerieTheme.cs @@ -9,8 +9,6 @@ namespace XCharts.Runtime [SerializeField] protected float m_LineWidth; [SerializeField] protected float m_LineSymbolSize; [SerializeField] protected float m_ScatterSymbolSize; - [SerializeField] protected float m_PieTooltipExtraRadius; - [SerializeField] protected float m_PieSelectedOffset; [SerializeField] protected Color32 m_CandlestickColor = new Color32(235, 84, 84, 255); [SerializeField] protected Color32 m_CandlestickColor0 = new Color32(71, 178, 98, 255); [SerializeField] protected float m_CandlestickBorderWidth = 1; @@ -45,24 +43,6 @@ namespace XCharts.Runtime set { if (PropertyUtil.SetStruct(ref m_ScatterSymbolSize, value)) SetVerticesDirty(); } } /// - /// the extra radius of pie when actived by tooltip. - /// |饼图鼠标移到高亮时的额外半径 - /// - public float pieTooltipExtraRadius - { - get { return m_PieTooltipExtraRadius; } - set { if (PropertyUtil.SetStruct(ref m_PieTooltipExtraRadius, value < 0 ? 0f : value)) SetVerticesDirty(); } - } - /// - /// the center offset of pie if selected. - /// |饼图选中时的中心点偏移。 - /// - public float pieSelectedOffset - { - get { return m_PieSelectedOffset; } - set { if (PropertyUtil.SetStruct(ref m_PieSelectedOffset, value < 0 ? 0f : value)) SetVerticesDirty(); } - } - /// /// K线图阳线(涨)填充色 /// public Color32 candlestickColor @@ -109,8 +89,6 @@ namespace XCharts.Runtime m_LineWidth = theme.lineWidth; m_LineSymbolSize = theme.lineSymbolSize; m_ScatterSymbolSize = theme.scatterSymbolSize; - m_PieTooltipExtraRadius = theme.pieTooltipExtraRadius; - m_PieSelectedOffset = theme.pieSelectedOffset; m_CandlestickColor = theme.candlestickColor; m_CandlestickColor0 = theme.candlestickColor0; m_CandlestickBorderColor = theme.candlestickBorderColor; @@ -123,8 +101,6 @@ namespace XCharts.Runtime m_LineWidth = XCSettings.serieLineWidth; m_LineSymbolSize = XCSettings.serieLineSymbolSize; m_ScatterSymbolSize = XCSettings.serieScatterSymbolSize; - m_PieTooltipExtraRadius = XCSettings.pieTooltipExtraRadius; - m_PieSelectedOffset = XCSettings.pieSelectedOffset; m_CandlestickBorderWidth = XCSettings.serieCandlestickBorderWidth; switch (theme) {