Download tests/src/Mod/Part/App/PartFeatures.cpp from AbdulElahGwaith/FreeCAD: direct link, hf CLI and curl.
- Browser
- Download file 7.21 kB
-
https://huggingface.co/AbdulElahGwaith/FreeCAD/resolve/main/tests/src/Mod/Part/App/PartFeatures.cpp
- Command line
-
hf download hf://AbdulElahGwaith/FreeCAD/tests/src/Mod/Part/App/PartFeatures.cpp
-
curl -L -o PartFeatures.cpp https://huggingface.co/AbdulElahGwaith/FreeCAD/resolve/main/tests/src/Mod/Part/App/PartFeatures.cpp
7.21 kB
| // SPDX-License-Identifier: LGPL-2.1-or-later | |
| using namespace Part; | |
| using namespace PartTestHelpers; | |
| class PartFeaturesTest: public ::testing::Test, public PartTestHelperClass | |
| { | |
| protected: | |
| static void SetUpTestSuite() | |
| { | |
| tests::initApplication(); | |
| } | |
| void SetUp() override | |
| { | |
| createTestDoc(); | |
| } | |
| void TearDown() override | |
| {} | |
| }; | |
| TEST_F(PartFeaturesTest, testRuledSurface) | |
| { | |
| // Arrange | |
| auto _edge1 = _doc->addObject<Line>(); | |
| auto _edge2 = _doc->addObject<Line>(); | |
| _edge1->X1.setValue(0); | |
| _edge1->Y1.setValue(0); | |
| _edge1->Z1.setValue(0); | |
| _edge1->X2.setValue(2); | |
| _edge1->Y2.setValue(0); | |
| _edge1->Z2.setValue(0); | |
| _edge2->X1.setValue(0); | |
| _edge2->Y1.setValue(2); | |
| _edge2->Z1.setValue(0); | |
| _edge2->X2.setValue(2); | |
| _edge2->Y2.setValue(2); | |
| _edge2->Z2.setValue(0); | |
| auto _ruled = _doc->addObject<RuledSurface>(); | |
| _ruled->Curve1.setValue(_edge1); | |
| _ruled->Curve2.setValue(_edge2); | |
| // Act | |
| _ruled->execute(); | |
| TopoShape ts = _ruled->Shape.getShape(); | |
| double volume = getVolume(ts.getShape()); | |
| double area = getArea(ts.getShape()); | |
| Base::BoundBox3d bb = ts.getBoundBox(); | |
| auto elementMap = ts.getElementMap(); | |
| // Assert shape is correct | |
| EXPECT_DOUBLE_EQ(volume, 0.0); | |
| EXPECT_DOUBLE_EQ(area, 4.0); | |
| EXPECT_TRUE(boxesMatch(bb, Base::BoundBox3d(0, 0, 0, 2, 2, 0))); | |
| // Assert element map is correct | |
| EXPECT_EQ(9, elementMap.size()); | |
| } | |
| TEST_F(PartFeaturesTest, testLoft) | |
| { | |
| // Arrange | |
| auto _plane1 = _doc->addObject<Plane>(); | |
| _plane1->Length.setValue(4); | |
| _plane1->Width.setValue(4); | |
| auto _plane2 = _doc->addObject<Plane>(); | |
| _plane2->Length.setValue(4); | |
| _plane2->Width.setValue(4); | |
| _plane2->Placement.setValue(Base::Placement(Base::Vector3d(0, 0, 2), Base::Rotation())); | |
| auto _loft = _doc->addObject<Loft>(); | |
| _loft->Sections.setValues({_plane1, _plane2}); | |
| _loft->Solid.setValue((true)); | |
| // Act | |
| _loft->execute(); | |
| TopoShape ts = _loft->Shape.getShape(); | |
| double volume = getVolume(ts.getShape()); | |
| double area = getArea(ts.getShape()); | |
| Base::BoundBox3d bb = ts.getBoundBox(); | |
| auto elementMap = ts.getElementMap(); | |
| // Assert shape is correct | |
| EXPECT_DOUBLE_EQ(volume, 32.0); | |
| EXPECT_DOUBLE_EQ(area, 64.0); | |
| EXPECT_TRUE(boxesMatch(bb, Base::BoundBox3d(0, 0, 0, 4, 4, 2))); | |
| // Assert element map is correct | |
| EXPECT_EQ(26, elementMap.size()); | |
| } | |
| TEST_F(PartFeaturesTest, testSweep) | |
| { | |
| // Arrange | |
| auto _edge1 = _doc->addObject<Line>(); | |
| _edge1->X1.setValue(0); | |
| _edge1->Y1.setValue(0); | |
| _edge1->Z1.setValue(0); | |
| _edge1->X2.setValue(0); | |
| _edge1->Y2.setValue(0); | |
| _edge1->Z2.setValue(3); | |
| auto _plane1 = _doc->addObject<Plane>(); | |
| _plane1->Length.setValue(4); | |
| _plane1->Width.setValue(4); | |
| auto _sweep = _doc->addObject<Sweep>(); | |
| _sweep->Sections.setValues({_plane1}); | |
| _sweep->Spine.setValue(_edge1); | |
| _sweep->Solid.setValue((false)); | |
| // Act | |
| _sweep->execute(); | |
| TopoShape ts = _sweep->Shape.getShape(); | |
| double volume = getVolume(ts.getShape()); | |
| double area = getArea(ts.getShape()); | |
| Base::BoundBox3d bb = ts.getBoundBox(); | |
| auto elementMap = ts.getElementMap(); | |
| // Assert shape is correct | |
| EXPECT_DOUBLE_EQ(volume, 32.0); | |
| EXPECT_DOUBLE_EQ(area, 48.0); | |
| EXPECT_TRUE(boxesMatch(bb, Base::BoundBox3d(0, 0, 0, 4, 4, 3))); | |
| // Assert element map is correct | |
| EXPECT_EQ(24, elementMap.size()); | |
| } | |
| TEST_F(PartFeaturesTest, testThickness) | |
| { | |
| // Arrange | |
| auto _thickness = _doc->addObject<Thickness>(); | |
| _thickness->Faces.setValue(_boxes[0], {"Face1"}); | |
| _thickness->Value.setValue(0.25); | |
| _thickness->Join.setValue("Intersection"); | |
| // Act | |
| _thickness->execute(); | |
| TopoShape ts = _thickness->Shape.getShape(); | |
| double volume = getVolume(ts.getShape()); | |
| double area = getArea(ts.getShape()); | |
| Base::BoundBox3d bb = ts.getBoundBox(); | |
| auto elementMap = ts.getElementMap(); | |
| // Assert shape is correct | |
| EXPECT_DOUBLE_EQ(volume, 4.9375); | |
| EXPECT_DOUBLE_EQ(area, 42.5); | |
| EXPECT_TRUE(boxesMatch(bb, Base::BoundBox3d(0, -0.25, -0.25, 1.25, 2.25, 3.25))); | |
| // Assert element map is correct | |
| EXPECT_EQ(51, elementMap.size()); | |
| } | |
| TEST_F(PartFeaturesTest, testRefine) | |
| { | |
| // Arrange | |
| auto _fuse = _doc->addObject<Part::Fuse>(); | |
| _fuse->Base.setValue(_boxes[0]); | |
| _fuse->Tool.setValue(_boxes[3]); | |
| _fuse->Refine.setValue(false); | |
| _fuse->execute(); | |
| Part::TopoShape fusedts = _fuse->Shape.getShape(); | |
| auto _refine = _doc->addObject<Refine>(); | |
| _refine->Source.setValue(_fuse); | |
| // Act | |
| _refine->execute(); | |
| TopoShape ts = _refine->Shape.getShape(); | |
| double volume = getVolume(ts.getShape()); | |
| double area = getArea(ts.getShape()); | |
| Base::BoundBox3d bb = ts.getBoundBox(); | |
| auto elementMap = ts.getElementMap(); | |
| auto edges = fusedts.getSubTopoShapes(TopAbs_EDGE); | |
| auto refinedEdges = ts.getSubTopoShapes(TopAbs_EDGE); | |
| // Assert shape is correct | |
| EXPECT_EQ(edges.size(), 20); | |
| EXPECT_EQ(refinedEdges.size(), 12); | |
| EXPECT_DOUBLE_EQ(volume, 12.0); | |
| EXPECT_DOUBLE_EQ(area, 38.0); | |
| EXPECT_TRUE(PartTestHelpers::boxesMatch(bb, Base::BoundBox3d(0, 0, 0, 1, 4, 3))); | |
| // Assert element map is correct | |
| EXPECT_EQ(0, elementMap.size()); // TODO: Expect this to be non-zero. | |
| } | |
| TEST_F(PartFeaturesTest, testReverse) | |
| { | |
| // Arrange | |
| auto _reverse = _doc->addObject<Reverse>(); | |
| _reverse->Source.setValue(_boxes[0]); | |
| // Act | |
| _reverse->execute(); | |
| TopoShape ts = _reverse->Shape.getShape(); | |
| double volume = getVolume(ts.getShape()); | |
| double area = getArea(ts.getShape()); | |
| Base::BoundBox3d bb = ts.getBoundBox(); | |
| auto elementMap = ts.getElementMap(); | |
| auto faces = ts.getSubTopoShapes(TopAbs_FACE); | |
| auto originalFaces = _boxes[0]->Shape.getShape().getSubTopoShapes(TopAbs_FACE); | |
| // Assert shape is correct | |
| EXPECT_EQ(faces[0].getShape().Orientation(), TopAbs_FORWARD); | |
| EXPECT_EQ(faces[1].getShape().Orientation(), TopAbs_REVERSED); | |
| EXPECT_EQ(faces[2].getShape().Orientation(), TopAbs_FORWARD); | |
| EXPECT_EQ(faces[3].getShape().Orientation(), TopAbs_REVERSED); | |
| EXPECT_EQ(faces[4].getShape().Orientation(), TopAbs_FORWARD); | |
| EXPECT_EQ(faces[5].getShape().Orientation(), TopAbs_REVERSED); | |
| EXPECT_EQ(originalFaces[0].getShape().Orientation(), TopAbs_REVERSED); | |
| EXPECT_EQ(originalFaces[1].getShape().Orientation(), TopAbs_FORWARD); | |
| EXPECT_EQ(originalFaces[2].getShape().Orientation(), TopAbs_REVERSED); | |
| EXPECT_EQ(originalFaces[3].getShape().Orientation(), TopAbs_FORWARD); | |
| EXPECT_EQ(originalFaces[4].getShape().Orientation(), TopAbs_REVERSED); | |
| EXPECT_EQ(originalFaces[5].getShape().Orientation(), TopAbs_FORWARD); | |
| EXPECT_DOUBLE_EQ(volume, 6.0); | |
| EXPECT_DOUBLE_EQ(area, 22.0); | |
| EXPECT_TRUE(PartTestHelpers::boxesMatch(bb, Base::BoundBox3d(0, 0, 0, 1, 2, 3))); | |
| // Assert element map is correct | |
| EXPECT_EQ(0, elementMap.size()); // TODO: Expect this to be non-zero. | |
| } | |