From 89eb6789c4865c34ceee0009b1fa1c136591b08d Mon Sep 17 00:00:00 2001 From: marioalexis Date: Fri, 11 Apr 2025 15:44:32 -0300 Subject: [PATCH] Fem: Update command FEM_SolverRun --- src/Mod/Fem/femcommands/commands.py | 42 ++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/src/Mod/Fem/femcommands/commands.py b/src/Mod/Fem/femcommands/commands.py index fc34ada6d6..2025fbaabd 100644 --- a/src/Mod/Fem/femcommands/commands.py +++ b/src/Mod/Fem/femcommands/commands.py @@ -29,6 +29,9 @@ __url__ = "https://www.freecad.org" # \ingroup FEM # \brief FreeCAD FEM command definitions +from PySide import QtCore +from PySide import QtGui + import FreeCAD import FreeCADGui from FreeCAD import Qt @@ -1162,13 +1165,44 @@ class _SolverRun(CommandManager): "FEM_SolverRun", "Runs the calculations for the selected solver" ) self.is_active = "with_solver" + self.tool = None def Activated(self): - from femsolver.run import run_fem_solver + if self.selobj.Proxy.Type == "Fem::SolverCalculiX": + QtGui.QApplication.setOverrideCursor(QtCore.Qt.WaitCursor) + try: + from femsolver.calculix.calculixtools import CalculiXTools - run_fem_solver(self.selobj) - FreeCADGui.Selection.clearSelection() - FreeCAD.ActiveDocument.recompute() + self.tool = CalculiXTools(self.selobj) + self._conn(self.tool) + self.tool.prepare() + self.tool.compute() + except Exception as e: + QtGui.QApplication.restoreOverrideCursor() + raise + + else: + from femsolver.run import run_fem_solver + + run_fem_solver(self.selobj) + FreeCADGui.Selection.clearSelection() + FreeCAD.ActiveDocument.recompute() + + def _conn(self, tool): + QtCore.QObject.connect( + tool.process, + QtCore.SIGNAL("finished(int, QProcess::ExitStatus)"), + self._process_finished, + ) + + def _process_finished(self, code, status): + if status == QtCore.QProcess.ExitStatus.NormalExit and code == 0: + self.tool.update_properties() + FreeCAD.ActiveDocument.recompute() + QtGui.QApplication.restoreOverrideCursor() + else: + QtGui.QApplication.restoreOverrideCursor() + FreeCAD.Console.PrintError("Process finished with errors. Result not updated\n") class _SolverZ88(CommandManager):