From d4c86acfd4694924e58d82228653cabcff943fe2 Mon Sep 17 00:00:00 2001 From: Bernd Hahnebach Date: Fri, 4 Jan 2019 11:06:17 +0100 Subject: [PATCH] FEM: ccx tools, better error handling on run ccx --- src/Mod/Fem/femcommands/commands.py | 18 +------------- src/Mod/Fem/femtools/ccxtools.py | 37 ++++++++++++++++++++--------- 2 files changed, 27 insertions(+), 28 deletions(-) diff --git a/src/Mod/Fem/femcommands/commands.py b/src/Mod/Fem/femcommands/commands.py index aa129a0dbc..3a003230a9 100644 --- a/src/Mod/Fem/femcommands/commands.py +++ b/src/Mod/Fem/femcommands/commands.py @@ -764,29 +764,13 @@ class _CommandFemSolverRun(CommandManager): import femsolver.run from PySide import QtGui - def load_results(ret_code): - if ret_code == 0: - self.fea.load_results() - elif ret_code == 201: - if self.fea.solver.AnalysisType == 'check': - print('We run into the NOANALYSIS problem!') - # https://forum.freecadweb.org/viewtopic.php?f=18&t=31303&start=10#p260743 - self.fea.load_results() - else: - print("CalculiX failed ccx finished with error {}".format(ret_code)) - self.solver = self.selobj if self.solver.Proxy.Type == 'Fem::FemSolverCalculixCcxTools': print('CalxuliX ccx tools solver!') from femtools import ccxtools self.fea = ccxtools.FemToolsCcx(None, self.solver) self.fea.reset_mesh_purge_results_checked() - message = self.fea.check_prerequisites() - if message: - QtGui.QMessageBox.critical(None, "Missing prerequisite", message) - return - self.fea.finished.connect(load_results) - QtCore.QThreadPool.globalInstance().start(self.fea) + self.fea.run() else: print('Frame work solver!') try: diff --git a/src/Mod/Fem/femtools/ccxtools.py b/src/Mod/Fem/femtools/ccxtools.py index 3620e2f7cc..281f8de0ec 100644 --- a/src/Mod/Fem/femtools/ccxtools.py +++ b/src/Mod/Fem/femtools/ccxtools.py @@ -666,18 +666,33 @@ class FemToolsCcx(QtCore.QRunnable, QtCore.QObject): def run(self): message = self.check_prerequisites() - if not message: - self.write_inp_file() - if self.inp_file_name != "": - FreeCAD.Console.PrintMessage("Writing CalculiX input file completed!\n") - else: - # TODO do not run solver, do not try to read results in a smarter way than an Exception - raise Exception('Error on writing CalculiX input file.\n') - self.ccx_run() + if message: + error_message = "CalculiX was not started due to missing prerequisites:\n{}\n".format(message) + FreeCAD.Console.PrintError(error_message) + if FreeCAD.GuiUp: + QtGui.QMessageBox.critical(None, "Missing prerequisite", error_message) + return False else: - FreeCAD.Console.PrintError("CalculiX was not started due to missing prerequisites:\n{}\n".format(message)) - # ATM it is not possible to start CalculiX if prerequisites are not fulfilled - self.load_results() + self.write_inp_file() + if self.inp_file_name == "": + error_message = "Error on writing CalculiX input file.\n" + FreeCAD.Console.PrintError(error_message) + if FreeCAD.GuiUp: + QtGui.QMessageBox.critical(None, "Error", error_message) + return False + else: + FreeCAD.Console.PrintMessage("Writing CalculiX input file completed.\n") + ret_code = self.ccx_run() + if ret_code != 0: + error_message = "CalculiX finished with error {}".format(ret_code) + FreeCAD.Console.PrintError(error_message) + if FreeCAD.GuiUp: + QtGui.QMessageBox.critical(None, "Error", error_message) + return False + else: + self.load_results() + # TODO: output an error message if there where problems reading the results + return True def has_no_material_assigned(self): if ' *ERROR in calinput: no material was assigned' in self.ccx_stdout: