You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Connected.Components/Components/Chart/Charts/Pie.razor.cs

56 lines
1.3 KiB

2 years ago
using Microsoft.AspNetCore.Components;
namespace Connected.Components;
partial class Pie : Chart
{
[CascadingParameter] public Chart ChartParent { get; set; }
private List<SvgPath> _paths = new();
private List<SvgLegend> _legends = new();
protected override void OnParametersSet()
{
_paths.Clear();
_legends.Clear();
double startx, starty, endx, endy;
var ndata = GetNormalizedData();
double cumulativeRadians = 0;
for (var i = 0; i < ndata.Length; i++)
{
var data = ndata[i];
startx = Math.Cos(cumulativeRadians);
starty = Math.Sin(cumulativeRadians);
cumulativeRadians += 2 * Math.PI * data;
endx = Math.Cos(cumulativeRadians);
endy = Math.Sin(cumulativeRadians);
var largeArcFlag = data > 0.5 ? 1 : 0;
var path = new SvgPath()
{
Index = i,
Data = $"M {ToS(startx)} {ToS(starty)} A 1 1 0 {ToS(largeArcFlag)} 1 {ToS(endx)} {ToS(endy)} L 0 0"
};
_paths.Add(path);
}
var counter = 0;
foreach (var data in ndata)
{
var percent = data * 100;
var labels = "";
if (counter < InputLabels.Length)
{
labels = InputLabels[counter];
}
var legend = new SvgLegend()
{
Index = counter,
Labels = labels,
Data = ToS(Math.Round(percent, 1))
};
_legends.Add(legend);
counter += 1;
}
}
}