Пример #1
0
        //--------------------------------------------------------------------------------------------------

        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);
        }
Пример #2
0
        //--------------------------------------------------------------------------------------------------

        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);
        }