public static void Draw(this SKCanvas canvas, CanvasDrawModel circle) { if (canvas == null) { throw new ArgumentException($"{nameof(canvas)} is null.", nameof(canvas)); } try { var circleColor = circle.Color ?? Color.WhiteSmoke; var paint = new SKPaint(); if (circle.BorderColor.HasValue && circle.StrokeWidth > 0) { circleColor = circle.BorderColor.Value; paint.Style = SKPaintStyle.Stroke; paint.StrokeWidth = circle.StrokeWidth; } else { paint.Style = SKPaintStyle.Fill; } paint.Color = new SKColor(circleColor.R, circleColor.G, circleColor.B, circleColor.A); canvas.DrawCircle(circle.CentreX, circle.CentreY, circle.Radius, paint); } catch (Exception exception) { LogHelper.LogError(exception); throw; } }
private static void DrawCompare(this SKCanvas canvas, SKImageInfo info, CelestialDrawModel origin, CelestialDrawModel compare) { var originRadius = origin.Radius; var compareRadius = compare.Radius; var maxCanvasWidth = info.Width; var maxCanvasHeight = info.Height; var maxRadius = DoubleHelper.GetMax(originRadius, compareRadius); var minRadius = DoubleHelper.GetMin(originRadius, compareRadius); var divisionFactor = maxCanvasWidth * 0.9 / (minRadius * 4 > maxRadius ? 2 : 1); var factor = maxRadius / divisionFactor; var originFactoredRadius = (int)DoubleHelper.GetMax(Math.Floor(originRadius / factor), 1); var compareFactoredRadius = (int)DoubleHelper.GetMax(Math.Floor(compareRadius / factor), 1); var originCentreX = GetCentreX(maxCanvasWidth, originFactoredRadius, true); var compareCentreX = GetCentreX(maxCanvasWidth, compareFactoredRadius, false); var centreY = maxCanvasHeight / 2; var originDraw = new CanvasDrawModel(origin.Id, origin.Description, originFactoredRadius, originCentreX, centreY, origin.Color, null, null, 0); var compareDraw = new CanvasDrawModel(compare.Id, compare.Description, compareFactoredRadius, compareCentreX, centreY, compare.Color, null, null, 0); canvas.Draw(originDraw); canvas.Draw(compareDraw); }
private static void DrawOrbits(this SKCanvas canvas, IEnumerable <CelestialDrawModel> orbits, DrawParameterModel drawParameters) { foreach (var orbit in orbits.Where(x => x.Radius > 0)) { var draw = new CanvasDrawModel( orbit.Id, orbit.Description, (int)Math.Ceiling(orbit.Radius * drawParameters.OrbitFactor) + SunRadius, drawParameters.CentreX, drawParameters.CentreY, null, orbit.BorderColor, null, orbit.StrokeWidth); canvas.Draw(draw); } }
private static void DrawBodies(this SKCanvas canvas, IEnumerable <CelestialDrawModel> bodies, DrawParameterModel drawParameters) { var orderedBodies = bodies.OrderByDescending(x => x.Radius).ToList(); var sizes = new[] { SunRadius, 20, 18, 16, 14, 8, 8, 6, 4, 4 }; for (var index = 0; index < orderedBodies.Count; index++) { try { var body = orderedBodies[index]; var centreX = GetCentreValue(drawParameters.CentreX, body.Location, DrawOrientation.Vertical, drawParameters); var centreY = GetCentreValue(drawParameters.CentreY, body.Location, DrawOrientation.Horizontal, drawParameters); var draw = new CanvasDrawModel( body.Id, body.Description, sizes[index], centreX, centreY, body.Color, null, null, 0); canvas.Draw(draw); } catch (ArgumentException exception) { LogHelper.LogError(exception); } catch (Exception exception) { LogHelper.LogError(exception); } } }