[feature][polar] support bar and ring polar

This commit is contained in:
monitor1394
2022-09-16 08:03:14 +08:00
parent afbfa20fd9
commit ba9faa8bc6
13 changed files with 283 additions and 61 deletions

View File

@@ -29,6 +29,11 @@ namespace XCharts.Runtime
return (value + context.startAngle + 360) % 360;
}
public float GetValueAngle(double value)
{
return (float) (value + context.startAngle + 360) % 360;
}
public override void SetDefaultValue()
{
m_Show = true;

View File

@@ -139,7 +139,13 @@ namespace XCharts.Runtime
{
var lineWidth = angleAxis.axisLine.GetWidth(chart.theme.axis.lineWidth);
var outsideRaidus = radius + lineWidth * 2;
UGL.DrawDoughnut(vh, cenPos, radius, outsideRaidus, lineColor, Color.clear);
UGL.DrawDoughnut(vh, cenPos, radius, outsideRaidus, lineColor, ColorUtil.clearColor32);
if (polar.context.insideRadius > 0)
{
radius = polar.context.insideRadius;
outsideRaidus = radius + lineWidth * 2;
UGL.DrawDoughnut(vh, cenPos, radius, outsideRaidus, lineColor, ColorUtil.clearColor32);
}
}
}

View File

@@ -157,15 +157,18 @@ namespace XCharts.Runtime
var tickWidth = radiusAxis.axisTick.GetWidth(chart.theme.axis.tickWidth);
var tickLength = radiusAxis.axisTick.GetLength(chart.theme.axis.tickLength);
var tickVetor = ChartHelper.GetVertialDire(dire) * tickLength;
for (int i = 0; i <= size; i++)
for (int i = 0; i < size; i++)
{
var scaleWidth = AxisHelper.GetScaleWidth(radiusAxis, radius, i);
var scaleWidth = AxisHelper.GetScaleWidth(radiusAxis, radius, i + 1);
var pos = ChartHelper.GetPos(cenPos, totalWidth + tickWidth, startAngle, true);
if (radiusAxis.show && radiusAxis.splitLine.show)
{
var outsideRaidus = totalWidth + radiusAxis.splitLine.GetWidth(chart.theme.axis.splitLineWidth) * 2;
var splitLineColor = radiusAxis.splitLine.GetColor(chart.theme.axis.splitLineColor);
UGL.DrawDoughnut(vh, cenPos, totalWidth, outsideRaidus, splitLineColor, Color.clear);
if (CanDrawSplitLine(angleAxis, i, size))
{
var outsideRaidus = totalWidth + radiusAxis.splitLine.GetWidth(chart.theme.axis.splitLineWidth) * 2;
var splitLineColor = radiusAxis.splitLine.GetColor(chart.theme.axis.splitLineColor);
UGL.DrawDoughnut(vh, cenPos, totalWidth, outsideRaidus, splitLineColor, Color.clear);
}
}
if (radiusAxis.show && radiusAxis.axisTick.show)
{
@@ -186,5 +189,17 @@ namespace XCharts.Runtime
UGL.DrawLine(vh, lineStartPos, lineEndPos, lineWidth, chart.theme.axis.lineColor);
}
}
private bool CanDrawSplitLine(AngleAxis angleAxis, int i, int size)
{
if (angleAxis.axisLine.show)
{
return i != size - 1 && i != 0;
}
else
{
return true;
}
}
}
}