Fem: Remove pipeline node from analysis view provider - fixes #11175

This commit is contained in:
marioalexis
2024-01-12 20:21:18 -03:00
committed by Chris Hennes
parent f0a734fed0
commit bdb82b8f8a
4 changed files with 43 additions and 10 deletions

View File

@@ -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");

View File

@@ -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

View File

@@ -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<Fem::FemAnalysis>(grp)) {
analyzeView = Base::freecad_dynamic_cast<ViewProviderFemAnalysis>(
Gui::Application::Instance->getViewProvider(analyze));
}
return analyzeView;
};
} // namespace
bool ViewProviderFemPostPipeline::onDelete(const std::vector<std::string>& 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<Fem::FemAnalysis>(grp)) {
analyzeView = Base::freecad_dynamic_cast<ViewProviderFemAnalysis>(
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

View File

@@ -45,6 +45,7 @@ public:
std::vector<App::DocumentObject*> claimChildren() const override;
std::vector<App::DocumentObject*> claimChildren3D() const override;
void updateData(const App::Property* prop) override;
bool onDelete(const std::vector<std::string>& objs) override;
void onSelectionChanged(const Gui::SelectionChanges& sel) override;
void updateColorBars();
void transformField(char* FieldName, double FieldFactor);