Browse Source

Update Arc.cs

pull/6133/head
Jumar Macato 5 years ago
committed by GitHub
parent
commit
3740c9d973
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 17
      src/Avalonia.Controls/Shapes/Arc.cs

17
src/Avalonia.Controls/Shapes/Arc.cs

@ -41,12 +41,12 @@ namespace Avalonia.Controls.Shapes
get => GetValue(SweepAngleProperty); get => GetValue(SweepAngleProperty);
set => SetValue(SweepAngleProperty, value); set => SetValue(SweepAngleProperty, value);
} }
protected override Geometry CreateDefiningGeometry() protected override Geometry CreateDefiningGeometry()
{ {
var angle1 = DegreesToRad(StartAngle); var angle1 = DegreesToRad(StartAngle);
var angle2 = angle1 + DegreesToRad(SweepAngle); var angle2 = angle1 + DegreesToRad(SweepAngle);
var startAngle = Math.Min(angle1, angle2); var startAngle = Math.Min(angle1, angle2);
var sweepAngle = Math.Max(angle1, angle2); var sweepAngle = Math.Max(angle1, angle2);
@ -72,29 +72,30 @@ namespace Avalonia.Controls.Shapes
var radiusX = deflatedRect.Width / 2; var radiusX = deflatedRect.Width / 2;
var radiusY = deflatedRect.Height / 2; var radiusY = deflatedRect.Height / 2;
var angleGap = RadToNormRad(sweepAngle - startAngle); var angleGap = RadToNormRad(sweepAngle - startAngle);
var startPoint = GetRingPoint(radiusX, radiusY, centerX, centerY, startAngle); var startPoint = GetRingPoint(radiusX, radiusY, centerX, centerY, startAngle);
var endPoint = GetRingPoint(radiusX, radiusY, centerX, centerY, sweepAngle); var endPoint = GetRingPoint(radiusX, radiusY, centerX, centerY, sweepAngle);
var arcGeometry = new StreamGeometry(); var arcGeometry = new StreamGeometry();
using (var ctx = arcGeometry.Open()) using (var ctx = arcGeometry.Open())
{ {
ctx.BeginFigure(startPoint, false); ctx.BeginFigure(startPoint, false);
ctx.ArcTo(endPoint, new Size(radiusX, radiusY), angleGap, angleGap >= Math.PI, SweepDirection.Clockwise); ctx.ArcTo(endPoint, new Size(radiusX, radiusY), angleGap, angleGap >= Math.PI,
SweepDirection.Clockwise);
ctx.EndFigure(false); ctx.EndFigure(false);
} }
return arcGeometry; return arcGeometry;
} }
} }
static double DegreesToRad(double inAngle) => static double DegreesToRad(double inAngle) =>
inAngle * Math.PI / 180; inAngle * Math.PI / 180;
static double RadToNormRad(double inAngle) => (inAngle % (Math.PI * 2)) + (Math.PI * 2)) % (Math.PI * 2); static double RadToNormRad(double inAngle) => ((inAngle % (Math.PI * 2)) + (Math.PI * 2)) % (Math.PI * 2);
static Point GetRingPoint(double radiusX, double radiusY, double centerX, double centerY, double angle) => static Point GetRingPoint(double radiusX, double radiusY, double centerX, double centerY, double angle) =>
new Point((radiusX * Math.Cos(angle)) + centerX, (radiusY * Math.Sin(angle)) + centerY); new Point((radiusX * Math.Cos(angle)) + centerX, (radiusY * Math.Sin(angle)) + centerY);

Loading…
Cancel
Save