Merge pull request #12628 from bgbsww/bgbsww-toponamingFeatureCompound
Toponaming/Part feature compound and revolution
This commit is contained in:
@@ -54,6 +54,11 @@ short Compound::mustExecute() const
|
||||
App::DocumentObjectExecReturn *Compound::execute()
|
||||
{
|
||||
try {
|
||||
// avoid duplicates without changing the order
|
||||
// See also ViewProviderCompound::updateData
|
||||
std::set<DocumentObject*> tempLinks;
|
||||
|
||||
#ifndef FC_USE_TNP_FIX
|
||||
std::vector<ShapeHistory> history;
|
||||
int countFaces = 0;
|
||||
|
||||
@@ -61,10 +66,6 @@ App::DocumentObjectExecReturn *Compound::execute()
|
||||
TopoDS_Compound comp;
|
||||
builder.MakeCompound(comp);
|
||||
|
||||
// avoid duplicates without changing the order
|
||||
// See also ViewProviderCompound::updateData
|
||||
std::set<DocumentObject*> tempLinks;
|
||||
|
||||
const std::vector<DocumentObject*>& links = Links.getValues();
|
||||
for (auto link : links) {
|
||||
if (link) {
|
||||
@@ -95,6 +96,20 @@ App::DocumentObjectExecReturn *Compound::execute()
|
||||
prop.touch();
|
||||
|
||||
return App::DocumentObject::StdReturn;
|
||||
#else
|
||||
std::vector<TopoShape> shapes;
|
||||
for (auto obj : Links.getValues()) {
|
||||
if (!tempLinks.insert(obj).second) {
|
||||
continue;
|
||||
}
|
||||
auto sh = Feature::getTopoShape(obj);
|
||||
if (!sh.isNull()) {
|
||||
shapes.push_back(sh);
|
||||
}
|
||||
}
|
||||
this->Shape.setValue(TopoShape().makeElementCompound(shapes));
|
||||
return Part::Feature::execute();
|
||||
#endif
|
||||
}
|
||||
catch (Standard_Failure& e) {
|
||||
return new App::DocumentObjectExecReturn(e.GetMessageString());
|
||||
|
||||
@@ -156,7 +156,7 @@ App::DocumentObjectExecReturn *Revolution::execute()
|
||||
TopLoc_Location loc(mov);
|
||||
sourceShape.setShape(sourceShape.getShape().Moved(loc));
|
||||
}
|
||||
|
||||
#ifndef FC_USE_TNP_FIX
|
||||
//"make solid" processing: make faces from wires.
|
||||
Standard_Boolean makeSolid = Solid.getValue() ? Standard_True : Standard_False;
|
||||
if (makeSolid){
|
||||
@@ -189,14 +189,24 @@ App::DocumentObjectExecReturn *Revolution::execute()
|
||||
return new App::DocumentObjectExecReturn("Resulting shape is null");
|
||||
this->Shape.setValue(revolve);
|
||||
return App::DocumentObject::StdReturn;
|
||||
#else
|
||||
TopoShape revolve(0);
|
||||
revolve.makeElementRevolve(sourceShape,
|
||||
revAx,
|
||||
angle,
|
||||
Solid.getValue() ? FaceMakerClass.getValue() : 0);
|
||||
if (revolve.isNull()) {
|
||||
return new App::DocumentObjectExecReturn("Resulting shape is null");
|
||||
}
|
||||
this->Shape.setValue(revolve);
|
||||
return Part::Feature::execute();
|
||||
#endif
|
||||
}
|
||||
catch (Standard_Failure& e) {
|
||||
return new App::DocumentObjectExecReturn(e.GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Part::Revolution::setupObject()
|
||||
{
|
||||
Part::Feature::setupObject();
|
||||
|
||||
@@ -185,6 +185,7 @@ TEST_F(FeaturePartCommonTest, testHistory)
|
||||
_common->execute();
|
||||
hist = _common->History.getValues();
|
||||
// Assert
|
||||
#ifndef FC_USE_TNP_FIX
|
||||
ASSERT_EQ(hist.size(), 2);
|
||||
EXPECT_EQ(hist[0].shapeMap, compare1);
|
||||
EXPECT_EQ(hist[1].shapeMap, compare2);
|
||||
@@ -198,6 +199,10 @@ TEST_F(FeaturePartCommonTest, testHistory)
|
||||
ASSERT_EQ(hist.size(), 2);
|
||||
EXPECT_EQ(hist[0].shapeMap, compare2);
|
||||
EXPECT_EQ(hist[1].shapeMap, compare1);
|
||||
#else
|
||||
ASSERT_EQ(hist.size(),
|
||||
0); // TODO: with TNP enabled, this becomes 0, matches the code. Correct?
|
||||
#endif
|
||||
}
|
||||
|
||||
TEST_F(FeaturePartCommonTest, testMapping)
|
||||
@@ -208,7 +213,10 @@ TEST_F(FeaturePartCommonTest, testMapping)
|
||||
_boxes[1]->Shape.getShape().Tag = 2L;
|
||||
_common->Base.setValue(_boxes[0]);
|
||||
_common->Tool.setValue(_boxes[1]);
|
||||
Part::TopoShape ts1 = _common->Shape.getShape();
|
||||
// Act
|
||||
_common->execute();
|
||||
const Part::TopoShape& ts1 = _common->Shape.getShape();
|
||||
// Assert
|
||||
#ifndef FC_USE_TNP_FIX
|
||||
EXPECT_EQ(ts1.getElementMap().size(), 0);
|
||||
#else
|
||||
|
||||
Reference in New Issue
Block a user