//--------------------------------------------------------------------------------------------------

        void _ValueHudElement_AngleEntered(ValueHudElement hudElement, double newValue)
        {
            if (newValue == 0)
            {
                return;
            }

            var startPoint = _Points[0];

            if (startPoint.Distance(_CenterPoint) <= 0)
            {
                return;
            }

            var xAxis          = new Ax2d(_CenterPoint, new Dir2d(new Vec2d(_CenterPoint, startPoint)));
            var radius         = _CenterPoint.Distance(startPoint);
            var circ           = new gp_Circ2d(xAxis, radius, _ArcDirection);
            var startParameter = ElCLib.Parameter(circ, startPoint);

            var endParameter = startParameter + newValue.ToRad();
            var endPoint     = ElCLib.Value(endParameter, circ);

            _ArcDirection = newValue < 0;

            if (!_CalcArcRimPoints(endPoint))
            {
                return;
            }

            _MergePointIndices[1] = -1;
            _MergePointIndices[2] = -1;
            _PointsCompleted++;

            _SketchEditorTool.FinishSegmentCreation(_Points, _MergePointIndices, new SketchSegment[] { _Segment }, null);
        }
Пример #2
0
        //--------------------------------------------------------------------------------------------------

        bool _CalcArcRimPoints(Pnt2d endPoint)
        {
            // Project end point on circle
            var startPoint = _Points[0];

            if ((startPoint.Distance(endPoint) <= 0) || (endPoint.Distance(_CenterPoint) <= 0) || (startPoint.Distance(_CenterPoint) <= 0))
            {
                return(false);
            }

            var xAxis        = new Ax2d(_CenterPoint, new Dir2d(new Vec2d(_CenterPoint, startPoint)));
            var radius       = _CenterPoint.Distance(startPoint);
            var circ         = new gp_Circ2d(xAxis, radius, _ArcDirection);
            var projEndPoint = new Geom2dAPI_ProjectPointOnCurve(endPoint, new Geom2d_Circle(circ)).NearestPoint();

            // Check if we should toggle the direction
            var endParameter = ElCLib.Parameter(circ, projEndPoint);

            // If the last parameter was very small (~PI/2), and the current is very high (~PI*1.5), toggle direction
            if (((_LastEndParameter < 1) && (endParameter > 5)) ||
                ((endParameter < 1) && (_LastEndParameter > 5)))
            {
                _ArcDirection = !_ArcDirection;
                circ          = new gp_Circ2d(xAxis, radius, _ArcDirection);
                endParameter  = ElCLib.Parameter(circ, projEndPoint);
            }
            _LastEndParameter = endParameter;

            // Calc rim point
            var rimPoint = ElCLib.Value(endParameter / 2, circ);

            _Points[1] = projEndPoint;
            _Points[2] = rimPoint;
            return(true);
        }
        //--------------------------------------------------------------------------------------------------

        void _ImportArcSegment(SvgPathSegArc svgSegment, ref int startPoint)
        {
            var radiusX     = svgSegment.RadiusX;
            var radiusY     = svgSegment.RadiusY;
            var rotation    = -svgSegment.Angle.ToRad();
            var startPnt2d  = svgSegment.Start;
            var endPnt2d    = svgSegment.End;
            var centerPnt2d = Geom2dUtils.FindEllipseCenterFromEndpoints(
                startPnt2d, endPnt2d,
                radiusX, radiusY, rotation,
                (int)svgSegment.Size != (int)svgSegment.Sweep);

            // Do we have a circle arc?
            if (Math.Abs(radiusX - radiusY) < 0.0001)
            {
                var axis = Ax2d.OX.Rotated(Pnt2d.Origin, rotation).Translated(centerPnt2d.ToVec());
                var circ = new gp_Circ2d(axis, radiusX, svgSegment.Sweep != SvgArcSweep.Positive);

                //Debug.WriteLine("StartParam: {0}  -  EndParam: {1}", ElCLib.Parameter(circ, startPnt2d), ElCLib.Parameter(circ, endPnt2d));
                var startParam = ElCLib.Parameter(circ, startPnt2d);
                var endParam   = ElCLib.Parameter(circ, endPnt2d);
                if (endParam < startParam)
                {
                    endParam += 2 * Math.PI;
                }
                var rimPnt2d = ElCLib.Value(startParam + (endParam - startParam) / 2, circ);

                var endPoint = _AddPoint(endPnt2d);
                _Segments.Add(new SketchSegmentArc(startPoint, endPoint, _AddPoint(rimPnt2d)));
                startPoint = endPoint;
            }
            else
            {
                // No, we have a elliptical arc
                // Construct ellipse, convert to bezier
                var axis       = Ax2d.OX.Rotated(Pnt2d.Origin, rotation).Translated(centerPnt2d.ToVec());
                var ellipse    = new gp_Elips2d(axis, radiusX, radiusY, svgSegment.Sweep != SvgArcSweep.Positive);
                var startParam = ElCLib.Parameter(ellipse, startPnt2d);
                var endParam   = ElCLib.Parameter(ellipse, endPnt2d);
                if (double.IsNaN(startParam) || double.IsNaN(endParam))
                {
                    Messages.Warning("Invalid elliptical arc found in SVG file.");
                    return;
                }

                var bezierPointArray = Geom2dUtils.EllipticalArcToBezier(ellipse, startParam, endParam);
                foreach (var bezierPoints in bezierPointArray)
                {
                    var endPoint = _AddPoint(bezierPoints.p2);
                    _Segments.Add(new SketchSegmentBezier(startPoint, _AddPoint(bezierPoints.c1), _AddPoint(bezierPoints.c2), endPoint));
                    startPoint = endPoint;
                }
            }
        }
