private Ellipse CreateEllipticalArc(ArcShape arc, double dx, double dy) { var a = new Spatial.Arc.GdiArc( Spatial.Point2.FromXY(arc.Point1.X, arc.Point1.Y), Spatial.Point2.FromXY(arc.Point2.X, arc.Point2.Y), Spatial.Point2.FromXY(arc.Point3.X, arc.Point3.Y), Spatial.Point2.FromXY(arc.Point4.X, arc.Point4.Y)); double _cx = ToDxfX(a.X + dx + a.Width / 2.0); double _cy = ToDxfY(a.Y + dy + a.Height / 2.0); double minor = Math.Min(a.Height, a.Width); double major = Math.Max(a.Height, a.Width); double startAngle = -a.EndAngle; double endAngle = -a.StartAngle; double rotation = 0; if (a.Height > a.Width) { startAngle += 90; endAngle += 90; rotation = -90; } return(new Ellipse() { Center = new Vector3(_cx, _cy, 0), MajorAxis = major, MinorAxis = minor, StartAngle = startAngle, EndAngle = endAngle, Rotation = rotation }); }
/// <inheritdoc/> public override void Draw(object dc, ArcShape arc, double dx, double dy, object db, object r) { var _gfx = dc as XGraphics; var a = new Spatial.Arc.GdiArc( Spatial.Point2.FromXY(arc.Point1.X, arc.Point1.Y), Spatial.Point2.FromXY(arc.Point2.X, arc.Point2.Y), Spatial.Point2.FromXY(arc.Point3.X, arc.Point3.Y), Spatial.Point2.FromXY(arc.Point4.X, arc.Point4.Y)); if (arc.IsFilled) { var path = new XGraphicsPath(); // NOTE: Not implemented in PdfSharp Core version. path.AddArc( _scaleToPage(a.X + dx), _scaleToPage(a.Y + dy), _scaleToPage(a.Width), _scaleToPage(a.Height), a.StartAngle, a.SweepAngle); if (arc.IsStroked) { _gfx.DrawPath( ToXPen(arc.Style, _scaleToPage, _sourceDpi, _targetDpi), ToXSolidBrush(arc.Style.Fill), path); } else { _gfx.DrawPath( ToXSolidBrush(arc.Style.Fill), path); } } else { if (arc.IsStroked) { _gfx.DrawArc( ToXPen(arc.Style, _scaleToPage, _sourceDpi, _targetDpi), _scaleToPage(a.X + dx), _scaleToPage(a.Y + dy), _scaleToPage(a.Width), _scaleToPage(a.Height), a.StartAngle, a.SweepAngle); } } }