| | |
| |
|
| | #include <gtest/gtest.h> |
| | #include "PartTestHelpers.h" |
| |
|
| | #include <src/App/InitApplication.h> |
| | #include <App/Document.h> |
| | #include <Mod/Part/App/Attacher.h> |
| |
|
| | using namespace Part; |
| | using namespace Attacher; |
| | using namespace PartTestHelpers; |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | class AttacherTest: public ::testing::Test, public PartTestHelpers::PartTestHelperClass |
| | { |
| | protected: |
| | static void SetUpTestSuite() |
| | { |
| | tests::initApplication(); |
| | } |
| |
|
| | void SetUp() override |
| | { |
| | createTestDoc(); |
| | _boxes[1]->MapReversed.setValue(false); |
| | _boxes[1]->AttachmentSupport.setValue(_boxes[0]); |
| | _boxes[1]->MapPathParameter.setValue(0.0); |
| | _boxes[1]->MapMode.setValue("ObjectXY"); |
| | _boxes[1]->recomputeFeature(); |
| | } |
| |
|
| | void TearDown() override |
| | { |
| | App::GetApplication().closeDocument(_docName.c_str()); |
| | } |
| |
|
| | App::Document* getDocument() const |
| | { |
| | return _doc; |
| | } |
| |
|
| | protected: |
| | }; |
| |
|
| | TEST_F(AttacherTest, TestSetReferences) |
| | { |
| | auto& attacher = _boxes[1]->attacher(); |
| | EXPECT_EQ(attacher.getRefObjects().size(), 1); |
| | } |
| |
|
| | TEST_F(AttacherTest, TestSuggestMapModes) |
| | { |
| | auto& attacher = _boxes[1]->attacher(); |
| | SuggestResult result; |
| | attacher.suggestMapModes(result); |
| | EXPECT_EQ(result.allApplicableModes.size(), 4); |
| | EXPECT_EQ(result.allApplicableModes[0], mmObjectXY); |
| | EXPECT_EQ(result.allApplicableModes[1], mmObjectXZ); |
| | EXPECT_EQ(result.allApplicableModes[2], mmObjectYZ); |
| | EXPECT_EQ(result.allApplicableModes[3], mmInertialCS); |
| | } |
| |
|
| | TEST_F(AttacherTest, TestGetShapeType) |
| | { |
| | auto& attacher = _boxes[1]->attacher(); |
| | auto subObjects = _boxes[1]->getSubObjects(); |
| | auto shapeType = attacher.getShapeType(_boxes[1], "Vertex2"); |
| | EXPECT_EQ(shapeType, TopAbs_COMPSOLID); |
| | } |
| |
|
| | TEST_F(AttacherTest, TestGetInertialPropsOfShape) |
| | { |
| | auto& attacher = _boxes[1]->attacher(); |
| | std::vector<const TopoShape*> result; |
| | auto faces = _boxes[1]->Shape.getShape().getSubTopoShapes(TopAbs_FACE); |
| | result.emplace_back(&faces[0]); |
| | auto shapeType = attacher.getInertialPropsOfShape(result); |
| | EXPECT_EQ(result.size(), 1); |
| | EXPECT_EQ(shapeType.Mass(), 6.0); |
| | } |
| |
|
| | TEST_F(AttacherTest, TestGetRefObjects) |
| | { |
| | auto& attacher = _boxes[1]->attacher(); |
| | auto docObjects = attacher.getRefObjects(); |
| | EXPECT_EQ(docObjects.size(), 1); |
| | EXPECT_STREQ(docObjects.front()->getNameInDocument(), "Part__Box"); |
| | } |
| |
|
| | TEST_F(AttacherTest, TestCalculateAttachedPlacement) |
| | { |
| | auto& attacher = _boxes[1]->attacher(); |
| | const Base::Placement orig; |
| | auto placement = attacher.calculateAttachedPlacement(orig); |
| | EXPECT_EQ(orig.getPosition().x, 0); |
| | EXPECT_EQ(orig.getPosition().y, 0); |
| | EXPECT_EQ(orig.getPosition().z, 0); |
| | EXPECT_EQ(placement.getPosition().x, 0); |
| | EXPECT_EQ(placement.getPosition().y, 0); |
| | EXPECT_EQ(placement.getPosition().z, 0); |
| | } |
| |
|
| | TEST_F(AttacherTest, TestAllStringModesValid) |
| | { |
| | |
| | const char* modes[] = { |
| | "Deactivated", |
| | "Translate", |
| | "ObjectXY", |
| | "ObjectXZ", |
| | "ObjectYZ", |
| | "FlatFace", |
| | "TangentPlane", |
| | "NormalToEdge", |
| | "FrenetNB", |
| | "FrenetTN", |
| | "FrenetTB", |
| | "Concentric", |
| | "SectionOfRevolution", |
| | "ThreePointsPlane", |
| | "ThreePointsNormal", |
| | "Folding", |
| |
|
| | "ObjectX", |
| | "ObjectY", |
| | "ObjectZ", |
| | "AxisOfCurvature", |
| | "Directrix1", |
| | "Directrix2", |
| | "Asymptote1", |
| | "Asymptote2", |
| | "Tangent", |
| | "Normal", |
| | "Binormal", |
| | "TangentU", |
| | "TangentV", |
| | "TwoPointLine", |
| | "IntersectionLine", |
| | "ProximityLine", |
| |
|
| | "ObjectOrigin", |
| | "Focus1", |
| | "Focus2", |
| | "OnEdge", |
| | "CenterOfCurvature", |
| | "CenterOfMass", |
| | "IntersectionPoint", |
| | "Vertex", |
| | "ProximityPoint1", |
| | "ProximityPoint2", |
| |
|
| | "AxisOfInertia1", |
| | "AxisOfInertia2", |
| | "AxisOfInertia3", |
| |
|
| | "InertialCS", |
| |
|
| | "FaceNormal", |
| |
|
| | "OZX", |
| | "OZY", |
| | "OXY", |
| | "OXZ", |
| | "OYZ", |
| | "OYX", |
| |
|
| | "ParallelPlane", |
| | }; |
| | int index = 0; |
| | for (auto mode : modes) { |
| | _boxes[1]->MapMode.setValue(mode); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_STREQ(_boxes[1]->MapMode.getValueAsString(), mode); |
| | EXPECT_EQ(_boxes[1]->MapMode.getValue(), index); |
| | index++; |
| | } |
| | } |
| |
|
| | TEST_F(AttacherTest, TestAllModesBoundaries) |
| | { |
| | _boxes[1]->MapMode.setValue(mmTranslate); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 1, 2, 3))); |
| | _boxes[1]->MapMode.setValue(mmObjectXY); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 1, 2, 3))); |
| | _boxes[1]->MapMode.setValue(mmObjectXZ); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, -3, 0, 1, 0, 2))); |
| | _boxes[1]->MapMode.setValue(mmObjectYZ); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| |
|
| | _boxes[1]->MapMode.setValue(mmParallelPlane); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| | _boxes[1]->MapMode.setValue(mmFlatFace); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| | _boxes[1]->MapMode.setValue(mmTangentPlane); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| | _boxes[1]->MapMode.setValue(mm1Normal); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| |
|
| | _boxes[1]->MapMode.setValue(mmFrenetNB); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| | _boxes[1]->MapMode.setValue(mmFrenetTN); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| | _boxes[1]->MapMode.setValue(mmFrenetTB); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| | _boxes[1]->MapMode.setValue(mmConcentric); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| | _boxes[1]->MapMode.setValue(mmRevolutionSection); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| | _boxes[1]->MapMode.setValue(mmThreePointsNormal); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| | _boxes[1]->MapMode.setValue(mmThreePointsPlane); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| | _boxes[1]->MapMode.setValue(mmFolding); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| |
|
| | _boxes[1]->MapMode.setValue(mm1AxisX); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| | _boxes[1]->MapMode.setValue(mm1AxisY); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| | _boxes[1]->MapMode.setValue(mm1AxisZ); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| | _boxes[1]->MapMode.setValue(mm1AxisCurv); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| | _boxes[1]->MapMode.setValue(mm1Directrix1); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| | _boxes[1]->MapMode.setValue(mm1Directrix2); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| | _boxes[1]->MapMode.setValue(mm1Asymptote1); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| | _boxes[1]->MapMode.setValue(mm1Asymptote2); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| | _boxes[1]->MapMode.setValue(mm1Tangent); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| | _boxes[1]->MapMode.setValue(mm1TangentU); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| | _boxes[1]->MapMode.setValue(mm1TangentV); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| | _boxes[1]->MapMode.setValue(mm1TwoPoints); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| | _boxes[1]->MapMode.setValue(mm1Intersection); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| | _boxes[1]->MapMode.setValue(mm1Proximity); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| |
|
| | _boxes[1]->MapMode.setValue(mm0Origin); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| | _boxes[1]->MapMode.setValue(mm0Focus1); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| | _boxes[1]->MapMode.setValue(mm0Focus2); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| | _boxes[1]->MapMode.setValue(mm0OnEdge); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| | _boxes[1]->MapMode.setValue(mm0CenterOfCurvature); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| | _boxes[1]->MapMode.setValue(mm0CenterOfMass); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| | _boxes[1]->MapMode.setValue(mm1Intersection); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| | _boxes[1]->MapMode.setValue(mm0Vertex); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| | _boxes[1]->MapMode.setValue(mm0ProximityPoint1); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| | _boxes[1]->MapMode.setValue(mm0ProximityPoint2); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| |
|
| | _boxes[1]->MapMode.setValue(mm1AxisInertia1); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| | _boxes[1]->MapMode.setValue(mm1AxisInertia2); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| | _boxes[1]->MapMode.setValue(mm1AxisInertia3); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2))); |
| |
|
| | _boxes[1]->MapMode.setValue(mmInertialCS); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE( |
| | boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0.5, 1, 1.5, 3.5, 2, 3.5)) |
| | ); |
| |
|
| | _boxes[1]->MapMode.setValue(mm1FaceNormal); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE( |
| | boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0.5, 1, 1.5, 3.5, 2, 3.5)) |
| | ); |
| |
|
| | _boxes[1]->MapMode.setValue(mmOZX); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE( |
| | boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0.5, 1, 1.5, 3.5, 2, 3.5)) |
| | ); |
| | _boxes[1]->MapMode.setValue(mmOZY); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE( |
| | boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0.5, 1, 1.5, 3.5, 2, 3.5)) |
| | ); |
| | _boxes[1]->MapMode.setValue(mmOXY); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE( |
| | boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0.5, 1, 1.5, 3.5, 2, 3.5)) |
| | ); |
| | _boxes[1]->MapMode.setValue(mmOXZ); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE( |
| | boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0.5, 1, 1.5, 3.5, 2, 3.5)) |
| | ); |
| | _boxes[1]->MapMode.setValue(mmOYZ); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE( |
| | boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0.5, 1, 1.5, 3.5, 2, 3.5)) |
| | ); |
| | _boxes[1]->MapMode.setValue(mmOYX); |
| | _boxes[1]->recomputeFeature(); |
| | EXPECT_TRUE( |
| | boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0.5, 1, 1.5, 3.5, 2, 3.5)) |
| | ); |
| | } |
| |
|