public void FlangesOnSameFaceWithNoGaps() { /* The Flange modifier shouldn't allow this: * 1. The Unfold modifier will proberly have problems to find bend section, since faces are shared between bend sections. * 2. It cannot be produces, to have seperate flanges there must be a minimum gap between them (by cutting, edging, etc) */ var box = Box.Create(10.0, 10.0, 1.0); var body = Body.Create(box); var flangeSheet1 = FlangeSheet.Create(body, new SubshapeReference(SubshapeType.Face, box.Guid, 1), 45.0, 5.0); flangeSheet1.StartGap = 7.5; flangeSheet1.EndGap = 0.0; flangeSheet1.Relief = FlangeSheet.ReliefFlags.Rectangular; var flangeSheet2 = FlangeSheet.Create(body, flangeSheet1.GetSubshapeReference(SubshapeType.Face, 7), 45.0, 5.0); flangeSheet2.StartGap = 5.0; flangeSheet2.EndGap = 0.0; flangeSheet2.Relief = FlangeSheet.ReliefFlags.Rectangular | FlangeSheet.ReliefFlags.OppositeSide; var flangeSheet3 = FlangeSheet.Create(body, flangeSheet2.GetSubshapeReference(SubshapeType.Face, 12), 45.0, 5.0); flangeSheet3.StartGap = 0.0; flangeSheet3.EndGap = 0.0; Assume.That(flangeSheet3.Make(Shape.MakeFlags.None)); Assert.That(flangeSheet3.Make(Shape.MakeFlags.DebugOutput)); Assert.That(ModelCompare.CompareShape(flangeSheet3, Path.Combine(_BasePath, "FlangesOnSameFaceWithNoGaps"))); }
public void FlangeNamedSubshapes() { var box = Box.Create(10.0, 10.0, 1.0); var body = Body.Create(box); var flangeSheet = FlangeSheet.Create(body, new SubshapeReference(SubshapeType.Face, box.Guid, 1), 45.0, 5.0); Assume.That(ModelCompare.CompareShape(flangeSheet, Path.Combine(_BasePath, "FlangeNamedSubshapes"))); var faces = flangeSheet.GetBRep().Faces(); _TestSubshape(9, "Flange", 0); _TestSubshape(10, "Flange", 1); _TestSubshape(11, "Flange", 2); _TestSubshape(12, "Flange", 3); _TestSubshape(13, "Flange", 5); _TestSubshape(8, "Bend", 3); _TestSubshape(7, "Bend", 2); _TestSubshape(6, "Bend", 1); _TestSubshape(5, "Bend", 0); void _TestSubshape(int faceIndex, string expectedName, int expectedIndex) { var subshapeReference = flangeSheet.GetSubshapeReference(SubshapeType.Face, faceIndex); Assert.That(subshapeReference.Name, Is.EqualTo(expectedName)); Assert.That(subshapeReference.Index, Is.EqualTo(expectedIndex)); var foundFaces = flangeSheet.FindSubshape(subshapeReference, null); Assert.That(foundFaces.Count, Is.EqualTo(1)); Assert.That(foundFaces[0].IsSame(faces[faceIndex])); } }
public void CreateUnfoldManual() { var ctx = Context.Current; var box = Box.Create(10.0, 10.0, 1.0); var body = TestGeomGenerator.CreateBody(box); var flangeSheet = FlangeSheet.Create(body, new SubshapeReference(SubshapeType.Face, box.Guid, 1), 70.0, 10.0, 1.0); flangeSheet.Relief = FlangeSheet.ReliefFlags.Rectangular; ctx.UndoHandler.Commit(); ctx.ViewportController.ZoomFitAll(); ctx.WorkspaceController.Selection.SelectEntity(body); ctx.WorkspaceController.StartTool(new CreateUnfoldSheetTool(body, CreateUnfoldSheetTool.Flags.ForceManualSelect)); Assert.That(ctx.WorkspaceController.CurrentTool, Is.Not.Null); // Check selection filter ctx.ViewportController.MouseMove(new Point(279, 413)); AssertHelper.IsSameViewport(Path.Combine(_BasePath, "CreateUnfoldManual1")); // Select correct face ctx.ViewportController.MouseMove(new Point(100, 250)); AssertHelper.IsSameViewport(Path.Combine(_BasePath, "CreateUnfoldManual2")); ctx.ViewportController.MouseDown(); ctx.ViewportController.MouseUp(false); ctx.ViewportController.MouseMove(new Point(0, 0)); ctx.ViewportController.ZoomFitAll(); AssertHelper.IsSameViewport(Path.Combine(_BasePath, "CreateUnfoldManual3")); }
public void EdgeSelectionFailure() { // This test shall show that two edges which differ only in location // are properly selectable var ctx = Context.Current; var box = Box.Create(10.0, 10.0, 5.0); var body = Body.Create(box); var flangeSheet = FlangeSheet.Create(body, new SubshapeReference(SubshapeType.Face, box.Guid, 1), 45.0, 10.0, 5.0); flangeSheet.Relief = FlangeSheet.ReliefFlags.Rectangular; ctx.ViewportController.ZoomFitAll(); var shape = Fillet.Create(body); shape.Radius = 2.0; var tool = new EdgeModifierTool(shape); ctx.WorkspaceController.StartTool(tool); Assert.Multiple(() => { ctx.ViewportController.MouseMove(new Point(120, 200)); AssertHelper.IsSameViewport(Path.Combine(_BasePath, "EdgeSelectionFailure1")); ctx.ViewportController.MouseDown(); ctx.ViewportController.MouseUp(false); ctx.ViewportController.MouseMove(new Point(0, 0)); AssertHelper.IsSameViewport(Path.Combine(_BasePath, "EdgeSelectionFailure2")); }); }
public void CreateTwoFlangesOnTheSameFace() { // The problem of this test case ist: // We've selected the right face beside the flangeSheet2. The face reference was translated // to the parent face, which was splitted. We get the first of the split face always, // which is the left face. The flange is on the false side. var ctx = Context.Current; var box = Box.Create(20.0, 20.0, 1.0); var body = TestGeomGenerator.CreateBody(box); var flangeSheet1 = FlangeSheet.Create(body, new SubshapeReference(SubshapeType.Face, box.Guid, 3), 20.0, 5.0, 1.0); flangeSheet1.Reverse = true; var flangeSheet2 = FlangeSheet.Create(body, new SubshapeReference(SubshapeType.Face, flangeSheet1.Guid, "Flange", 5), 70.0, 10.0, 1.0); flangeSheet2.StartGap = 8.0; flangeSheet2.EndGap = 8.0; ctx.UndoHandler.Commit(); ctx.ViewportController.ZoomFitAll(); ctx.WorkspaceController.Selection.SelectEntity(body); ctx.WorkspaceController.StartTool(new CreateFlangeSheetTool(body)); ctx.ViewportController.MouseMove(new Point(370, 225)); AssertHelper.IsSameViewport(Path.Combine(_BasePath, "CreateTwoFlangesOnTheSameFace1")); ctx.ViewportController.MouseDown(); ctx.ViewportController.MouseUp(false); ctx.ViewportController.ZoomFitAll(); ctx.ViewportController.MouseMove(new Point(0, 0)); AssertHelper.IsSameViewport(Path.Combine(_BasePath, "CreateTwoFlangesOnTheSameFace2")); }
public void GapFacesNamedSubshapes() { var box = Box.Create(10.0, 10.0, 1.0); var body = Body.Create(box); var flangeSheet = FlangeSheet.Create(body, new SubshapeReference(SubshapeType.Face, box.Guid, 1), 45.0, 5.0); flangeSheet.StartGap = 2.0; flangeSheet.EndGap = 5.0; Assume.That(flangeSheet.Make(Shape.MakeFlags.None)); Assert.Multiple(() => { var faceRef = flangeSheet.GetSubshapeReference(SubshapeType.Face, 7); Assert.That(faceRef, Is.EqualTo(new SubshapeReference(SubshapeType.Face, flangeSheet.Guid, "StartGap", 0)), "Test 1"); faceRef = flangeSheet.GetSubshapeReference(SubshapeType.Face, 5); Assert.That(faceRef, Is.EqualTo(new SubshapeReference(SubshapeType.Face, flangeSheet.Guid, "EndGap", 0)), "Test 2"); // Reversed flangeSheet.Reverse = true; Assert.That(flangeSheet.Make(Shape.MakeFlags.None)); faceRef = flangeSheet.GetSubshapeReference(SubshapeType.Face, 5); Assert.That(faceRef, Is.EqualTo(new SubshapeReference(SubshapeType.Face, flangeSheet.Guid, "StartGap", 0)), "Test 3"); faceRef = flangeSheet.GetSubshapeReference(SubshapeType.Face, 7); Assert.That(faceRef, Is.EqualTo(new SubshapeReference(SubshapeType.Face, flangeSheet.Guid, "EndGap", 0)), "Test 4"); // With relief flangeSheet.Relief = FlangeSheet.ReliefFlags.Rectangular; Assert.That(flangeSheet.Make(Shape.MakeFlags.None)); faceRef = flangeSheet.GetSubshapeReference(SubshapeType.Face, 5); Assert.That(faceRef, Is.EqualTo(new SubshapeReference(SubshapeType.Face, flangeSheet.Guid, "StartGap", 0)), "Test 5"); faceRef = flangeSheet.GetSubshapeReference(SubshapeType.Face, 7); Assert.That(faceRef, Is.EqualTo(new SubshapeReference(SubshapeType.Face, flangeSheet.Guid, "EndGap", 0)), "Test 6"); // Start only flangeSheet.EndGap = 0; Assert.That(flangeSheet.Make(Shape.MakeFlags.None)); faceRef = flangeSheet.GetSubshapeReference(SubshapeType.Face, 5); Assert.That(faceRef, Is.EqualTo(new SubshapeReference(SubshapeType.Face, flangeSheet.Guid, "StartGap", 0)), "Test 7"); Assert.That(flangeSheet.FindSubshape(faceRef, null), Is.EqualTo(flangeSheet.FindSubshape(new SubshapeReference(SubshapeType.Face, flangeSheet.Guid, "EndGap", 0), null)), "Test 8"); // No gap flangeSheet.StartGap = 0; Assert.That(flangeSheet.Make(Shape.MakeFlags.None)); Assert.That(flangeSheet.FindSubshape(new SubshapeReference(SubshapeType.Face, flangeSheet.Guid, "StartGap", 0), null), Is.Null, "Test 9"); Assert.That(flangeSheet.FindSubshape(new SubshapeReference(SubshapeType.Face, flangeSheet.Guid, "EndGap", 0), null), Is.Null, "Test 10"); // End only flangeSheet.EndGap = 5.0; Assert.That(flangeSheet.Make(Shape.MakeFlags.None)); faceRef = flangeSheet.GetSubshapeReference(SubshapeType.Face, 8); Assert.That(faceRef, Is.EqualTo(new SubshapeReference(SubshapeType.Face, flangeSheet.Guid, "EndGap", 0)), "Test 11"); Assert.That(flangeSheet.FindSubshape(faceRef, null), Is.EqualTo(flangeSheet.FindSubshape(new SubshapeReference(SubshapeType.Face, flangeSheet.Guid, "StartGap", 0), null)), "Test 12"); // Skipped flangeSheet.IsSkipped = true; Assert.That(flangeSheet.FindSubshape(new SubshapeReference(SubshapeType.Face, flangeSheet.Guid, "StartGap", 0), null), Is.Not.Null, "Test 13"); Assert.That(flangeSheet.FindSubshape(new SubshapeReference(SubshapeType.Face, flangeSheet.Guid, "EndGap", 0), null), Is.Not.Null, "Test 14"); }); }
public void NoBend() { var box = Box.Create(10.0, 10.0, 1.0); var body = Body.Create(box); var flangeSheet = FlangeSheet.Create(body, new SubshapeReference(SubshapeType.Face, box.Guid, 1), 0.0, 5); Assert.IsTrue(ModelCompare.CompareShape(flangeSheet, Path.Combine(_BasePath, "NoBend"))); }
public void SecondFlangeOnFlangeSide() { var source = TestData.GetBodyFromBRep(Path.Combine(_BasePath, "SecondFlangeOnFlangeSide_Source.brep")); Assume.That(source, Is.Not.Null); var flangeSheet = FlangeSheet.Create(source, new SubshapeReference(SubshapeType.Face, source.Shape.Guid, 2), 45.0, 5.0); Assert.IsTrue(ModelCompare.CompareShape(flangeSheet, Path.Combine(_BasePath, "SecondFlangeOnFlangeSide"))); }
public void GapStart() { var box = Box.Create(10.0, 10.0, 1.0); var body = Body.Create(box); var flangeSheet = FlangeSheet.Create(body, new SubshapeReference(SubshapeType.Face, box.Guid, 1), 45.0, 5.0); flangeSheet.StartGap = 2.5; Assert.IsTrue(ModelCompare.CompareShape(flangeSheet, Path.Combine(_BasePath, "GapStart"))); }
public void ReliefRectangular() { var box = Box.Create(10.0, 10.0, 1.0); var body = Body.Create(box); var flangeSheet = FlangeSheet.Create(body, new SubshapeReference(SubshapeType.Face, box.Guid, 1), 45.0, 5.0, 1.0); flangeSheet.Relief = FlangeSheet.ReliefFlags.Rectangular; Assert.IsTrue(ModelCompare.CompareShape(flangeSheet, Path.Combine(_BasePath, "ReliefRectangular"))); }
//-------------------------------------------------------------------------------------------------- void _OnActionFinished(ToolAction toolAction) { bool finished = false; var selectAction = toolAction as SelectSubshapeAction; Debug.Assert(selectAction != null); if (selectAction.SelectedSubshapeType == SubshapeTypes.Face) { var face = TopoDS.Face(selectAction.SelectedSubshape); var brepAdaptor = new BRepAdaptor_Surface(face, true); if (brepAdaptor.GetGeomType() != GeomAbs_SurfaceType.GeomAbs_Plane) { StatusText = "Selected face is not a plane type surface."; } else { selectAction.Stop(); Stop(); finished = true; var faceRef = _TargetShape.GetSubshapeReference(_TargetShape.GetTransformedBRep(), face); if (faceRef == null) { Messages.Error("A subshape reference could not be produced for this face."); return; } if (_Mode == ToolMode.CreateNew) { // Create new var flangeSheet = FlangeSheet.Create(_TargetBody, faceRef); if (flangeSheet != null) { InteractiveContext.Current.UndoHandler.Commit(); InteractiveContext.Current.WorkspaceController.Selection.SelectEntity(_TargetBody); } } else if (_Mode == ToolMode.ReselectFace) { // Reselected face _FlangeToChange.Face = faceRef; _FlangeToChange.Invalidate(); InteractiveContext.Current.UndoHandler.Commit(); } } } if (!finished) { selectAction.Reset(); } WorkspaceController.Invalidate(); }
public void GapToBig() { var box = Box.Create(10.0, 10.0, 1.0); var body = Body.Create(box); var flangeSheet = FlangeSheet.Create(body, new SubshapeReference(SubshapeType.Face, box.Guid, 1), 45.0, 5.0); flangeSheet.StartGap = 5.0; flangeSheet.EndGap = 5.0; Assert.IsFalse(flangeSheet.Make(Shape.MakeFlags.None)); }
public void Multiple() { var box = Box.Create(10.0, 10.0, 1.0); var body = Body.Create(box); var flangeSheet1 = FlangeSheet.Create(body, box.GetSubshapeReference(SubshapeType.Face, 1), 20.0, 5.0); var flangeSheet2 = FlangeSheet.Create(body, box.GetSubshapeReference(SubshapeType.Face, 3), 40.0, 5.0); var flangeSheet3 = FlangeSheet.Create(body, box.GetSubshapeReference(SubshapeType.Face, 0), 60.0, 5.0); var flangeSheet4 = FlangeSheet.Create(body, box.GetSubshapeReference(SubshapeType.Face, 2), 80.0, 5.0); var flangeSheet5 = FlangeSheet.Create(body, flangeSheet4.GetSubshapeReference(SubshapeType.Face, 7), 30.0, 5.0); Assert.IsTrue(ModelCompare.CompareShape(flangeSheet5, Path.Combine(_BasePath, "Multiple"))); }
public void SwappedEdgeDirection() { var box = Box.Create(10.0, 10.0, 1.0); var body = Body.Create(box); var flangeSheet = FlangeSheet.Create(body, new SubshapeReference(SubshapeType.Face, box.Guid, 2), 45.0, 5.0); flangeSheet.StartGap = 2.0; flangeSheet.EndGap = 5.0; flangeSheet.Relief = FlangeSheet.ReliefFlags.Rectangular; Assert.IsTrue(ModelCompare.CompareShape(flangeSheet, Path.Combine(_BasePath, "SwappedEdgeDirection"))); }
public void CreateUnfoldAutomatic() { var ctx = Context.Current; var box = Box.Create(10.0, 10.0, 1.0); var body = Body.Create(box); var flangeSheet = FlangeSheet.Create(body, new SubshapeReference(SubshapeType.Face, box.Guid, 1), 70.0, 10.0, 1.0); flangeSheet.Relief = FlangeSheet.ReliefFlags.Rectangular; ctx.WorkspaceController.Selection.SelectEntity(body); ctx.WorkspaceController.StartTool(new CreateUnfoldSheetTool(body)); Assert.That(ctx.WorkspaceController.CurrentTool, Is.Null); ctx.ViewportController.ZoomFitAll(); ctx.ViewportController.MouseMove(new Point(300, 350)); AssertHelper.IsSameViewport(Path.Combine(_BasePath, "CreateUnfoldAutomatic")); }
public void TwoFlangesOnSameFace() { var box = Box.Create(10.0, 10.0, 1.0); var body = Body.Create(box); var flangeSheet1 = FlangeSheet.Create(body, new SubshapeReference(SubshapeType.Face, box.Guid, 1), 45.0, 5.0); flangeSheet1.StartGap = 7.5; flangeSheet1.EndGap = 0.5; flangeSheet1.Relief = FlangeSheet.ReliefFlags.Rectangular; var flangeSheet2 = FlangeSheet.Create(body, flangeSheet1.GetSubshapeReference(SubshapeType.Face, 7), 45.0, 5.0); flangeSheet2.StartGap = 5.0; flangeSheet2.EndGap = 0.5; flangeSheet2.Relief = FlangeSheet.ReliefFlags.Rectangular | FlangeSheet.ReliefFlags.OppositeSide; var flangeSheet3 = FlangeSheet.Create(body, flangeSheet2.GetSubshapeReference(SubshapeType.Face, 6), 45.0, 5.0); flangeSheet3.StartGap = 1.0; flangeSheet3.EndGap = 1.0; Assert.That(ModelCompare.CompareShape(flangeSheet3, Path.Combine(_BasePath, "TwoFlangesOnSameFace"))); }
public void CreateSketchOnBoundFace() { var ctx = Context.Current; var box = Box.Create(10, 20, 2); var body = Body.Create(box); body.Position = new Pnt(5, 5, 0); var flange = FlangeSheet.Create(body, new SubshapeReference(SubshapeType.Face, box.Guid, 2), 45); flange.Reverse = true; ctx.WorkspaceController.Selection.SelectEntity(body); ctx.ViewportController.ZoomFitAll(); var createImprintTool = new CreateImprintTool(body, Imprint.ImprintMode.Cutout); Assert.That(ctx.WorkspaceController.StartTool(createImprintTool)); Assert.That(createImprintTool, Is.Not.Null); Assert.Multiple(() => { ctx.MoveTo(180, 180); AssertHelper.IsSameViewport(Path.Combine(_BasePath, "CreateSketchOnBoundFace01"), 1.0); ctx.SelectAt(180, 180); AssertHelper.IsSameViewport(Path.Combine(_BasePath, "CreateSketchOnBoundFace02"), 1.0); var sketchEditTool = ctx.WorkspaceController.CurrentTool as SketchEditorTool; Assert.That(sketchEditTool, Is.Not.Null); sketchEditTool.StartSegmentCreation <SketchSegmentCircleCreator>(); ctx.ClickAt(250, 250); // Center point ctx.ClickAt(200, 250); // Rim point AssertHelper.IsSameViewport(Path.Combine(_BasePath, "CreateSketchOnBoundFace03"), 1.0); }); }