Ejemplo n.º 1
0
        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"));
        }
Ejemplo n.º 2
0
        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 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 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 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"));
        }
Ejemplo n.º 6
0
        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");
            });
        }
Ejemplo n.º 7
0
        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")));
        }
Ejemplo n.º 8
0
        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")));
        }
Ejemplo n.º 9
0
        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")));
        }
Ejemplo n.º 10
0
        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")));
        }
Ejemplo n.º 11
0
        //--------------------------------------------------------------------------------------------------

        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();
        }
Ejemplo n.º 12
0
        //--------------------------------------------------------------------------------------------------

        /// <summary>
        /// Reselect target face of an flange shape.
        /// </summary>
        public CreateFlangeSheetTool(FlangeSheet flangeToChange)
        {
            _FlangeToChange = flangeToChange;
            Debug.Assert(_FlangeToChange != null);
            _TargetBody = _FlangeToChange.Body;
            Debug.Assert(_TargetBody != null);
            _TargetShape = _FlangeToChange.Operands[0] as Shape;
            Debug.Assert(_TargetShape != null);

            _Mode = ToolMode.ReselectFace;
        }
Ejemplo n.º 13
0
        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));
        }
Ejemplo n.º 14
0
        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")));
        }
Ejemplo n.º 15
0
        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")));
        }
Ejemplo n.º 16
0
        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"));
        }
Ejemplo n.º 17
0
        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")));
        }
Ejemplo n.º 18
0
        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);
            });
        }