| | |
| |
|
| | #include <gtest/gtest.h> |
| |
|
| | #include "Mod/Part/App/FeatureRevolution.h" |
| | #include <src/App/InitApplication.h> |
| |
|
| | #include "Base/Interpreter.h" |
| |
|
| | #include "BRepBuilderAPI_MakeEdge.hxx" |
| |
|
| | #include "TopoDS_Iterator.hxx" |
| |
|
| | #include "PartTestHelpers.h" |
| |
|
| | class FeatureRevolutionTest: public ::testing::Test, public PartTestHelpers::PartTestHelperClass |
| | { |
| | protected: |
| | static void SetUpTestSuite() |
| | { |
| | tests::initApplication(); |
| | } |
| |
|
| |
|
| | void SetUp() override |
| | { |
| | createTestDoc(); |
| | _revolution = _doc->addObject<Part::Revolution>(); |
| | PartTestHelpers::rectangle(len, wid, "Rect1"); |
| | _revolution->Source.setValue(_doc->getObjects().back()); |
| | _revolution->Axis.setValue(0, 1, 0); |
| | } |
| |
|
| | void TearDown() override |
| | {} |
| |
|
| | |
| | Part::Revolution* _revolution = nullptr; |
| | |
| | const double len = 3; |
| | const double wid = 4; |
| | const double ext1 = 10; |
| | |
| | }; |
| |
|
| | TEST_F(FeatureRevolutionTest, testExecute) |
| | { |
| | |
| | double puckVolume = len * len * std::numbers::pi * wid; |
| | |
| | _revolution->execute(); |
| | Part::TopoShape ts = _revolution->Shape.getValue(); |
| | double volume = PartTestHelpers::getVolume(ts.getShape()); |
| | Base::BoundBox3d bb = ts.getBoundBox(); |
| | |
| | EXPECT_FLOAT_EQ(volume, puckVolume); |
| | EXPECT_TRUE(PartTestHelpers::boxesMatch(bb, Base::BoundBox3d(-len, 0, -len, len, wid, len))); |
| | } |
| |
|
| | TEST_F(FeatureRevolutionTest, testExecuteBase) |
| | { |
| | |
| | double rad = len + 1.0; |
| | double rad2 = 1.0; |
| | double outerPuckVolume = rad * rad * std::numbers::pi * wid; |
| | double innerPuckVolume = rad2 * rad2 * std::numbers::pi * wid; |
| | _revolution->Base.setValue(Base::Vector3d(len + 1, 0, 0)); |
| | |
| | _revolution->execute(); |
| | Part::TopoShape ts = _revolution->Shape.getValue(); |
| | double volume = PartTestHelpers::getVolume(ts.getShape()); |
| | Base::BoundBox3d bb = ts.getBoundBox(); |
| | |
| | EXPECT_FLOAT_EQ(volume, outerPuckVolume - innerPuckVolume); |
| | EXPECT_TRUE(PartTestHelpers::boxesMatch(bb, Base::BoundBox3d(0, 0, -wid, wid * 2, wid, wid))); |
| | } |
| |
|
| |
|
| | TEST_F(FeatureRevolutionTest, testAxis) |
| | { |
| | |
| | double puckVolume = wid * wid * std::numbers::pi * len; |
| | _revolution->Axis.setValue(Base::Vector3d(1, 0, 0)); |
| | |
| | _revolution->execute(); |
| | Part::TopoShape ts = _revolution->Shape.getValue(); |
| | double volume = PartTestHelpers::getVolume(ts.getShape()); |
| | Base::BoundBox3d bb = ts.getBoundBox(); |
| | |
| | EXPECT_FLOAT_EQ(volume, puckVolume); |
| | EXPECT_TRUE(PartTestHelpers::boxesMatch(bb, Base::BoundBox3d(0, -wid, -wid, len, wid, wid))); |
| | } |
| |
|
| | TEST_F(FeatureRevolutionTest, testAxisLink) |
| | { |
| | |
| | BRepBuilderAPI_MakeEdge e1(gp_Pnt(0, 0, 0), gp_Pnt(0, 0, ext1)); |
| | auto edge = _doc->addObject<Part::Feature>("Edge"); |
| | edge->Shape.setValue(e1); |
| | _revolution->AxisLink.setValue(edge); |
| | |
| | |
| | _revolution->execute(); |
| | Part::TopoShape ts = _revolution->Shape.getValue(); |
| | double volume = PartTestHelpers::getVolume(ts.getShape()); |
| | Base::BoundBox3d bb = ts.getBoundBox(); |
| | |
| | double puckVolume = 0; |
| | EXPECT_FLOAT_EQ(volume, puckVolume); |
| | EXPECT_TRUE( |
| | PartTestHelpers::boxesMatch(bb, Base::BoundBox3d(-ext1 / 2, -ext1 / 2, 0, ext1 / 2, ext1 / 2, 0)) |
| | ); |
| | } |
| |
|
| | TEST_F(FeatureRevolutionTest, testSymmetric) |
| | { |
| | |
| | double puckVolume = len * len * std::numbers::pi * wid; |
| | _revolution->Symmetric.setValue(true); |
| | |
| | _revolution->execute(); |
| | Part::TopoShape ts = _revolution->Shape.getValue(); |
| | double volume = PartTestHelpers::getVolume(ts.getShape()); |
| | Base::BoundBox3d bb = ts.getBoundBox(); |
| | |
| | EXPECT_FLOAT_EQ(volume, puckVolume); |
| | EXPECT_TRUE(PartTestHelpers::boxesMatch(bb, Base::BoundBox3d(-len, 0, -len, len, wid, len))); |
| | } |
| |
|
| | TEST_F(FeatureRevolutionTest, testAngle) |
| | { |
| | |
| | double puckVolume = len * len * std::numbers::pi * wid; |
| | _revolution->Angle.setValue(90); |
| | |
| | _revolution->execute(); |
| | Part::TopoShape ts = _revolution->Shape.getValue(); |
| | double volume = PartTestHelpers::getVolume(ts.getShape()); |
| | Base::BoundBox3d bb = ts.getBoundBox(); |
| | |
| | EXPECT_FLOAT_EQ(volume, puckVolume / 4); |
| | EXPECT_TRUE(PartTestHelpers::boxesMatch(bb, Base::BoundBox3d(0, 0, -len, len, wid, 0))); |
| | } |
| |
|
| | TEST_F(FeatureRevolutionTest, testMustExecute) |
| | { |
| | |
| | EXPECT_TRUE(_revolution->mustExecute()); |
| | |
| | _doc->recompute(); |
| | |
| | EXPECT_FALSE(_revolution->mustExecute()); |
| | |
| | _revolution->Base.setValue(_revolution->Base.getValue()); |
| | |
| | EXPECT_TRUE(_revolution->mustExecute()); |
| | |
| | _doc->recompute(); |
| | |
| | EXPECT_FALSE(_revolution->mustExecute()); |
| | |
| | _revolution->Solid.setValue(Standard_True); |
| | |
| | EXPECT_TRUE(_revolution->mustExecute()); |
| | |
| | _doc->recompute(); |
| | |
| | EXPECT_FALSE(_revolution->mustExecute()); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| |
|
| | TEST_F(FeatureRevolutionTest, testGetProviderName) |
| | { |
| | |
| | _revolution->execute(); |
| | const char* name = _revolution->getViewProviderName(); |
| | |
| | EXPECT_STREQ(name, "PartGui::ViewProviderRevolution"); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|