//-------------------------------------------------------------------------------------------------- bool _AddEllipicalArcSegment(SketchSegmentEllipticalArc arcSegment, Pnt2d start, Pnt2d end) { var parameters = new double[2]; var ellipse = arcSegment.GetEllipse(_Sketch.Points, parameters); if (ellipse == null) { return(false); } double rotAngle = ellipse.XAxis().Angle(new Ax2d(ellipse.Location(), Dir2d.DX)); double length = parameters[1] - parameters[0]; var size = length < Math.PI ? SvgArcSize.Small : SvgArcSize.Large; var sense = ellipse.Axis().Sense() > 0; if (start == _Sketch.Points[arcSegment.EndPoint]) { sense = !sense; // Sense was inverted by interchanged start/end point } var sweep = sense ? SvgArcSweep.Positive : SvgArcSweep.Negative; var svgSegment = new SvgPathSegArc(start, ellipse.MajorRadius(), ellipse.MinorRadius(), rotAngle.ToDeg(), size, sweep, end); _CurrentPath.Segments.Add(svgSegment); return(true); }
//-------------------------------------------------------------------------------------------------- void _AddEllipticalArcSegment(SketchSegmentEllipticalArc arcSegment) { var parameter = new double[2]; var ellipse = arcSegment.GetEllipse(_Sketch.Points, parameter); if (_Document.Flags.HasFlag(DxfFlags.ExportEllipseAsPolygon)) { var trimmedCurve = new Geom2d_TrimmedCurve(new Geom2d_Ellipse(ellipse), parameter[0], parameter[1]); _AddPolygonCurve(trimmedCurve); return; } var center = ellipse.Location(); var majorAxisPointOffset = ellipse.XAxis().Direction.ToVec().Multiplied(ellipse.MajorRadius()).ToPnt(); var ratio = ellipse.MinorRadius() / ellipse.MajorRadius(); var entity = new DxfDomEllipse("0", center, majorAxisPointOffset, ratio, parameter[0], parameter[1]); _Document.Entities.Add(entity); }