From bdb82b8f8a35e2b6b0630b3e4101a6bddc164b14 Mon Sep 17 00:00:00 2001 From: marioalexis Date: Fri, 12 Jan 2024 20:21:18 -0300 Subject: [PATCH] Fem: Remove pipeline node from analysis view provider - fixes #11175 --- src/Mod/Fem/Gui/ViewProviderAnalysis.cpp | 12 ++++++ src/Mod/Fem/Gui/ViewProviderAnalysis.h | 3 ++ .../Fem/Gui/ViewProviderFemPostPipeline.cpp | 37 ++++++++++++++----- src/Mod/Fem/Gui/ViewProviderFemPostPipeline.h | 1 + 4 files changed, 43 insertions(+), 10 deletions(-) diff --git a/src/Mod/Fem/Gui/ViewProviderAnalysis.cpp b/src/Mod/Fem/Gui/ViewProviderAnalysis.cpp index 6eff36df47..cd47968d34 100644 --- a/src/Mod/Fem/Gui/ViewProviderAnalysis.cpp +++ b/src/Mod/Fem/Gui/ViewProviderAnalysis.cpp @@ -85,6 +85,13 @@ void ViewProviderFemHighlighter::highlightView(Gui::ViewProviderDocumentObject* } } +void ViewProviderFemHighlighter::removeView(Gui::ViewProviderDocumentObject* view) +{ + if (view) { + annotate->removeChild(view->getRoot()); + } +} + // ---------------------------------------------------------------------------- /* TRANSLATOR FemGui::ViewProviderFemAnalysis */ @@ -115,6 +122,11 @@ void ViewProviderFemAnalysis::highlightView(Gui::ViewProviderDocumentObject* vie extension.highlightView(view); } +void ViewProviderFemAnalysis::removeView(Gui::ViewProviderDocumentObject* view) +{ + extension.removeView(view); +} + bool ViewProviderFemAnalysis::doubleClicked() { Gui::Command::assureWorkbench("FemWorkbench"); diff --git a/src/Mod/Fem/Gui/ViewProviderAnalysis.h b/src/Mod/Fem/Gui/ViewProviderAnalysis.h index 011d0ad903..e5d869d387 100644 --- a/src/Mod/Fem/Gui/ViewProviderAnalysis.h +++ b/src/Mod/Fem/Gui/ViewProviderAnalysis.h @@ -41,6 +41,7 @@ public: void attach(ViewProviderFemAnalysis*); void highlightView(Gui::ViewProviderDocumentObject*); + void removeView(Gui::ViewProviderDocumentObject*); private: SoSeparator* annotate; @@ -88,6 +89,8 @@ public: void highlightView(Gui::ViewProviderDocumentObject*); + void removeView(Gui::ViewProviderDocumentObject*); + /** @name Drag and drop */ //@{ /// Returns true if the view provider generally supports dragging objects diff --git a/src/Mod/Fem/Gui/ViewProviderFemPostPipeline.cpp b/src/Mod/Fem/Gui/ViewProviderFemPostPipeline.cpp index be75b54680..7641b201df 100644 --- a/src/Mod/Fem/Gui/ViewProviderFemPostPipeline.cpp +++ b/src/Mod/Fem/Gui/ViewProviderFemPostPipeline.cpp @@ -107,18 +107,35 @@ void ViewProviderFemPostPipeline::updateFunctionSize() } } +namespace +{ +// Function to get the analysis container related to the object +ViewProviderFemAnalysis* getAnalyzeView(App::DocumentObject* obj) +{ + ViewProviderFemAnalysis* analyzeView = nullptr; + App::DocumentObject* grp = App::GroupExtension::getGroupOfObject(obj); + + if (Fem::FemAnalysis* analyze = Base::freecad_dynamic_cast(grp)) { + analyzeView = Base::freecad_dynamic_cast( + Gui::Application::Instance->getViewProvider(analyze)); + } + + return analyzeView; +}; +} // namespace + +bool ViewProviderFemPostPipeline::onDelete(const std::vector& objs) +{ + ViewProviderFemAnalysis* analyzeView = getAnalyzeView(this->getObject()); + if (analyzeView) { + analyzeView->removeView(this); + } + + return ViewProviderFemPostObject::onDelete(objs); +} + void ViewProviderFemPostPipeline::onSelectionChanged(const Gui::SelectionChanges& sel) { - auto getAnalyzeView = [](App::DocumentObject* obj) { - ViewProviderFemAnalysis* analyzeView = nullptr; - App::DocumentObject* grp = App::GroupExtension::getGroupOfObject(obj); - if (Fem::FemAnalysis* analyze = Base::freecad_dynamic_cast(grp)) { - analyzeView = Base::freecad_dynamic_cast( - Gui::Application::Instance->getViewProvider(analyze)); - } - return analyzeView; - }; - // If a FemPostObject is selected in the document tree we must refresh its // color bar. // But don't do this if the object is invisible because other objects with a diff --git a/src/Mod/Fem/Gui/ViewProviderFemPostPipeline.h b/src/Mod/Fem/Gui/ViewProviderFemPostPipeline.h index 4edf71c8a4..a4df722186 100644 --- a/src/Mod/Fem/Gui/ViewProviderFemPostPipeline.h +++ b/src/Mod/Fem/Gui/ViewProviderFemPostPipeline.h @@ -45,6 +45,7 @@ public: std::vector claimChildren() const override; std::vector claimChildren3D() const override; void updateData(const App::Property* prop) override; + bool onDelete(const std::vector& objs) override; void onSelectionChanged(const Gui::SelectionChanges& sel) override; void updateColorBars(); void transformField(char* FieldName, double FieldFactor);