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