diff --git a/src/Mod/Fem/Gui/Resources/Fem.qrc b/src/Mod/Fem/Gui/Resources/Fem.qrc index f30970544..801df8911 100755 --- a/src/Mod/Fem/Gui/Resources/Fem.qrc +++ b/src/Mod/Fem/Gui/Resources/Fem.qrc @@ -15,6 +15,7 @@ icons/Fem_Inp_Editor.svg icons/Fem_Material.svg icons/Fem_NewAnalysis.svg + icons/Fem_Purge_Results.svg icons/Fem_Result.svg icons/Fem_ResultDisplacement.svg icons/Fem_ResultStress.svg diff --git a/src/Mod/Fem/Gui/Resources/icons/Fem_Purge_Results.svg b/src/Mod/Fem/Gui/Resources/icons/Fem_Purge_Results.svg new file mode 100644 index 000000000..955c3151c --- /dev/null +++ b/src/Mod/Fem/Gui/Resources/icons/Fem_Purge_Results.svg @@ -0,0 +1,185 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/src/Mod/Fem/Gui/Workbench.cpp b/src/Mod/Fem/Gui/Workbench.cpp index 54a56b9de..367e20f09 100755 --- a/src/Mod/Fem/Gui/Workbench.cpp +++ b/src/Mod/Fem/Gui/Workbench.cpp @@ -69,6 +69,7 @@ Gui::ToolBarItem* Workbench::setupToolBars() const << "Fem_ConstraintPulley" << "Separator" << "Fem_MechanicalJobControl" + << "Fem_PurgeResults" << "Fem_ShowResult"; return root; } @@ -94,6 +95,7 @@ Gui::MenuItem* Workbench::setupMenuBar() const << "Fem_ConstraintPulley" << "Separator" << "Fem_MechanicalJobControl" + << "Fem_PurgeResults" << "Fem_ShowResult"; return root; diff --git a/src/Mod/Fem/MechanicalAnalysis.py b/src/Mod/Fem/MechanicalAnalysis.py index ba168b328..430b308c3 100644 --- a/src/Mod/Fem/MechanicalAnalysis.py +++ b/src/Mod/Fem/MechanicalAnalysis.py @@ -131,6 +131,20 @@ class _CommandMechanicalJobControl: return FreeCADGui.ActiveDocument is not None and FemGui.getActiveAnalysis() is not None +class _CommandPurgeFemResults: + def GetResources(self): + return {'Pixmap': 'Fem_Purge_Results', + 'MenuText': QtCore.QT_TRANSLATE_NOOP("Fem_PurgeResults", "Purge results"), + 'Accel': "S, S", + 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Fem_PurgeResults", "Purge results from an analysis")} + + def Activated(self): + purge_fem_results() + + def IsActive(self): + return FreeCADGui.ActiveDocument is not None and results_present() + + class _CommandMechanicalShowResult: "the Fem JobControl command definition" def GetResources(self): @@ -617,7 +631,36 @@ class _ResultControlTaskPanel: def reject(self): FreeCADGui.Control.closeDialog() +# Helpers + + +def results_present(): + import FemGui + results = False + analysis_members = FemGui.getActiveAnalysis().Member + for o in analysis_members: + if o.isDerivedFrom('Fem::FemResultVector'): + results = True + elif o.isDerivedFrom("Fem::FemResultValue") and o.DataType == 'VonMisesStress': + results = True + return results + + +def purge_fem_results(Analysis=None): + import FemGui + if Analysis is None: + analysis_members = FemGui.getActiveAnalysis().Member + else: + analysis_members = FemGui.Analysis().Member + for o in analysis_members: + if (o.isDerivedFrom('Fem::FemResultVector') or + (o.isDerivedFrom("Fem::FemResultValue") and o.DataType == 'VonMisesStress') or + (o.isDerivedFrom("Fem::FemResultValue") and o.DataType == 'AnalysisStats')): + FreeCAD.ActiveDocument.removeObject(o.Name) + + FreeCADGui.addCommand('Fem_NewMechanicalAnalysis', _CommandNewMechanicalAnalysis()) FreeCADGui.addCommand('Fem_CreateFromShape', _CommandFemFromShape()) FreeCADGui.addCommand('Fem_MechanicalJobControl', _CommandMechanicalJobControl()) +FreeCADGui.addCommand('Fem_PurgeResults', _CommandPurgeFemResults()) FreeCADGui.addCommand('Fem_ShowResult', _CommandMechanicalShowResult())