From 9d8dc804941bc65040529f2d07fc2bf09174a9a5 Mon Sep 17 00:00:00 2001 From: monitor1394 Date: Fri, 10 Dec 2021 13:22:00 +0800 Subject: [PATCH] Improved radarchart --- Assets/XCharts/CHANGELOG-EN.md | 1 + Assets/XCharts/CHANGELOG.md | 1 + .../Runtime/Internal/DrawSerieRadar.cs | 45 ++++++++----------- 3 files changed, 20 insertions(+), 27 deletions(-) diff --git a/Assets/XCharts/CHANGELOG-EN.md b/Assets/XCharts/CHANGELOG-EN.md index ed8142e2..21d43a9c 100644 --- a/Assets/XCharts/CHANGELOG-EN.md +++ b/Assets/XCharts/CHANGELOG-EN.md @@ -41,6 +41,7 @@ ## branch-2.0 +* (2021.12.10) Improved `Radar`'s `AxisLine` and `SplitLine` to be controlled separately * (2021.12.08) Fixed y axis does not refresh when serie hidden * (2021.12.04) Added `Symbol` new types: `EmptyRect`, `EmptyTriangle`, `EmptyDiamond` * (2021.12.04) Added setting symbol empty area color by itemStyle's backgroundColor diff --git a/Assets/XCharts/CHANGELOG.md b/Assets/XCharts/CHANGELOG.md index 67c4578a..e38c7a4f 100644 --- a/Assets/XCharts/CHANGELOG.md +++ b/Assets/XCharts/CHANGELOG.md @@ -41,6 +41,7 @@ ## branch-2.0 +* (2021.12.10) 完善`Radar`的`AxisLine`和`SplitLine`可单独控制 * (2021.12.08) 修复`Serie`隐藏后`Y`轴最大值不刷新的问题 * (2021.12.04) 增加`Symbol`新类型:`EmptyRect`,`EmptyTriangle`,`EmptyDiamond` * (2021.12.04) 增加`Symbol`的`Empty`区域颜色可通过`ItemStyle`的`backgroundColor`设置的支持 diff --git a/Assets/XCharts/Runtime/Internal/DrawSerieRadar.cs b/Assets/XCharts/Runtime/Internal/DrawSerieRadar.cs index 8c631189..5e20a9f4 100644 --- a/Assets/XCharts/Runtime/Internal/DrawSerieRadar.cs +++ b/Assets/XCharts/Runtime/Internal/DrawSerieRadar.cs @@ -634,10 +634,6 @@ namespace XCharts private void DrawRadar(VertexHelper vh, Radar radar) { - if (!radar.splitLine.show && !radar.splitArea.show) - { - return; - } float insideRadius = 0, outsideRadius = 0; float block = radar.runtimeRadius / radar.splitNumber; int indicatorNum = radar.indicatorList.Count; @@ -652,7 +648,6 @@ namespace XCharts var splitLineType = radar.splitLine.GetType(chart.theme.radar.splitLineType); for (int i = 0; i < radar.splitNumber; i++) { - var isLast = i == radar.splitNumber - 1; var color = radar.splitArea.GetColor(i, chart.theme.radar); outsideRadius = insideRadius + block; p1 = new Vector3(p.x + insideRadius * Mathf.Sin(0), p.y + insideRadius * Mathf.Cos(0)); @@ -670,34 +665,27 @@ namespace XCharts } if (radar.splitLine.NeedShow(i)) { - if (isLast) - ChartDrawer.DrawLineStyle(vh, lineType, lineWidth, p2, p3, lineColor); - else - ChartDrawer.DrawLineStyle(vh, splitLineType, splitLineWidth, p2, p3, splitLineColor); + ChartDrawer.DrawLineStyle(vh, splitLineType, splitLineWidth, p2, p3, splitLineColor); } p1 = p4; p2 = p3; } insideRadius = outsideRadius; } - for (int j = 0; j <= indicatorNum; j++) + if (radar.axisLine.show) { - float currAngle = j * angle; - p3 = new Vector3(p.x + outsideRadius * Mathf.Sin(currAngle), - p.y + outsideRadius * Mathf.Cos(currAngle)); - if (radar.splitLine.show) + for (int j = 0; j <= indicatorNum; j++) { - ChartDrawer.DrawLineStyle(vh, splitLineType, splitLineWidth, p, p3, splitLineColor); + float currAngle = j * angle; + p3 = new Vector3(p.x + outsideRadius * Mathf.Sin(currAngle), + p.y + outsideRadius * Mathf.Cos(currAngle)); + ChartDrawer.DrawLineStyle(vh, lineType, lineWidth, p, p3, lineColor); } } } private void DrawCricleRadar(VertexHelper vh, Radar radar) { - if (!radar.splitLine.show && !radar.splitArea.show) - { - return; - } float insideRadius = 0, outsideRadius = 0; float block = radar.runtimeRadius / radar.splitNumber; int indicatorNum = radar.indicatorList.Count; @@ -705,7 +693,10 @@ namespace XCharts Vector3 p1; float angle = 2 * Mathf.PI / indicatorNum; var lineColor = radar.axisLine.GetColor(chart.theme.radar.lineColor); - var lineWidth = radar.splitLine.GetWidth(chart.theme.radar.splitLineWidth); + var lineWidth = radar.axisLine.GetWidth(chart.theme.radar.lineWidth); + var lineType = radar.axisLine.GetType(chart.theme.radar.lineType); + var splitLineColor = radar.splitLine.GetColor(chart.theme.radar.splitLineColor); + var splitLineWidth = radar.splitLine.GetWidth(chart.theme.radar.splitLineWidth); for (int i = 0; i < radar.splitNumber; i++) { var color = radar.splitArea.GetColor(i, chart.theme.radiusAxis); @@ -717,19 +708,19 @@ namespace XCharts } if (radar.splitLine.show) { - UGL.DrawEmptyCricle(vh, p, outsideRadius, lineWidth, lineColor, + UGL.DrawEmptyCricle(vh, p, outsideRadius, splitLineWidth, splitLineColor, Color.clear, chart.settings.cicleSmoothness); } insideRadius = outsideRadius; } - for (int j = 0; j <= indicatorNum; j++) + if (radar.axisLine.show) { - float currAngle = j * angle; - p1 = new Vector3(p.x + outsideRadius * Mathf.Sin(currAngle), - p.y + outsideRadius * Mathf.Cos(currAngle)); - if (radar.splitLine.show) + for (int j = 0; j <= indicatorNum; j++) { - UGL.DrawLine(vh, p, p1, lineWidth / 2, lineColor); + float currAngle = j * angle; + p1 = new Vector3(p.x + outsideRadius * Mathf.Sin(currAngle), + p.y + outsideRadius * Mathf.Cos(currAngle)); + ChartDrawer.DrawLineStyle(vh, lineType, lineWidth, p, p1, lineColor); } } }