From 43de03951cf1260bdd049b91e19543b14d32eaf7 Mon Sep 17 00:00:00 2001 From: monitor1394 Date: Sat, 28 Dec 2024 21:03:17 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0`SymbolStyle`=E7=9A=84`size2`?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E6=94=AF=E6=8C=81=E9=95=BF=E6=96=B9=E5=BD=A2?= =?UTF-8?q?=E6=A0=87=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Documentation~/zh/changelog.md | 1 + Editor/ChildComponents/SymbolStyleDrawer.cs | 1 + Runtime/Component/Child/SymbolStyle.cs | 11 +++++++++ Runtime/Internal/BaseChart.Draw.cs | 12 ++++----- Runtime/Internal/Utilities/ChartDrawer.cs | 26 +++++++++++++------- Runtime/Serie/Heatmap/HeatmapHandler.cs | 4 +-- Runtime/Serie/Line/LineHandler.PolarCoord.cs | 2 +- Runtime/Serie/Radar/RadarHandler.cs | 4 +-- Runtime/Serie/SerieHandler.cs | 2 +- 9 files changed, 42 insertions(+), 21 deletions(-) diff --git a/Documentation~/zh/changelog.md b/Documentation~/zh/changelog.md index 09b7e64c..5cd3957a 100644 --- a/Documentation~/zh/changelog.md +++ b/Documentation~/zh/changelog.md @@ -78,6 +78,7 @@ slug: /changelog ## master +* (2024.12.27) 增加`SymbolStyle`的`size2`参数支持长方形标记 * (2024.12.26) 优化`Text`在`TextMeshPro`下的居中对齐方式 * (2024.12.25) 增加`Tooltip`的`itemFormatter`设置`{f0}`支持 * (2024.12.25) 修复`YAxis`在范围变更刷新时部分label可能不显示的问题 diff --git a/Editor/ChildComponents/SymbolStyleDrawer.cs b/Editor/ChildComponents/SymbolStyleDrawer.cs index 5ce9f31b..0ea89711 100644 --- a/Editor/ChildComponents/SymbolStyleDrawer.cs +++ b/Editor/ChildComponents/SymbolStyleDrawer.cs @@ -27,6 +27,7 @@ namespace XCharts.Editor } PropertyField(prop, "m_Color"); PropertyField(prop, "m_Size"); + PropertyField(prop, "m_Size2"); PropertyField(prop, "m_Gap"); PropertyField(prop, "m_BorderWidth"); PropertyField(prop, "m_EmptyColor"); diff --git a/Runtime/Component/Child/SymbolStyle.cs b/Runtime/Component/Child/SymbolStyle.cs index cdfa275a..54e7a63f 100644 --- a/Runtime/Component/Child/SymbolStyle.cs +++ b/Runtime/Component/Child/SymbolStyle.cs @@ -86,12 +86,14 @@ namespace XCharts.Runtime [SerializeField] protected Color32 m_Color; [SerializeField][Since("v3.13.0")] protected float m_BorderWidth = 0f; [SerializeField][Since("v3.13.0")] protected Color32 m_EmptyColor; + [SerializeField][Since("v3.13.0")] protected float m_Size2 = 0f; public virtual void Reset() { m_Show = false; m_Type = SymbolType.EmptyCircle; m_Size = 0f; + m_Size2 = 0f; m_Gap = 0; m_Width = 0f; m_Height = 0f; @@ -128,6 +130,15 @@ namespace XCharts.Runtime set { if (PropertyUtil.SetStruct(ref m_Size, value)) SetVerticesDirty(); } } /// + /// the size of symbol. + /// ||标记的大小。当为Rect时,size2表示高度。 + /// + public float size2 + { + get { return m_Size2; } + set { if (PropertyUtil.SetStruct(ref m_Size2, value)) SetVerticesDirty(); } + } + /// /// the gap of symbol and line segment. /// ||图形标记和线条的间隙距离。 /// diff --git a/Runtime/Internal/BaseChart.Draw.cs b/Runtime/Internal/BaseChart.Draw.cs index c9f2247b..aef62386 100644 --- a/Runtime/Internal/BaseChart.Draw.cs +++ b/Runtime/Internal/BaseChart.Draw.cs @@ -83,12 +83,12 @@ namespace XCharts.Runtime public void DrawClipSymbol(VertexHelper vh, SymbolType type, float symbolSize, float tickness, Vector3 pos, Color32 color, Color32 toColor, Color32 emptyColor, Color32 borderColor, float gap, - bool clip, float[] cornerRadius, GridCoord grid, Vector3 startPos) + bool clip, float[] cornerRadius, GridCoord grid, Vector3 startPos, float symbolSize2 = 0) { if (!IsInChart(pos)) return; if (!clip || (clip && (grid.Contains(pos)))) DrawSymbol(vh, type, symbolSize, tickness, pos, color, toColor, emptyColor, borderColor, - gap, cornerRadius, startPos); + gap, cornerRadius, startPos, symbolSize2); } public void DrawClipZebraLine(VertexHelper vh, Vector3 p1, Vector3 p2, float size, float zebraWidth, @@ -101,22 +101,22 @@ namespace XCharts.Runtime public void DrawSymbol(VertexHelper vh, SymbolType type, float symbolSize, float tickness, Vector3 pos, Color32 color, Color32 toColor, Color32 emptyColor, Color32 borderColor, - float gap, float[] cornerRadius) + float gap, float[] cornerRadius, float symbolSize2 = 0) { DrawSymbol(vh, type, symbolSize, tickness, pos, color, toColor, emptyColor, borderColor, - gap, cornerRadius, Vector3.zero); + gap, cornerRadius, Vector3.zero, symbolSize2); } public void DrawSymbol(VertexHelper vh, SymbolType type, float symbolSize, float tickness, Vector3 pos, Color32 color, Color32 toColor, Color32 emptyColor, Color32 borderColor, - float gap, float[] cornerRadius, Vector3 startPos) + float gap, float[] cornerRadius, Vector3 startPos, float symbolSize2 = 0) { var backgroundColor = GetChartBackgroundColor(); if (ChartHelper.IsClearColor(emptyColor)) emptyColor = backgroundColor; var smoothness = settings.cicleSmoothness; ChartDrawer.DrawSymbol(vh, type, symbolSize, tickness, pos, color, toColor, gap, - cornerRadius, emptyColor, backgroundColor, borderColor, smoothness, startPos); + cornerRadius, emptyColor, backgroundColor, borderColor, smoothness, startPos, symbolSize2); } public Color32 GetXLerpColor(Color32 areaColor, Color32 areaToColor, Vector3 pos, GridCoord grid) diff --git a/Runtime/Internal/Utilities/ChartDrawer.cs b/Runtime/Internal/Utilities/ChartDrawer.cs index a57ea361..baffa0f3 100644 --- a/Runtime/Internal/Utilities/ChartDrawer.cs +++ b/Runtime/Internal/Utilities/ChartDrawer.cs @@ -9,7 +9,8 @@ namespace XCharts.Runtime { public static void DrawSymbol(VertexHelper vh, SymbolType type, float symbolSize, float tickness, Vector3 pos, Color32 color, Color32 toColor, float gap, float[] cornerRadius, - Color32 emptyColor, Color32 backgroundColor, Color32 borderColor, float smoothness, Vector3 startPos) + Color32 emptyColor, Color32 backgroundColor, Color32 borderColor, float smoothness, + Vector3 startPos, float symbolSize2 = 0f) { switch (type) { @@ -41,24 +42,31 @@ namespace XCharts.Runtime } break; case SymbolType.Rect: - if (gap > 0) + if (symbolSize2 > 0 && symbolSize2 != symbolSize) { - UGL.DrawSquare(vh, pos, symbolSize + gap, backgroundColor); - UGL.DrawSquare(vh, pos, symbolSize, color, toColor); + UGL.DrawRectangle(vh, pos, symbolSize, symbolSize2, color, toColor); } else { - if (tickness > 0) + if (gap > 0) { - UGL.DrawRoundRectangle(vh, pos, symbolSize * 2, symbolSize * 2, color, color, 0, cornerRadius, true); - UGL.DrawBorder(vh, pos, symbolSize, symbolSize, tickness, borderColor, 0, cornerRadius); + UGL.DrawSquare(vh, pos, symbolSize + gap, backgroundColor); + UGL.DrawSquare(vh, pos, symbolSize, color, toColor); } else - UGL.DrawRoundRectangle(vh, pos, symbolSize * 2, symbolSize * 2, color, color, 0, cornerRadius, true); + { + if (tickness > 0) + { + UGL.DrawRoundRectangle(vh, pos, symbolSize * 2, symbolSize * 2, color, color, 0, cornerRadius, true); + UGL.DrawBorder(vh, pos, symbolSize, symbolSize, tickness, borderColor, 0, cornerRadius); + } + else + UGL.DrawRoundRectangle(vh, pos, symbolSize * 2, symbolSize * 2, color, color, 0, cornerRadius, true); + } } break; case SymbolType.EmptyRect: - if (tickness == 0) tickness = 4f; + if (tickness == 0) tickness = 4f; if (gap > 0) { UGL.DrawSquare(vh, pos, symbolSize + gap, backgroundColor); diff --git a/Runtime/Serie/Heatmap/HeatmapHandler.cs b/Runtime/Serie/Heatmap/HeatmapHandler.cs index 4bb2c784..45554e43 100644 --- a/Runtime/Serie/Heatmap/HeatmapHandler.cs +++ b/Runtime/Serie/Heatmap/HeatmapHandler.cs @@ -303,7 +303,7 @@ namespace XCharts.Runtime 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, - color, color, emptyColor, borderColor, symbol.gap, cornerRadius); + color, color, emptyColor, borderColor, symbol.gap, cornerRadius, symbol.size2); } if (visualMap.hoverLink && highlight && emphasisStyle != null && @@ -461,7 +461,7 @@ namespace XCharts.Runtime else { chart.DrawSymbol(vh, symbol.type, symbolSize, symbolBorder, pos, - color, color, emptyColor, borderColor, symbol.gap, cornerRadius); + color, color, emptyColor, borderColor, symbol.gap, cornerRadius, symbol.size2); } if (visualMap.hoverLink && highlight && emphasisStyle != null && diff --git a/Runtime/Serie/Line/LineHandler.PolarCoord.cs b/Runtime/Serie/Line/LineHandler.PolarCoord.cs index e6e8b9cd..5a014c06 100644 --- a/Runtime/Serie/Line/LineHandler.PolarCoord.cs +++ b/Runtime/Serie/Line/LineHandler.PolarCoord.cs @@ -275,7 +275,7 @@ namespace XCharts.Runtime symbolSize = serie.animation.GetSysmbolSize(symbolSize); chart.DrawSymbol(vh, symbol.type, symbolSize, symbolBorder, serieData.context.position, - symbolColor, symbolToColor, symbolEmptyColor, borderColor, symbol.gap, cornerRadius); + symbolColor, symbolToColor, symbolEmptyColor, borderColor, symbol.gap, cornerRadius, symbol.size2); } } } diff --git a/Runtime/Serie/Radar/RadarHandler.cs b/Runtime/Serie/Radar/RadarHandler.cs index fbd56eb4..9d97512b 100644 --- a/Runtime/Serie/Radar/RadarHandler.cs +++ b/Runtime/Serie/Radar/RadarHandler.cs @@ -345,7 +345,7 @@ namespace XCharts.Runtime SerieHelper.GetItemColor(out symbolColor, out symbolToColor, out symbolEmptyColor, serie, serieData, chart.theme, colorIndex, serieState); SerieHelper.GetSymbolInfo(out borderColor, out symbolBorder, out cornerRadius, serie, serieData, chart.theme, serieState); chart.DrawSymbol(vh, symbol.type, symbolSize, symbolBorder, point, symbolColor, - symbolToColor, symbolEmptyColor, borderColor, symbol.gap, cornerRadius); + symbolToColor, symbolEmptyColor, borderColor, symbol.gap, cornerRadius, symbol.size2); } } } @@ -495,7 +495,7 @@ namespace XCharts.Runtime symbolToColor = m_RadarCoord.outRangeColor; } chart.DrawSymbol(vh, serie.symbol.type, symbolSize, symbolBorder, serieData.context.labelPosition, symbolColor, - symbolToColor, symbolEmptyColor, borderColor, serie.symbol.gap, cornerRadius); + symbolToColor, symbolEmptyColor, borderColor, serie.symbol.gap, cornerRadius, serie.symbol.size2); } } if (!serie.animation.IsFinish()) diff --git a/Runtime/Serie/SerieHandler.cs b/Runtime/Serie/SerieHandler.cs index b24f4e22..7c576fb2 100644 --- a/Runtime/Serie/SerieHandler.cs +++ b/Runtime/Serie/SerieHandler.cs @@ -762,7 +762,7 @@ namespace XCharts.Runtime { var color = symbol.GetColor(defaultColor); chart.DrawSymbol(vh, symbol.type, symbol.size, 1, pos, - color, color, ColorUtil.clearColor32, color, symbol.gap, null); + color, color, ColorUtil.clearColor32, color, symbol.gap, null, symbol.size2); } public override void OnPointerDown(PointerEventData eventData)