Exemple #1
0
        //--------------------------------------------------------------------------------------------------

        void _ImportEllipse(DxfDomEllipse dxfEllipse)
        {
            var centerPoint   = dxfEllipse.CenterPoint;
            var majorRimPoint = centerPoint.Translated(dxfEllipse.MajorAxisPointOffset.ToVec());
            var minorRimPoint = centerPoint.Translated(dxfEllipse.MajorAxisPointOffset.ToVec().Rotated(90.0.ToRad()).Scaled(dxfEllipse.Ratio));

            var centerIndex   = _AddPoint(centerPoint, false);
            var majorRimIndex = _AddPoint(majorRimPoint, false);
            var minorRimIndex = _AddPoint(minorRimPoint, false);

            if (majorRimIndex != minorRimIndex)
            {
                _Segments.Add(new SketchSegmentEllipse(centerIndex, majorRimIndex, minorRimIndex));
            }
        }
Exemple #2
0
        //--------------------------------------------------------------------------------------------------

        void _ImportEllipticalArc(DxfDomEllipse dxfEllipse)
        {
            var centerPoint   = dxfEllipse.CenterPoint;
            var majorRimPoint = centerPoint.Translated(dxfEllipse.MajorAxisPointOffset.ToVec());
            var minorRimPoint = centerPoint.Translated(dxfEllipse.MajorAxisPointOffset.ToVec().Rotated(90.0.ToRad()).Scaled(dxfEllipse.Ratio));

            var ellipse = Geom2dUtils.MakeEllipse(centerPoint, majorRimPoint, minorRimPoint);

            var bezierPointArray = Geom2dUtils.EllipticalArcToBezier(ellipse, dxfEllipse.StartParameter, dxfEllipse.EndParameter);

            foreach (var bezierPoints in bezierPointArray)
            {
                var startPoint = _AddPoint(bezierPoints.p1);
                var endPoint   = _AddPoint(bezierPoints.p2);
                _Segments.Add(new SketchSegmentBezier(startPoint, _AddPoint(bezierPoints.c1, false), _AddPoint(bezierPoints.c2, false), endPoint));
            }
        }
        //--------------------------------------------------------------------------------------------------

        void _AddEllipseSegment(SketchSegmentEllipse ellipseSegment)
        {
            var ellipse = ellipseSegment.GetEllipse(_Sketch.Points);

            if (_Document.Flags.HasFlag(DxfFlags.ExportEllipseAsPolygon))
            {
                _AddPolygonCurve(new Geom2d_Ellipse(ellipse));
                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);

            _Document.Entities.Add(entity);
        }
Exemple #4
0
        //--------------------------------------------------------------------------------------------------

        void _AddEllipse(Geom2d_Ellipse ellipse, double first, double last)
        {
            if (_Document.Flags.HasFlag(DxfFlags.ExportEllipseAsPolygon))
            {
                if (Math.Abs(last - first) < ellipse.Period())
                {
                    // Elliptical arc
                    var trimmedCurve = new Geom2d_TrimmedCurve(ellipse, first, last);
                    _AddPolygonCurve(trimmedCurve);
                }
                else
                {
                    // Full ellipse
                    _AddPolygonCurve(ellipse);
                }
                return;
            }

            var center = ellipse.Location();
            var majorAxisPointOffset = ellipse.XAxis().Direction.ToVec().Multiplied(ellipse.MajorRadius());
            var ratio = ellipse.MinorRadius() / ellipse.MajorRadius();

            if (Math.Abs(last - first) < ellipse.Period())
            {
                // Elliptical arc
                if (ellipse.Position().Sense() > 0)
                {
                    var temp = first;
                    first = ellipse.Period() - last;
                    last  = ellipse.Period() - temp;
                }

                var entity = new DxfDomEllipse(_CurrentLayer, center, majorAxisPointOffset.ToPnt(), ratio, first, last);
                _Document.Entities.Add(entity);
            }
            else
            {
                // Full ellipse
                var entity = new DxfDomEllipse(_CurrentLayer, center, majorAxisPointOffset.ToPnt(), ratio);
                _Document.Entities.Add(entity);
            }
        }
        //--------------------------------------------------------------------------------------------------

        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);
        }
Exemple #6
0
        //--------------------------------------------------------------------------------------------------

        void _ReadEntities(DxfReader reader)
        {
            while (reader.GroupCode >= 0)
            {
                if (reader.GroupCode != 0)
                {
                    reader.Skip();
                    continue;
                }

                var type = reader.ReadString()?.ToUpper();
                if (type == null)
                {
                    continue;
                }

                DxfDomEntity entity = null;
                switch (type)
                {
                case "ENDSEC":
                    return;

                case "LINE":
                    entity = new DxfDomLine();
                    break;

                case "CIRCLE":
                case "ARC":
                    entity = new DxfDomCircle();
                    break;

                case "ELLIPSE":
                    entity = new DxfDomEllipse();
                    break;

                case "LWPOLYLINE":
                    entity = new DxfDomLwPolyline();
                    break;

                case "POLYLINE":
                    entity = new DxfDomPolyline();
                    break;

                case "SPLINE":
                    entity = new DxfDomSpline();
                    break;
                }

                if (entity == null)
                {
                    continue;
                }

                if (entity.Read(reader))
                {
                    Entities.Add(entity);
                }
                else
                {
                    Messages.Error($"DxfReader: Incomplete entity description at line {reader.Line}.");
                }
            }
        }