From 3dd39db073d905ae84f382618bff9efb8fb83b4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20Tr=C3=B6ger?= Date: Sun, 17 Aug 2025 18:29:31 +0200 Subject: [PATCH] FEM: Purge tool deletes all result objects. Fixes #23028 - Correctly deletes children of pipeline without error on delete - Ensures visualizations are also deleted as they are result objects too - Ensures purge tool uses a transaction, like all tools should --- src/Mod/Fem/App/FemPostGroupExtension.cpp | 7 ++----- src/Mod/Fem/femcommands/commands.py | 2 ++ src/Mod/Fem/femobjects/base_fempostvisualizations.py | 1 + src/Mod/Fem/femresult/resulttools.py | 6 ++++++ 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/Mod/Fem/App/FemPostGroupExtension.cpp b/src/Mod/Fem/App/FemPostGroupExtension.cpp index 5ecad291be..d7f8771c97 100644 --- a/src/Mod/Fem/App/FemPostGroupExtension.cpp +++ b/src/Mod/Fem/App/FemPostGroupExtension.cpp @@ -109,11 +109,8 @@ App::DocumentObject* FemPostGroupExtension::getGroupOfObject(const App::Document void FemPostGroupExtension::onExtendedUnsetupObject() { - // remove all children! - auto document = getExtendedObject()->getDocument(); - for (const auto& obj : Group.getValues()) { - document->removeObject(obj->getNameInDocument()); - } + // remove all children (if not already removed)! + removeObjectsFromDocument(); } bool FemPostGroupExtension::allowObject(App::DocumentObject* obj) diff --git a/src/Mod/Fem/femcommands/commands.py b/src/Mod/Fem/femcommands/commands.py index b167c65068..eb827ee6b1 100644 --- a/src/Mod/Fem/femcommands/commands.py +++ b/src/Mod/Fem/femcommands/commands.py @@ -926,7 +926,9 @@ class _ResultsPurge(CommandManager): def Activated(self): import femresult.resulttools as resulttools + FreeCAD.ActiveDocument.openTransaction("Purge FEM results") resulttools.purge_results(self.active_analysis) + FreeCAD.ActiveDocument.commitTransaction() class _SolverCalculixContextManager: diff --git a/src/Mod/Fem/femobjects/base_fempostvisualizations.py b/src/Mod/Fem/femobjects/base_fempostvisualizations.py index 5c7465d5bc..49797971d5 100644 --- a/src/Mod/Fem/femobjects/base_fempostvisualizations.py +++ b/src/Mod/Fem/femobjects/base_fempostvisualizations.py @@ -80,6 +80,7 @@ class PostVisualization(base_fempythonobject.BaseFemPythonObject): def __init__(self, obj): super().__init__(obj) + self.Type = "Fem::FemPostVisualization" obj.addExtension("App::GroupExtensionPython") self._setup_properties(obj) diff --git a/src/Mod/Fem/femresult/resulttools.py b/src/Mod/Fem/femresult/resulttools.py index 4b4bb2d39e..445143c5aa 100644 --- a/src/Mod/Fem/femresult/resulttools.py +++ b/src/Mod/Fem/femresult/resulttools.py @@ -75,6 +75,12 @@ def purge_results(analysis): analysis.Document.removeObject(m.Name) analysis.Document.recompute() + # remove visulizations + for m in analysis.Group: + if is_of_type(m, "Fem::FemPostVisualization"): + analysis.Document.removeObject(m.Name) + analysis.Document.recompute() + def reset_mesh_deformation(resultobj): """Resets result mesh deformation.