From 381ce4a830cace109c365b07bd8827e62eecacb0 Mon Sep 17 00:00:00 2001 From: UR-0 Date: Sun, 14 Mar 2021 13:11:45 +0100 Subject: [PATCH] [FEM] get Gmsh version --- src/Mod/Fem/Gui/Resources/ui/MeshGmsh.ui | 32 +++++++++++++++++++-- src/Mod/Fem/femmesh/gmshtools.py | 31 ++++++++++++++++++++ src/Mod/Fem/femtaskpanels/task_mesh_gmsh.py | 16 ++++++++++- 3 files changed, 75 insertions(+), 4 deletions(-) diff --git a/src/Mod/Fem/Gui/Resources/ui/MeshGmsh.ui b/src/Mod/Fem/Gui/Resources/ui/MeshGmsh.ui index 607be25b97..249eee0c5a 100644 --- a/src/Mod/Fem/Gui/Resources/ui/MeshGmsh.ui +++ b/src/Mod/Fem/Gui/Resources/ui/MeshGmsh.ui @@ -7,7 +7,7 @@ 0 0 400 - 413 + 439 @@ -151,9 +151,9 @@ QFormLayout::AllNonFixedFieldsGrow - + - + @@ -172,6 +172,32 @@ + + + + + 0 + 0 + + + + Gmsh version + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + diff --git a/src/Mod/Fem/femmesh/gmshtools.py b/src/Mod/Fem/femmesh/gmshtools.py index 427a6d038f..d64a6e9d8e 100644 --- a/src/Mod/Fem/femmesh/gmshtools.py +++ b/src/Mod/Fem/femmesh/gmshtools.py @@ -30,6 +30,7 @@ __url__ = "https://www.freecadweb.org" import subprocess import sys import os +import re import FreeCAD from FreeCAD import Console @@ -366,6 +367,36 @@ class GmshTools(): if self.group_elements: Console.PrintMessage(" {}\n".format(self.group_elements)) + def get_gmsh_version(self): + self.get_gmsh_command() + if os.path.exists(self.gmsh_bin): + found_message = "executable found: " + self.gmsh_bin + Console.PrintMessage(found_message + "\n") + else: + found_message = "executable not found: " + self.gmsh_bin + Console.PrintError(found_message + "\n") + return (None, None, None), found_message + + command_list = [self.gmsh_bin, "--info"] + p = subprocess.Popen( + command_list, + shell=False, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True + ) + gmsh_stdout, gmsh_stderr = p.communicate() + + Console.PrintMessage("Gmsh: StdOut:\n" + gmsh_stdout + "\n") + if gmsh_stderr: + Console.PrintError("Gmsh: StdErr:\n" + gmsh_stderr + "\n") + + match = re.search("^Version\s*:\s*(\d+)\.(\d+)\.(\d+)", gmsh_stdout) + if match: + return match.group(1, 2, 3), found_message + "\n\n" + gmsh_stdout # major, minor, patch, fullmessage + else: + return (None, None, None), found_message + "\n\n" + gmsh_stdout + def get_region_data(self): # mesh regions if not self.mesh_obj.MeshRegionList: diff --git a/src/Mod/Fem/femtaskpanels/task_mesh_gmsh.py b/src/Mod/Fem/femtaskpanels/task_mesh_gmsh.py index d9ef6f7d10..31c2400304 100644 --- a/src/Mod/Fem/femtaskpanels/task_mesh_gmsh.py +++ b/src/Mod/Fem/femtaskpanels/task_mesh_gmsh.py @@ -82,6 +82,11 @@ class _TaskPanel: QtCore.SIGNAL("timeout()"), self.update_timer_text ) + QtCore.QObject.connect( + self.form.pb_get_gmsh_version, + QtCore.SIGNAL("clicked()"), + self.get_gmsh_version + ) self.form.cb_dimension.addItems( mesh_gmsh.MeshGmsh.known_element_dimensions @@ -109,6 +114,7 @@ class _TaskPanel: def reject(self): self.mesh_obj.ViewObject.Document.resetEdit() self.mesh_obj.Document.recompute() + self.Timer.stop() return True def clicked(self, button): @@ -162,6 +168,15 @@ class _TaskPanel: self.form.cb_dimension.setCurrentIndex(index) self.dimension = str(self.form.cb_dimension.itemText(index)) # form returns unicode + def get_gmsh_version(self): + from femmesh import gmshtools + version, full_message = gmshtools.GmshTools(self.mesh_obj, self.analysis).get_gmsh_version() + QtGui.QMessageBox.information( + None, + "Gmsh - Information", + full_message + ) + def run_gmsh(self): QApplication.setOverrideCursor(Qt.WaitCursor) part = self.mesh_obj.Part @@ -202,7 +217,6 @@ class _TaskPanel: try: error = gmsh_mesh.create_mesh() except Exception: - import sys error = sys.exc_info()[1] FreeCAD.Console.PrintMessage( "Unexpected error when creating mesh: {}\n"