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
This commit is contained in:
Stefan Tröger
2025-08-17 18:29:31 +02:00
parent 1a4ff21bdd
commit 70685aaa5d
4 changed files with 11 additions and 5 deletions

View File

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

View File

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

View File

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

View File

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