mirror of
https://github.com/XCharts-Team/XCharts.git
synced 2026-05-25 18:30:14 +00:00
Improved radarchart
This commit is contained in:
@@ -41,6 +41,7 @@
|
|||||||
|
|
||||||
## branch-2.0
|
## 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.08) Fixed y axis does not refresh when serie hidden
|
||||||
* (2021.12.04) Added `Symbol` new types: `EmptyRect`, `EmptyTriangle`, `EmptyDiamond`
|
* (2021.12.04) Added `Symbol` new types: `EmptyRect`, `EmptyTriangle`, `EmptyDiamond`
|
||||||
* (2021.12.04) Added setting symbol empty area color by itemStyle's backgroundColor
|
* (2021.12.04) Added setting symbol empty area color by itemStyle's backgroundColor
|
||||||
|
|||||||
@@ -41,6 +41,7 @@
|
|||||||
|
|
||||||
## branch-2.0
|
## branch-2.0
|
||||||
|
|
||||||
|
* (2021.12.10) 完善`Radar`的`AxisLine`和`SplitLine`可单独控制
|
||||||
* (2021.12.08) 修复`Serie`隐藏后`Y`轴最大值不刷新的问题
|
* (2021.12.08) 修复`Serie`隐藏后`Y`轴最大值不刷新的问题
|
||||||
* (2021.12.04) 增加`Symbol`新类型:`EmptyRect`,`EmptyTriangle`,`EmptyDiamond`
|
* (2021.12.04) 增加`Symbol`新类型:`EmptyRect`,`EmptyTriangle`,`EmptyDiamond`
|
||||||
* (2021.12.04) 增加`Symbol`的`Empty`区域颜色可通过`ItemStyle`的`backgroundColor`设置的支持
|
* (2021.12.04) 增加`Symbol`的`Empty`区域颜色可通过`ItemStyle`的`backgroundColor`设置的支持
|
||||||
|
|||||||
@@ -634,10 +634,6 @@ namespace XCharts
|
|||||||
|
|
||||||
private void DrawRadar(VertexHelper vh, Radar radar)
|
private void DrawRadar(VertexHelper vh, Radar radar)
|
||||||
{
|
{
|
||||||
if (!radar.splitLine.show && !radar.splitArea.show)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
float insideRadius = 0, outsideRadius = 0;
|
float insideRadius = 0, outsideRadius = 0;
|
||||||
float block = radar.runtimeRadius / radar.splitNumber;
|
float block = radar.runtimeRadius / radar.splitNumber;
|
||||||
int indicatorNum = radar.indicatorList.Count;
|
int indicatorNum = radar.indicatorList.Count;
|
||||||
@@ -652,7 +648,6 @@ namespace XCharts
|
|||||||
var splitLineType = radar.splitLine.GetType(chart.theme.radar.splitLineType);
|
var splitLineType = radar.splitLine.GetType(chart.theme.radar.splitLineType);
|
||||||
for (int i = 0; i < radar.splitNumber; i++)
|
for (int i = 0; i < radar.splitNumber; i++)
|
||||||
{
|
{
|
||||||
var isLast = i == radar.splitNumber - 1;
|
|
||||||
var color = radar.splitArea.GetColor(i, chart.theme.radar);
|
var color = radar.splitArea.GetColor(i, chart.theme.radar);
|
||||||
outsideRadius = insideRadius + block;
|
outsideRadius = insideRadius + block;
|
||||||
p1 = new Vector3(p.x + insideRadius * Mathf.Sin(0), p.y + insideRadius * Mathf.Cos(0));
|
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 (radar.splitLine.NeedShow(i))
|
||||||
{
|
{
|
||||||
if (isLast)
|
ChartDrawer.DrawLineStyle(vh, splitLineType, splitLineWidth, p2, p3, splitLineColor);
|
||||||
ChartDrawer.DrawLineStyle(vh, lineType, lineWidth, p2, p3, lineColor);
|
|
||||||
else
|
|
||||||
ChartDrawer.DrawLineStyle(vh, splitLineType, splitLineWidth, p2, p3, splitLineColor);
|
|
||||||
}
|
}
|
||||||
p1 = p4;
|
p1 = p4;
|
||||||
p2 = p3;
|
p2 = p3;
|
||||||
}
|
}
|
||||||
insideRadius = outsideRadius;
|
insideRadius = outsideRadius;
|
||||||
}
|
}
|
||||||
for (int j = 0; j <= indicatorNum; j++)
|
if (radar.axisLine.show)
|
||||||
{
|
{
|
||||||
float currAngle = j * angle;
|
for (int j = 0; j <= indicatorNum; j++)
|
||||||
p3 = new Vector3(p.x + outsideRadius * Mathf.Sin(currAngle),
|
|
||||||
p.y + outsideRadius * Mathf.Cos(currAngle));
|
|
||||||
if (radar.splitLine.show)
|
|
||||||
{
|
{
|
||||||
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)
|
private void DrawCricleRadar(VertexHelper vh, Radar radar)
|
||||||
{
|
{
|
||||||
if (!radar.splitLine.show && !radar.splitArea.show)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
float insideRadius = 0, outsideRadius = 0;
|
float insideRadius = 0, outsideRadius = 0;
|
||||||
float block = radar.runtimeRadius / radar.splitNumber;
|
float block = radar.runtimeRadius / radar.splitNumber;
|
||||||
int indicatorNum = radar.indicatorList.Count;
|
int indicatorNum = radar.indicatorList.Count;
|
||||||
@@ -705,7 +693,10 @@ namespace XCharts
|
|||||||
Vector3 p1;
|
Vector3 p1;
|
||||||
float angle = 2 * Mathf.PI / indicatorNum;
|
float angle = 2 * Mathf.PI / indicatorNum;
|
||||||
var lineColor = radar.axisLine.GetColor(chart.theme.radar.lineColor);
|
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++)
|
for (int i = 0; i < radar.splitNumber; i++)
|
||||||
{
|
{
|
||||||
var color = radar.splitArea.GetColor(i, chart.theme.radiusAxis);
|
var color = radar.splitArea.GetColor(i, chart.theme.radiusAxis);
|
||||||
@@ -717,19 +708,19 @@ namespace XCharts
|
|||||||
}
|
}
|
||||||
if (radar.splitLine.show)
|
if (radar.splitLine.show)
|
||||||
{
|
{
|
||||||
UGL.DrawEmptyCricle(vh, p, outsideRadius, lineWidth, lineColor,
|
UGL.DrawEmptyCricle(vh, p, outsideRadius, splitLineWidth, splitLineColor,
|
||||||
Color.clear, chart.settings.cicleSmoothness);
|
Color.clear, chart.settings.cicleSmoothness);
|
||||||
}
|
}
|
||||||
insideRadius = outsideRadius;
|
insideRadius = outsideRadius;
|
||||||
}
|
}
|
||||||
for (int j = 0; j <= indicatorNum; j++)
|
if (radar.axisLine.show)
|
||||||
{
|
{
|
||||||
float currAngle = j * angle;
|
for (int j = 0; j <= indicatorNum; j++)
|
||||||
p1 = new Vector3(p.x + outsideRadius * Mathf.Sin(currAngle),
|
|
||||||
p.y + outsideRadius * Mathf.Cos(currAngle));
|
|
||||||
if (radar.splitLine.show)
|
|
||||||
{
|
{
|
||||||
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user