diff --git a/src/Mod/Fem/femmesh/gmshtools.py b/src/Mod/Fem/femmesh/gmshtools.py index 6af99050e5..dae0af63f5 100644 --- a/src/Mod/Fem/femmesh/gmshtools.py +++ b/src/Mod/Fem/femmesh/gmshtools.py @@ -394,11 +394,11 @@ class GmshTools(): self.group_elements[ge] = new_group_elements[ge] else: Console.PrintError(" A group with this name exists already.\n") - else: - Console.PrintMessage(" No Group meshing for analysis.\n") + #else: + # Console.PrintMessage(" No Group meshing for analysis.\n") - if self.group_elements: - Console.PrintMessage(" {}\n".format(self.group_elements)) + #if self.group_elements: + # Console.PrintMessage(" {}\n".format(self.group_elements)) def get_gmsh_version(self): self.get_gmsh_command() @@ -447,7 +447,7 @@ class GmshTools(): # print(" No mesh regions.") pass else: - Console.PrintMessage(" Mesh regions, we need to get the elements.\n") + #Console.PrintMessage(" Mesh regions, we need to get the elements.\n") # by the use of MeshRegion object and a BooleanSplitCompound # there could be problems with node numbers see # http://forum.freecadweb.org/viewtopic.php?f=18&t=18780&start=40#p149467 @@ -461,17 +461,7 @@ class GmshTools(): or femutils.is_of_type(part, "FeatureXOR") ) ): - error_message = ( - " The mesh to shape is a boolean split tools Compound " - "and the mesh has mesh region list. " - "Gmsh could return unexpected meshes in such circumstances. " - "It is strongly recommended to extract the shape to mesh " - "from the Compound and use this one." - ) - Console.PrintError(error_message + "\n") - # TODO: no gui popup because FreeCAD will be in a endless output loop - # as long as the pop up is on --> maybe find a better solution for - # either of both --> thus the pop up is in task panel + self.outputCompoundWarning for mr_obj in self.mesh_obj.MeshRegionList: # print(mr_obj.Name) # print(mr_obj.CharacteristicLength) @@ -540,8 +530,8 @@ class GmshTools(): ele_shape = geomtools.get_element(self.part_obj, eleml) ele_vertexes = geomtools.get_vertexes_by_element(self.part_obj.Shape, ele_shape) self.ele_node_map[eleml] = ele_vertexes - Console.PrintMessage(" {}\n".format(self.ele_length_map)) - Console.PrintMessage(" {}\n".format(self.ele_node_map)) + #Console.PrintMessage(" {}\n".format(self.ele_length_map)) + #Console.PrintMessage(" {}\n".format(self.ele_node_map)) def get_boundary_layer_data(self): # mesh boundary layer @@ -553,16 +543,11 @@ class GmshTools(): # print(" No mesh boundary layer setting document object.") pass else: - Console.PrintMessage(" Mesh boundary layers, we need to get the elements.\n") + #Console.PrintMessage(" Mesh boundary layers, we need to get the elements.\n") if self.part_obj.Shape.ShapeType == "Compound": # see http://forum.freecadweb.org/viewtopic.php?f=18&t=18780&start=40#p149467 and # http://forum.freecadweb.org/viewtopic.php?f=18&t=18780&p=149520#p149520 - err = ( - "Gmsh could return unexpected meshes for a boolean split tools Compound. " - "It is strongly recommended to extract the shape to mesh " - "from the Compound and use this one." - ) - Console.PrintError(err + "\n") + self.outputCompoundWarning for mr_obj in self.mesh_obj.MeshBoundaryLayerList: if mr_obj.MinimumThickness and Units.Quantity(mr_obj.MinimumThickness).Value > 0: if mr_obj.References: @@ -960,6 +945,17 @@ class GmshTools(): else: Console.PrintError("No mesh was created.\n") + def outputCompoundWarning(self): + error_message = ( + "The mesh to shape is a Boolean Split Tools compound " + "and the mesh has mesh region list.\n" + "Gmsh could return unexpected meshes in such circumstances.\n" + "If this is the case, use the part workbench and " + "apply a Compound Filter on the compound.\n" + "Use the Compound Filter as input for the mesh." + ) + Console.PrintWarning(error_message + "\n") + ## @} diff --git a/src/Mod/Fem/femtaskpanels/task_mesh_gmsh.py b/src/Mod/Fem/femtaskpanels/task_mesh_gmsh.py index 30aac36737..a7e33f97aa 100644 --- a/src/Mod/Fem/femtaskpanels/task_mesh_gmsh.py +++ b/src/Mod/Fem/femtaskpanels/task_mesh_gmsh.py @@ -199,6 +199,8 @@ class _TaskPanel: ) def run_gmsh(self): + from femmesh import gmshtools + gmsh_mesh = gmshtools.GmshTools(self.mesh_obj, self.analysis) QApplication.setOverrideCursor(Qt.WaitCursor) part = self.mesh_obj.Part if ( @@ -209,43 +211,26 @@ class _TaskPanel: or is_of_type(part, "FeatureXOR") ) ): - error_message = ( - "The shape to mesh is a boolean split tools Compound " - "and the mesh has mesh region list. " - "Gmsh could return unexpected meshes in such circumstances. " - "It is strongly recommended to extract the shape " - "to mesh from the Compound and use this one." - ) - qtbox_title = ( - "Shape to mesh is a BooleanFragmentsCompound " - "and mesh regions are defined" - ) - QtGui.QMessageBox.critical( - None, - qtbox_title, - error_message - ) + gmsh_mesh.outputCompoundWarning() self.Start = time.time() self.form.l_time.setText("Time: {0:4.1f}: ".format(time.time() - self.Start)) self.console_message_gmsh = "" self.gmsh_runs = True self.console_log("We are going to start ...") self.get_active_analysis() - from femmesh import gmshtools - gmsh_mesh = gmshtools.GmshTools(self.mesh_obj, self.analysis) self.console_log("Start Gmsh ...") error = "" try: error = gmsh_mesh.create_mesh() except Exception: error = sys.exc_info()[1] - FreeCAD.Console.PrintMessage( + FreeCAD.Console.PrintError( "Unexpected error when creating mesh: {}\n" .format(error) ) if error: - FreeCAD.Console.PrintMessage("Gmsh had warnings ...\n") - FreeCAD.Console.PrintMessage("{}\n".format(error)) + FreeCAD.Console.PrintWarning("Gmsh had warnings:\n") + FreeCAD.Console.PrintWarning("{}\n".format(error)) self.console_log("Gmsh had warnings ...") self.console_log(error, "#FF0000") else: @@ -265,7 +250,7 @@ class _TaskPanel: else: for m in analysis.Group: if m.Name == self.mesh_obj.Name: - FreeCAD.Console.PrintMessage( + FreeCAD.Console.PrintLog( "Active analysis found: {}\n" .format(analysis.Name) ) diff --git a/src/Mod/Fem/femviewprovider/view_mesh_gmsh.py b/src/Mod/Fem/femviewprovider/view_mesh_gmsh.py index c26b452dd5..c68270163f 100644 --- a/src/Mod/Fem/femviewprovider/view_mesh_gmsh.py +++ b/src/Mod/Fem/femviewprovider/view_mesh_gmsh.py @@ -36,7 +36,6 @@ import FemGui from PySide import QtGui from femtaskpanels import task_mesh_gmsh from femtools.femutils import is_of_type -# from . import view_base_femobject # TODO use VPBaseFemObject from view_base_femobject