Esempio n. 1
0
        //--------------------------------------------------------------------------------------------------

        void _AddBezierSegment(SketchSegmentBezier bezierSegment)
        {
            if (_Document.Flags.HasFlag(DxfFlags.ExportSplineAsPolygon))
            {
                var curve = bezierSegment.MakeCurve(_Sketch.Points);
                if (curve == null)
                {
                    Messages.Error($"Cannot make curve for converting bezier segment to polyline.");
                    return;
                }

                _AddPolygonCurve(curve);
            }
            else
            {
                var pointCount = bezierSegment.Points.Length;

                var knots = new double[pointCount * 2];
                knots.Fill(0, pointCount, 0.0);
                knots.Fill(pointCount, pointCount, 1.0);

                var points = bezierSegment.Points.Select(idx => _Sketch.Points[idx]).ToArray();

                var entity = new DxfDomSpline("0", pointCount - 1, knots, points, null, DxfDomSpline.SplineFlags.None);
                _Document.Entities.Add(entity);
            }
        }
Esempio n. 2
0
        //--------------------------------------------------------------------------------------------------

        void _ImportSplineWithFitPoints(DxfDomSpline dxfSpline)
        {
            // Copy points
            var pointCount = dxfSpline.FitPoints.Length;
            var points     = new TColgp_HArray1OfPnt2d(1, pointCount);

            for (int i = 0; i < pointCount; i++)
            {
                points.SetValue(i + 1, dxfSpline.FitPoints[i]);
            }

            // Interpolate
            var algo = new Geom2dAPI_Interpolate(points, false, 0.001);

            if (dxfSpline.HasTangents)
            {
                algo.Load(dxfSpline.StartTangent, dxfSpline.EndTangent);
            }
            algo.Perform();
            if (!algo.IsDone())
            {
                Messages.Warning("DxfImporter: Cannot create spline through fit points.");
                return;
            }

            _AddBSplineCurve(algo.Curve());
        }
Esempio n. 3
0
        //--------------------------------------------------------------------------------------------------

        void _ImportSpline(DxfDomSpline dxfSpline)
        {
            if (dxfSpline.ControlPoints.Length > 0 && dxfSpline.Knots.Length > 0)
            {
                _ImportSplineWithControlPoints(dxfSpline);
            }
            else if (dxfSpline.FitPoints.Length > 0)
            {
                _ImportSplineWithFitPoints(dxfSpline);
            }
        }
Esempio n. 4
0
        //--------------------------------------------------------------------------------------------------

        void IDrawingRenderer.BSplineCurve(int degree, double[] knots, Pnt2d[] controlPoints, double[] weights, bool isRational)
        {
            if (_Document.Flags.HasFlag(DxfFlags.ExportSplineAsPolygon))
            {
                var spline = Geom2dUtils.MakeBSplineCurve(degree, knots, controlPoints, weights, false);
                _AddPolygonCurve(spline);
                return;
            }

            var flags  = isRational ? DxfDomSpline.SplineFlags.IsRational : DxfDomSpline.SplineFlags.None;
            var entity = new DxfDomSpline(_CurrentLayerName, degree, knots, controlPoints, weights, flags);

            _AddEntity(entity);
        }
Esempio n. 5
0
        //--------------------------------------------------------------------------------------------------

        void _ImportSplineWithControlPoints(DxfDomSpline dxfSpline)
        {
            var spline = Geom2dUtils.MakeBSplineCurve(dxfSpline.Degree, dxfSpline.Knots, dxfSpline.ControlPoints, dxfSpline.Weights, dxfSpline.Flags.Has(DxfDomSpline.SplineFlags.IsClosed));

            _AddBSplineCurve(spline);
        }