Пример #4
0
        //--------------------------------------------------------------------------------------------------

        void _ValueHudElement_RadiusEntered(ValueHudElement hudElement, double newValue)
        {
            if (newValue == 0)
            {
                return;
            }

            if (_Points[0].Distance(_Points[1]) == 0)
            {
                return;
            }

            var center       = Geom2dUtils.FindEllipseCenterFromEndpoints(_Points[0], _Points[1], newValue, newValue, 0, newValue > 0);
            var xAxis        = new Ax2d(center, new Dir2d(new Vec2d(center, _Points[0])));
            var radius       = center.Distance(_Points[0]);
            var circ         = new gp_Circ2d(xAxis, radius, newValue < 0);
            var endParameter = ElCLib.Parameter(circ, _Points[1]);

            _Points[2] = ElCLib.Value(endParameter / 2, circ);

            _MergePointIndices[2] = -1;
            _PointAction.Stop();
            _SketchEditorTool.FinishSegmentCreation(_Points, _MergePointIndices, new SketchSegment[] { _Segment }, null);
        }
 public IntCurve_IntConicConic(gp_Circ2d C1, IntRes2d_Domain D1, gp_Circ2d C2, IntRes2d_Domain D2,
                               double TolConf, double Tol)
     : base()
 {
     throw new NotImplementedException();
 }
 public void Perform(gp_Circ2d C, IntRes2d_Domain DC, gp_Hypr2d H, IntRes2d_Domain DH, double TolConf,
                     double Tol)
 {
     throw new NotImplementedException();
 }
Пример #7
0
 public TColgp_Array2OfCirc2d(gp_Circ2d theBegin, int theRowLower, int theRowUpper, int theColLower,
                              int theColUpper)
     : base()
 {
     throw new NotImplementedException();
 }
 public GCE2d_MakeArcOfCircle(gp_Circ2d Circ, gp_Pnt2d P, double Alpha, bool Sense)
     : base()
 {
     throw new NotImplementedException();
 }
Пример #9
0
 public void Perform(gp_Lin2d L, gp_Circ2d C)
 {
     throw new NotImplementedException();
 }
Пример #10
0
 public GccAna_Circ2dBisec(gp_Circ2d Circ1, gp_Circ2d Circ2)
     : base()
 {
     throw new NotImplementedException();
 }
