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); }
//-------------------------------------------------------------------------------------------------- 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); } }