Part/Toponaming: Transfer WireJoiner

* Added test for WireJoiner::setOutline()

Signed-off-by: CalligaroV <vincenzo.calligaro@gmail.com>
This commit is contained in:
CalligaroV
2024-03-04 20:26:33 +01:00
parent 0f3362575b
commit bbe2d8664b

View File

@@ -125,4 +125,116 @@ TEST_F(WireJoinerTest, addShape)
EXPECT_EQ(wirevTDS.getSubTopoShapes(TopAbs_EDGE).size(), 4);
}
TEST_F(WireJoinerTest, setOutline)
{
// Arrange
// Create various edges that will be used to create wires for the WireJoiner objects testes
auto edge1 {BRepBuilderAPI_MakeEdge(gp_Pnt(0.0, 0.0, 0.0), gp_Pnt(1.0, 0.0, 0.0)).Edge()};
auto edge2 {BRepBuilderAPI_MakeEdge(gp_Pnt(1.0, 0.0, 0.0), gp_Pnt(1.0, 1.0, 0.0)).Edge()};
auto edge3 {BRepBuilderAPI_MakeEdge(gp_Pnt(1.0, 1.0, 0.0), gp_Pnt(0.0, 0.0, 0.0)).Edge()};
auto edge4 {BRepBuilderAPI_MakeEdge(gp_Pnt(-0.1, -0.1, 0.0), gp_Pnt(-0.1, 1.1, 0.0)).Edge()};
auto edge5 {BRepBuilderAPI_MakeEdge(gp_Pnt(-0.1, 1.1, 0.0), gp_Pnt(1.1, 1.1, 0.0)).Edge()};
auto edge6 {BRepBuilderAPI_MakeEdge(gp_Pnt(1.1, 1.1, 0.0), gp_Pnt(-0.1, -0.1, 0.0)).Edge()};
// A vector of edges used as argument for wjNoOutline.addShape()
std::vector<TopoShape> edgesNoOutline = {edge1, edge2, edge3, edge4, edge5, edge6};
// A vector of edges used as argument for wjOutline.addShape()
std::vector<TopoShape> edgesOutline = {edge1, edge2, edge3, edge4, edge5, edge6};
// To see the effect of setOutline() it is necessary to set the user parameter "Iteration"
// to a value, in this case, less than zero before the WireObjects are initializaed.
// To see the correct value for this parameter refer to method WireJoinerP::canShowShape()
auto hParam {App::GetApplication().GetParameterGroupByPath(
"User parameter:BaseApp/Preferences/WireJoiner")};
auto catchIteration {hParam->GetInt("Iteration", 0)};
hParam->SetInt("Iteration", -1);
// A document where there will WireJoiner.Build() will be called having setOutline() set to
// false
auto docNoOutline {App::GetApplication().getActiveDocument()};
auto _docNameOutline {App::GetApplication().getUniqueDocumentName("docOutline")};
App::GetApplication().newDocument(_docNameOutline.c_str(), "docOutlineUser");
// A document where there will WireJoiner.Build() will be called having setOutline() set to true
auto docOutline {App::GetApplication().getActiveDocument()};
// A WireJoiner object where the value of setOutline() will be changed but no shapes will be
// built
auto wjNoBuild {WireJoiner()};
// A WireJoiner object where setOutline() will be set to false
auto wjNoOutline {WireJoiner()};
// A WireJoiner object where setOutline() will be set to true
auto wjOutline {WireJoiner()};
// Reset the parameter to its previous value.
hParam->SetInt("Iteration", catchIteration);
// Act
// Changing only the value of setOutline(). This should set wjNoBuild.IsDone() to false
wjNoBuild.setOutline(true);
// We can see the effect of setOutline by searching, among all the DocumentObjects created by
// the logic, if there are any with a label containing "removed"
// Testing first the Document where WireJoiner::Build() will be executed with setOutline set to
// false
App::GetApplication().setActiveDocument(docNoOutline);
wjNoOutline.addShape(edgesNoOutline);
wjNoOutline.setOutline(false);
wjNoOutline.Build();
auto objsInDoc {docNoOutline->getObjects()};
auto foundRemovedNoOutline {false};
for (const auto& obj : objsInDoc) {
foundRemovedNoOutline =
(std::string(obj->Label.getValue()).find("removed") != std::string::npos);
if (foundRemovedNoOutline) {
break;
}
}
// Then testing the Document where WireJoiner::Build() will be executed with setOutline set to
// true
App::GetApplication().setActiveDocument(docOutline);
wjOutline.addShape(wjNoOutline.Shape());
// same as wjOutline.setOutline(true);
wjOutline.setOutline();
wjOutline.Build();
objsInDoc = docOutline->getObjects();
auto foundRemovedOutline {false};
for (const auto& obj : objsInDoc) {
foundRemovedOutline =
(std::string(obj->Label.getValue()).find("removed") != std::string::npos);
if (foundRemovedOutline) {
break;
}
}
// Assert
// Without calling wjNoBuild.Build() the value of wjNoBuild.IsDone() should be false even if we
// only changed the value of setOutline()
EXPECT_FALSE(wjNoBuild.IsDone());
// In a document where WireJoiner::Build() is executed with setOutline() set to false there
// shouldn't be DocumentObjects with "removed" in their label
EXPECT_FALSE(foundRemovedNoOutline);
// In a document where WireJoiner::Build() is executed with setOutline() set to true there
// should be at least a DocumentObject with "removed" in its label
EXPECT_TRUE(foundRemovedOutline);
}
// NOLINTEND(readability-magic-numbers,cppcoreguidelines-avoid-magic-numbers)