public override void DrawContent(SKCanvas canvas, int width, int height) { DrawCaption(canvas, width, height); using (new SKAutoCanvasRestore(canvas)) { canvas.Translate(width / 2, height / 2); var sumValue = Series.First().Sum(x => Math.Abs(x.Value)); var radius = (Math.Min(width, height) - (2 * Margin)) / 2; var start = 0.0f; for (int i = 0; i < Series.Count(); i++) { var entry = Series.First().ElementAt(i); var end = start + (Math.Abs(entry.Value) / sumValue); // Sector var path = RadialHelpers.CreateSectorPath(start, end, radius, radius * HoleRadius); using (var paint = new SKPaint { Style = SKPaintStyle.Fill, Color = entry.Color, IsAntialias = true, }) { canvas.DrawPath(path, paint); } start = end; } } }
public override void DrawContent(SKCanvas canvas, int width, int height) { if (Entries != null) { DrawCaption(canvas, width, height); using (new SKAutoCanvasRestore(canvas)) { if (DrawDebugRectangles) { using (var paint = new SKPaint { Color = SKColors.Red, IsStroke = true, }) { canvas.DrawRect(DrawableChartArea, paint); } } canvas.Translate(DrawableChartArea.Left + DrawableChartArea.Width / 2, height / 2); var sumValue = Entries.Where(x => x.Value.HasValue).Sum(x => Math.Abs(x.Value.Value)); var radius = (Math.Min(DrawableChartArea.Width, DrawableChartArea.Height) - (2 * Margin)) / 2; var start = 0.0f; for (int i = 0; i < Entries.Count(); i++) { var entry = Entries.ElementAt(i); if (!entry.Value.HasValue) { continue; } var end = start + ((Math.Abs(entry.Value.Value) / sumValue) * AnimationProgress); // Sector var path = RadialHelpers.CreateSectorPath(start, end, radius, radius * HoleRadius); using (var paint = new SKPaint { Style = SKPaintStyle.Fill, Color = entry.Color, IsAntialias = true, }) { canvas.DrawPath(path, paint); } start = end; } } } }