public void PointOnLineMidpoint()
        {
            var sketch = Sketch.Create();
            var p1     = sketch.AddPoint(new Pnt2d(3, -10));
            var p2     = sketch.AddPoint(new Pnt2d(3, 10));
            var line   = new SketchSegmentLine(p1, p2);
            var s1     = sketch.AddSegment(line);
            var p3     = sketch.AddPoint(new Pnt2d(-5, -5));
            var p4     = sketch.AddPoint(new Pnt2d(20, 20));
            var s2     = sketch.AddSegment(new SketchSegmentLine(p3, p4));
            var c1     = sketch.AddConstraint(new SketchConstraintPointOnMidpoint(p3, s1));

            Assert.IsTrue(sketch.SolveConstraints(true));
            var pointOnCurve = new Geom2dAPI_ProjectPointOnCurve(sketch.Points[p3], line.MakeCurve(sketch.Points));

            Assert.AreEqual(1, pointOnCurve.NbPoints());
            Assert.AreEqual(0.0, pointOnCurve.Distance(1), MaxLengthDelta);

            sketch.Points[p3] = new Pnt2d(18, 18);
            Assert.IsTrue(sketch.SolveConstraints(true));
            pointOnCurve = new Geom2dAPI_ProjectPointOnCurve(sketch.Points[p3], new Geom2d_Line(line.GetLine(sketch.Points)));
            Assert.AreEqual(1, pointOnCurve.NbPoints());
            Assert.AreEqual(0.0, pointOnCurve.Distance(1), MaxLengthDelta);
            Assert.AreEqual(pointOnCurve.Point(1).Distance(sketch.Points[p1]), pointOnCurve.Point(1).Distance(sketch.Points[p2]), MaxLengthDelta);
        }
Exemple #2
0
        //--------------------------------------------------------------------------------------------------

        bool _AddLineSegment(SketchSegmentLine segment, Pnt2d start, Pnt2d end)
        {
            var svgSegment = new SvgPathSegLineto(start, end);

            _CurrentPath.Segments.Add(svgSegment);
            return(true);
        }
        //--------------------------------------------------------------------------------------------------

        void _OnActionFinished(ToolAction toolAction)
        {
            if (toolAction == _PointAction)
            {
                if (_Segments == null)
                {
                    _Points.Add(0, _PointAction.Point);
                    _MergePointIndices[0] = _PointAction.MergeCandidateIndex;
                    _UpdateCornerPoints(_PointAction.Point);

                    _Segments    = new SketchSegmentLine[4];
                    _Segments[0] = new SketchSegmentLine(0, 1);
                    _Segments[1] = new SketchSegmentLine(1, 2);
                    _Segments[2] = new SketchSegmentLine(2, 3);
                    _Segments[3] = new SketchSegmentLine(3, 0);

                    _Elements = new SketchEditorSegmentElement[4];
                    for (int i = 0; i < _Elements.Length; i++)
                    {
                        _Elements[i]            = new SketchEditorSegmentElement(_SketchEditorTool, -1, _Segments[i], _SketchEditorTool.Transform, _SketchEditorTool.Sketch.Plane);
                        _Elements[i].IsCreating = true;
                        _Elements[i].OnPointsChanged(_Points, null);
                    }

                    _SketchEditorTool.StatusText = "Select second corner or the rectangle.";

                    _PointAction.Reset();
                }
                else
                {
                    _SetSecondPoint(_PointAction.Point, _PointAction.MergeCandidateIndex);
                }
            }
        }
