From 69dfcd2ae694c5e94fc79c5608cc6529c5eff2f0 Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 2 Aug 2017 23:59:41 +0200 Subject: [PATCH] add method to get ccx version and inform user in case of problems --- src/Mod/Fem/FemToolsCcx.py | 19 +++++++++++++++++++ .../Fem/PyGui/_TaskPanelFemSolverCalculix.py | 5 +++++ 2 files changed, 24 insertions(+) diff --git a/src/Mod/Fem/FemToolsCcx.py b/src/Mod/Fem/FemToolsCcx.py index b0ef18e771..68b5bc2eaa 100644 --- a/src/Mod/Fem/FemToolsCcx.py +++ b/src/Mod/Fem/FemToolsCcx.py @@ -202,6 +202,25 @@ class FemToolsCcx(FemTools.FemTools): return p.returncode return -1 + def get_ccx_version(self): + import re + import subprocess + from platform import system + startup_info = None + if system() == "Windows": + # Windows workaround to avoid blinking terminal window + startup_info = subprocess.STARTUPINFO() + startup_info.dwFlags = subprocess.STARTF_USESHOWWINDOW + ccx_stdout = None + ccx_stderr = None + # Now extract the version number + p = subprocess.Popen([self.ccx_binary, '-v'], stdout=subprocess.PIPE, + stderr=subprocess.PIPE, shell=False, + startupinfo=startup_info) + ccx_stdout, ccx_stderr = p.communicate() + m = re.search(r"(\d+).(\d+)", ccx_stdout) + return (int(m.group(1)), int(m.group(2))) + def run(self): ret_code = 0 message = self.check_prerequisites() diff --git a/src/Mod/Fem/PyGui/_TaskPanelFemSolverCalculix.py b/src/Mod/Fem/PyGui/_TaskPanelFemSolverCalculix.py index 08d136e88a..625038319d 100644 --- a/src/Mod/Fem/PyGui/_TaskPanelFemSolverCalculix.py +++ b/src/Mod/Fem/PyGui/_TaskPanelFemSolverCalculix.py @@ -169,6 +169,11 @@ class _TaskPanelFemSolverCalculix: fea.load_results() except: QApplication.restoreOverrideCursor() + majorVersion, minorVersion = fea.get_ccx_version() + if majorVersion == 2 and minorVersion <= 10: + message = "The used CalculiX version {}.{} creates broken output files.\n" \ + "Please upgrade to a newer version.".format(majorVersion, minorVersion) + QtGui.QMessageBox.warning(None, "Upgrade CalculiX", message) raise else: QApplication.restoreOverrideCursor()