Toposhape/Part: Transfer in FeatureCompound and FeatureRevolution

This commit is contained in:
Zheng, Lei
2024-02-26 13:03:25 -05:00
committed by Chris Hennes
parent 50d254e7a2
commit 7ace1d9a66
2 changed files with 26 additions and 3 deletions

View File

@@ -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;
@@ -95,6 +100,18 @@ 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());

View File

@@ -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,20 @@ 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();