From 142f2aff396e4375f1aa1529e783b266df975f0d Mon Sep 17 00:00:00 2001 From: Florian Foinant-Willig Date: Mon, 30 Sep 2024 21:09:48 +0200 Subject: [PATCH] [PD Helix] allow refinement to fail --- src/Mod/PartDesign/App/FeatureAddSub.cpp | 14 +++++++++++--- src/Mod/PartDesign/App/FeatureAddSub.h | 7 ++++++- src/Mod/PartDesign/App/FeatureHelix.cpp | 4 ++-- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/Mod/PartDesign/App/FeatureAddSub.cpp b/src/Mod/PartDesign/App/FeatureAddSub.cpp index ec5034e228..c0c8c9f8fd 100644 --- a/src/Mod/PartDesign/App/FeatureAddSub.cpp +++ b/src/Mod/PartDesign/App/FeatureAddSub.cpp @@ -64,13 +64,21 @@ short FeatureAddSub::mustExecute() const return PartDesign::Feature::mustExecute(); } - -TopoShape FeatureAddSub::refineShapeIfActive(const TopoShape& oldShape) const +TopoShape FeatureAddSub::refineShapeIfActive(const TopoShape& oldShape, const RefineErrorPolicy onError) const { if (this->Refine.getValue()) { TopoShape shape(oldShape); // this->fixShape(shape); // Todo: Not clear that this is required - return shape.makeElementRefine(); + try{ + return shape.makeElementRefine(); + } + catch (Standard_Failure& err) { + if(onError == RefineErrorPolicy::Warn){ + Base::Console().Warning((std::string("Refine failed: ") + err.GetMessageString()).c_str()); + } else { + throw; + } + } } return oldShape; } diff --git a/src/Mod/PartDesign/App/FeatureAddSub.h b/src/Mod/PartDesign/App/FeatureAddSub.h index 30864a5f41..0b12326f24 100644 --- a/src/Mod/PartDesign/App/FeatureAddSub.h +++ b/src/Mod/PartDesign/App/FeatureAddSub.h @@ -40,6 +40,11 @@ public: Subtractive }; + enum class RefineErrorPolicy { + Raise = 0, + Warn + }; + FeatureAddSub(); Type getAddSubType(); @@ -54,7 +59,7 @@ public: protected: Type addSubType{Additive}; - TopoShape refineShapeIfActive(const TopoShape&) const; + TopoShape refineShapeIfActive(const TopoShape& oldShape, const RefineErrorPolicy onError = RefineErrorPolicy::Raise) const; }; using FeatureAddSubPython = App::FeaturePythonT; diff --git a/src/Mod/PartDesign/App/FeatureHelix.cpp b/src/Mod/PartDesign/App/FeatureHelix.cpp index db2d3b673a..72650f2bec 100644 --- a/src/Mod/PartDesign/App/FeatureHelix.cpp +++ b/src/Mod/PartDesign/App/FeatureHelix.cpp @@ -272,7 +272,7 @@ App::DocumentObjectExecReturn* Helix::execute() return new App::DocumentObjectExecReturn(QT_TRANSLATE_NOOP("Exception", "Error: Result has multiple solids")); } - boolOp = refineShapeIfActive(boolOp); + boolOp = refineShapeIfActive(boolOp, RefineErrorPolicy::Warn); Shape.setValue(getSolid(boolOp)); } else if (getAddSubType() == FeatureAddSub::Subtractive) { @@ -301,7 +301,7 @@ App::DocumentObjectExecReturn* Helix::execute() return new App::DocumentObjectExecReturn(QT_TRANSLATE_NOOP("Exception", "Error: Result has multiple solids")); } - boolOp = refineShapeIfActive(boolOp); + boolOp = refineShapeIfActive(boolOp, RefineErrorPolicy::Warn); Shape.setValue(getSolid(boolOp)); }