public void PointOnSegmentCircle()
        {
            var sketch = Sketch.Create();
            var p1     = sketch.AddPoint(new Pnt2d(3, -10));
            var p2     = sketch.AddPoint(new Pnt2d(3, 10));
            var circle = new SketchSegmentCircle(p1, p2);
            var s1     = sketch.AddSegment(circle);
            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 SketchConstraintPointOnSegment(p3, s1));

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

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

            // Out of range
            sketch.Points[p3] = new Pnt2d(18, 18);
            Assert.IsTrue(sketch.SolveConstraints(true));
            pointOnCurve = new Geom2dAPI_ProjectPointOnCurve(sketch.Points[p3], circle.MakeCurve(sketch.Points));
            Assert.AreEqual(2, pointOnCurve.NbPoints());
            Assert.AreEqual(0.0, pointOnCurve.Distance(2), MaxLengthDelta);
        }
Example #2
0
        //--------------------------------------------------------------------------------------------------

        void _AddCircleSegment(SketchSegmentCircle circleSegment)
        {
            var p1     = _Sketch.Points[circleSegment.CenterPoint];
            var radius = circleSegment.Radius(_Sketch.Points);

            var entity = new DxfDomCircle("0", p1, radius);

            _Document.Entities.Add(entity);
        }
        public void EqualCircles()
        {
            var sketch  = Sketch.Create();
            var p1      = sketch.AddPoint(new Pnt2d(0, -10));
            var p2      = sketch.AddPoint(new Pnt2d(0, 10));
            var circle1 = new SketchSegmentCircle(p1, p2);
            var s1      = sketch.AddSegment(circle1);
            var p3      = sketch.AddPoint(new Pnt2d(-5, -5));
            var p4      = sketch.AddPoint(new Pnt2d(5, 5));
            var circle2 = new SketchSegmentCircle(p3, p4);
            var s2      = sketch.AddSegment(circle2);
            var c1      = sketch.AddConstraint(new SketchConstraintEqual(s1, s2));

            Assert.IsTrue(sketch.SolveConstraints(true));
            Assert.AreEqual(circle1.Radius(sketch.Points), circle2.Radius(sketch.Points), MaxLengthDelta);
        }
        //--------------------------------------------------------------------------------------------------

        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 SketchSegmentCircle(0, 1);

                    _Marker = new Marker(_SketchEditorTool.WorkspaceController, Marker.Styles.Bitmap | Marker.Styles.Topmost, Marker.BallImage);
                    _Marker.Set(_PointAction.Point, _SketchEditorTool.Sketch.Plane);

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

                    _SketchEditorTool.WorkspaceController.Invalidate();

                    _SketchEditorTool.StatusText = "Select any rim point of the circle.";

                    _PointAction.Reset();
                }
                else
                {
                    if (_Points[0].Distance(_PointAction.Point) < 0.001)
                    {
                        // Minimum length not met
                        _PointAction.Reset();
                        return;
                    }

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

                    _PointAction.Stop();

                    _SketchEditorTool.FinishSegmentCreation(_Points, _MergePointIndices, new SketchSegment[] { _Segment }, null);
                }
            }
        }
        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);
            }
        }