diff --git a/src/Mod/Part/App/FeatureCompound.cpp b/src/Mod/Part/App/FeatureCompound.cpp index 28bc3f807f..a8e598cf50 100644 --- a/src/Mod/Part/App/FeatureCompound.cpp +++ b/src/Mod/Part/App/FeatureCompound.cpp @@ -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 tempLinks; + +#ifndef FC_USE_TNP_FIX std::vector history; int countFaces = 0; @@ -95,6 +100,18 @@ App::DocumentObjectExecReturn *Compound::execute() prop.touch(); return App::DocumentObject::StdReturn; +#else + std::vector 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()); diff --git a/src/Mod/Part/App/FeatureRevolution.cpp b/src/Mod/Part/App/FeatureRevolution.cpp index 5667f263e7..9c3d631175 100644 --- a/src/Mod/Part/App/FeatureRevolution.cpp +++ b/src/Mod/Part/App/FeatureRevolution.cpp @@ -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();