Пример #11
0
 public IntAna2d_AnaIntersection(gp_Circ2d C, IntAna2d_Conic Co)
     : base()
 {
     throw new NotImplementedException();
 }
 public BRepBuilderAPI_MakeEdge2d(gp_Circ2d L, TopoDS_Vertex V1, TopoDS_Vertex V2)
     : base()
 {
     throw new NotImplementedException();
 }
 public Geom2dGcc_Circ2dTanOnRadGeo(Geom2dGcc_QCurve Qualified1, gp_Circ2d OnCirc, double Radius,
                                    double Tolerance)
     : base()
 {
     throw new NotImplementedException();
 }
 public BRepBuilderAPI_MakeEdge2d(gp_Circ2d L, gp_Pnt2d P1, gp_Pnt2d P2)
     : base()
 {
     throw new NotImplementedException();
 }
 public BRepBuilderAPI_MakeEdge2d(gp_Circ2d L, double p1, double p2)
     : base()
 {
     throw new NotImplementedException();
 }
 public GccAna_CircPnt2dBisec(gp_Circ2d Circle1, gp_Pnt2d Point2, double Tolerance)
     : base()
 {
     throw new NotImplementedException();
 }
 public IntCurve_IntConicConic(gp_Circ2d C, IntRes2d_Domain DC, gp_Hypr2d H, IntRes2d_Domain DH, double TolConf,
                               double Tol)
     : base()
 {
     throw new NotImplementedException();
 }
Пример #18
0
 public Geom2dGcc_FunctionTanCuCu(gp_Circ2d Circ1, Geom2dAdaptor_Curve Curv2)
     : base()
 {
     throw new NotImplementedException();
 }
Пример #19
0
 public IntAna2d_AnaIntersection(gp_Lin2d L, gp_Circ2d C)
     : base()
 {
     throw new NotImplementedException();
 }
Пример #20
0
 public GccAna_Circ2d2TanOn(GccEnt_QualifiedLin Qualified1, gp_Pnt2d Point2, gp_Circ2d OnCirc, double Tolerance)
     : base()
 {
     throw new NotImplementedException();
 }
Пример #21
0
 public void Perform(gp_Circ2d C1, gp_Circ2d C2)
 {
     throw new NotImplementedException();
 }
Пример #22
0
 public void Add(gp_Circ2d C, double P1, double P2, double Tol, Bnd_Box2d B)
 {
     throw new NotImplementedException();
 }
Пример #23
0
 public void Perform(gp_Circ2d C, IntAna2d_Conic Co)
 {
     throw new NotImplementedException();
 }
Пример #24
0
 public void Init(gp_Circ2d theValue)
 {
     throw new NotImplementedException();
 }
Пример #25
0
 public GccAna_Circ2d2TanOn(gp_Pnt2d Point1, gp_Pnt2d Point2, gp_Circ2d OnCirc, double Tolerance)
     : base()
 {
     throw new NotImplementedException();
 }
 public void Perform(gp_Lin2d L, IntRes2d_Domain DL, gp_Circ2d C, IntRes2d_Domain DC, double TolConf, double Tol)
 {
     throw new NotImplementedException();
 }
 public GCE2d_MakeArcOfCircle(gp_Circ2d Circ, double Alpha1, double Alpha2)
     : base()
 {
     throw new NotImplementedException();
 }
 public void Perform(gp_Circ2d C1, IntRes2d_Domain D1, gp_Circ2d C2, IntRes2d_Domain D2, double TolConf,
                     double Tol)
 {
     throw new NotImplementedException();
 }
 public GCE2d_MakeArcOfCircle(gp_Circ2d Circ, gp_Pnt2d P1, gp_Pnt2d P2)
     : base()
 {
     throw new NotImplementedException();
 }
 public void Perform(gp_Circ2d C, IntRes2d_Domain DC, gp_Parab2d P, IntRes2d_Domain DP, double TolConf,
                     double Tol)
 {
     throw new NotImplementedException();
 }