Exemple #4
0
        //--------------------------------------------------------------------------------------------------

        void _AddLineSegment(SketchSegmentLine lineSegment)
        {
            var p1 = _Sketch.Points[lineSegment.StartPoint];
            var p2 = _Sketch.Points[lineSegment.EndPoint];

            var entity = new DxfDomLine("0", p1, p2);

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

        void _OnActionFinished(ToolAction toolAction)
        {
            if (toolAction == _PointAction)
            {
                if (_Segments == null)
                {
                    _Points.Add(0, _PointAction.Point);
                    _MergePointIndices[0] = _PointAction.MergeCandidateIndex;
                    _SetSecondPoint(_PointAction.Point);

                    _Segments    = new SketchSegmentLine[4];
                    _Segments[0] = new SketchSegmentLine(0, 1);
                    _Segments[1] = new SketchSegmentLine(1, 2);
                    _Segments[2] = new SketchSegmentLine(2, 3);
                    _Segments[3] = new SketchSegmentLine(3, 0);

                    _Elements = new SketchEditorSegmentElement[4];
                    for (int i = 0; i < _Elements.Length; i++)
                    {
                        _Elements[i]            = new SketchEditorSegmentElement(_SketchEditorTool, -1, _Segments[i], _SketchEditorTool.Transform, _SketchEditorTool.Sketch.Plane);
                        _Elements[i].IsCreating = true;
                        _Elements[i].OnPointsChanged(_Points, null);
                    }

                    _SketchEditorTool.StatusText = "Select second corner or the rectangle.";

                    _PointAction.Reset();
                }
                else
                {
                    if (Math.Abs(_Points[0].X - _PointAction.Point.X) < 0.001 ||
                        Math.Abs(_Points[0].Y - _PointAction.Point.Y) < 0.001)
                    {
                        // Minimum length not met
                        _PointAction.Reset();
                        return;
                    }

                    _PointAction.Stop();

                    _SetSecondPoint(_PointAction.Point);
                    _MergePointIndices[1] = -1;
                    _MergePointIndices[2] = _PointAction.MergeCandidateIndex;
                    _MergePointIndices[3] = -1;

                    var constraints = new SketchConstraintPerpendicular[4];
                    constraints[0] = new SketchConstraintPerpendicular(0, 1);
                    constraints[1] = new SketchConstraintPerpendicular(1, 2);
                    constraints[2] = new SketchConstraintPerpendicular(2, 3);
                    constraints[3] = new SketchConstraintPerpendicular(3, 0);

                    _SketchEditorTool.FinishSegmentCreation(_Points, _MergePointIndices, _Segments, constraints);
                }
            }
        }
        public void EqualLines()
        {
            var sketch = Sketch.Create();
            var p1     = sketch.AddPoint(new Pnt2d(-10, -5));
            var p2     = sketch.AddPoint(new Pnt2d(0, 10));
            var line1  = new SketchSegmentLine(p1, p2);
            var s1     = sketch.AddSegment(line1);
            var p3     = sketch.AddPoint(new Pnt2d(-5, -5));
            var line2  = new SketchSegmentLine(p2, p3);
            var s2     = sketch.AddSegment(line2);
            var c1     = sketch.AddConstraint(new SketchConstraintEqual(s1, s2));

            Assert.IsTrue(sketch.SolveConstraints(true));
            Assert.AreEqual(line1.Length(sketch.Points), line2.Length(sketch.Points), MaxLengthDelta);
        }
        public void Angle()
        {
            var sketch = Sketch.Create();
            var p1     = sketch.AddPoint(new Pnt2d(10, 10));
            var p2     = sketch.AddPoint(new Pnt2d(0, -5));
            var line1  = new SketchSegmentLine(p1, p2);
            var s1     = sketch.AddSegment(line1);
            var p3     = sketch.AddPoint(new Pnt2d(5, 5));
            var line2  = new SketchSegmentLine(p2, p3);
            var s2     = sketch.AddSegment(line2);
            var c1     = sketch.AddConstraint(new SketchConstraintAngle(s1, s2, 90.0));

            Assert.IsTrue(sketch.SolveConstraints(true));
            Assert.AreEqual(90, line1.GetLine(sketch.Points).Angle(line2.GetLine(sketch.Points)).ToDeg().Abs(), MaxAngleDelta);
        }
        public void Parallel()
        {
            var sketch = Sketch.Create();
            var p1     = sketch.AddPoint(new Pnt2d(-10, -5));
            var p2     = sketch.AddPoint(new Pnt2d(0, 10));
            var line1  = new SketchSegmentLine(p1, p2);
            var s1     = sketch.AddSegment(line1);
            var p3     = sketch.AddPoint(new Pnt2d(-5, -5));
            var p4     = sketch.AddPoint(new Pnt2d(5, 5));
            var line2  = new SketchSegmentLine(p3, p4);
            var s2     = sketch.AddSegment(line2);
            var c1     = sketch.AddConstraint(new SketchConstraintParallel(s1, s2));

            Assert.IsTrue(sketch.SolveConstraints(true));
            Assert.AreEqual(0, line1.GetLine(sketch.Points).Angle(line2.GetLine(sketch.Points)).ToDeg().Abs(), MaxLengthDelta);
        }
Exemple #9
0
        //--------------------------------------------------------------------------------------------------

        void _OnActionFinished(ToolAction toolAction)
        {
            if (toolAction == _PointAction)
            {
                if (_Segment == null)
                {
                    _Points.Add(0, _PointAction.Point);
                    _MergePointIndices[0] = _PointAction.MergeCandidateIndex;
                    _Points.Add(1, _PointAction.Point);
                    _Segment = new SketchSegmentLine(0, 1);

                    _Element            = new SketchEditorSegmentElement(_SketchEditorTool, -1, _Segment, _SketchEditorTool.Transform, _SketchEditorTool.Sketch.Plane);
                    _Element.IsCreating = true;
                    _Element.OnPointsChanged(_Points, null);

                    if (_ValueHudElement == null && _SketchEditorTool.WorkspaceController.HudManager != null)
                    {
                        _ValueHudElement               = _SketchEditorTool.WorkspaceController.HudManager?.CreateElement <ValueHudElement>(this);
                        _ValueHudElement.Label         = "Length:";
                        _ValueHudElement.Units         = ValueUnits.Length;
                        _ValueHudElement.ValueEntered += _ValueHudElement_ValueEntered;
                    }
                    _ValueHudElement?.SetValue(_Segment.Length(_Points));

                    _SketchEditorTool.StatusText = "Select end point for line.";

                    _PointAction.Reset();
                }
                else
                {
                    if (_Points[0].Distance(_PointAction.Point) < 0.001)
                    {
                        _PointAction.Reset();
                        return;
                    }

                    _Points[1]            = _PointAction.Point;
                    _MergePointIndices[1] = _PointAction.MergeCandidateIndex;

                    // Accept point
                    _PointAction.Stop();

                    _SketchEditorTool.FinishSegmentCreation(_Points, _MergePointIndices, new SketchSegment[] { _Segment }, null, _MergePointIndices[1] >= 0 ? -1 : 1);
                }
            }
        }
Exemple #10
0
        public void ConvertLineToBezier()
        {
            var sketch = Sketch.Create();
            int p1     = sketch.AddPoint(new Pnt2d(0, 0));
            int p2     = sketch.AddPoint(new Pnt2d(10, 0));
            var s1     = new SketchSegmentLine(p1, p2);

            sketch.AddSegment(s1);

            Assert.IsTrue(SketchUtils.CanConvertSegment(sketch, s1, typeof(SketchSegmentBezier)));
            var s2 = SketchUtils.ConvertSegment(sketch, s1, typeof(SketchSegmentBezier));

            Assert.AreNotEqual(SketchUtils.ConvertSegmentFailed, s2);

            Assert.AreEqual(1, sketch.Segments.Count);
            Assert.IsInstanceOf <SketchSegmentBezier>(sketch.Segments[1]);
            Assert.AreEqual(p1, sketch.Segments[s2].StartPoint);
            Assert.AreEqual(p2, sketch.Segments[s2].EndPoint);
            Assert.AreEqual(p2 + 1, sketch.Segments[s2].Points[1]);
            Assert.AreEqual(p2 + 2, sketch.Segments[s2].Points[2]);
        }
        public void SmoothCorner_BezierLine()
        {
            var sketch      = Sketch.Create();
            var p1          = sketch.AddPoint(new Pnt2d(0, 0));
            var p2          = sketch.AddPoint(new Pnt2d(2, 9));
            var p3          = sketch.AddPoint(new Pnt2d(10, 10));
            var p4          = sketch.AddPoint(new Pnt2d(15, 0));
            var bezier1     = new SketchSegmentBezier(p1, p2, p3);
            var s1          = sketch.AddSegment(bezier1);
            var line        = new SketchSegmentLine(p3, p4);
            var s2          = sketch.AddSegment(line);
            var constraint1 = new SketchConstraintSmoothCorner(p3, true);
            var c1          = sketch.AddConstraint(constraint1);

            Assert.IsTrue(sketch.SolveConstraints(true));

            var tan1 = new Vec2d(sketch.Points[p2], sketch.Points[p3]);
            var tan2 = new Vec2d(sketch.Points[p3], sketch.Points[p4]);

            Assert.IsTrue(tan1.IsParallel(tan2, 0.01));
        }
        public void TangentLineToCircle()
        {
            var sketch = Sketch.Create();
            var p1     = sketch.AddPoint(new Pnt2d(-20, 0));
            var p2     = sketch.AddPoint(new Pnt2d(20, 30));
            var line   = new SketchSegmentLine(p1, p2);
            var s1     = sketch.AddSegment(line);
            var cp1    = sketch.AddPoint(new Pnt2d(0, 0));
            var cp2    = sketch.AddPoint(new Pnt2d(0, 10));
            var circ   = new SketchSegmentCircle(cp1, cp2);
            var s2     = sketch.AddSegment(circ);
            var c1     = sketch.AddConstraint(new SketchConstraintTangent(s1, s2));

            Assert.IsTrue(sketch.SolveConstraints(true));
            var intersec = new IntAna2d_AnaIntersection(line.GetLine(sketch.Points), circ.GetCircle(sketch.Points));

            Assert.IsTrue(intersec.IsDone());
            if (intersec.NbPoints() > 1)
            {
                Assert.AreEqual(0.0, intersec.Point(1).Value().Distance(intersec.Point(2).Value()), MaxLengthDelta);
            }
        }
Exemple #13
0
        //--------------------------------------------------------------------------------------------------

        public bool Continue(int continueWithPoint)
        {
            // Start the next line with the first point already catched
            _Points[0]            = _SketchEditorTool.Sketch.Points[continueWithPoint];
            _MergePointIndices[0] = continueWithPoint;

            _Element?.Remove();

            _Segment            = new SketchSegmentLine(0, 1);
            _Element            = new SketchEditorSegmentElement(_SketchEditorTool, -1, _Segment, _SketchEditorTool.Transform, _SketchEditorTool.Sketch.Plane);
            _Element.IsCreating = true;
            _Element.OnPointsChanged(_Points, null);

            _PointAction = new SketchPointAction(_SketchEditorTool);
            if (!_SketchEditorTool.WorkspaceController.StartToolAction(_PointAction, false))
            {
                return(false);
            }
            _PointAction.Previewed += _OnActionPreview;
            _PointAction.Finished  += _OnActionFinished;
            return(true);
        }