From 7ace1d9a66bf852cd65081941b7342eefeee2735 Mon Sep 17 00:00:00 2001 From: "Zheng, Lei" Date: Mon, 26 Feb 2024 13:03:25 -0500 Subject: [PATCH] Toposhape/Part: Transfer in FeatureCompound and FeatureRevolution --- src/Mod/Part/App/FeatureCompound.cpp | 17 +++++++++++++++++ src/Mod/Part/App/FeatureRevolution.cpp | 12 +++++++++--- 2 files changed, 26 insertions(+), 3 deletions(-) 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();