From 12893d3623822cf4a7972d89f601d6ffdc2ebb3c Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 15 Nov 2017 10:11:16 +0100 Subject: [PATCH] replace 'GMSH' with correct spelling 'Gmsh' --- src/Mod/Fem/FemGmshTools.py | 34 +++++++++---------- src/Mod/Fem/Gui/DlgSettingsFemGmsh.ui | 6 ++-- src/Mod/Fem/ObjectsFem.py | 4 +-- src/Mod/Fem/PyGui/TaskPanelFemMeshGmsh.ui | 4 +-- src/Mod/Fem/PyGui/_CommandFemAnalysis.py | 2 +- .../Fem/PyGui/_CommandFemMeshGmshFromShape.py | 10 +++--- src/Mod/Fem/PyGui/_TaskPanelFemMeshGmsh.py | 10 +++--- src/Mod/Fem/PyGui/_ViewProviderFemMeshGmsh.py | 14 ++++---- src/Mod/Fem/PyObjects/_FemMeshGmsh.py | 26 +++++++------- 9 files changed, 55 insertions(+), 55 deletions(-) diff --git a/src/Mod/Fem/FemGmshTools.py b/src/Mod/Fem/FemGmshTools.py index c7b935641a..302d550c70 100644 --- a/src/Mod/Fem/FemGmshTools.py +++ b/src/Mod/Fem/FemGmshTools.py @@ -20,7 +20,7 @@ # * * # *************************************************************************** -__title__ = "Tools for the work with GMSH mesher" +__title__ = "Tools for the work with Gmsh mesher" __author__ = "Bernd Hahnebach" __url__ = "http://www.freecadweb.org" @@ -116,7 +116,7 @@ class FemGmshTools(): self.algorithm3D = '1' def create_mesh(self): - print("\nWe are going to start GMSH FEM mesh run!") + print("\nWe are going to start Gmsh FEM mesh run!") print(' Part to mesh: Name --> ' + self.part_obj.Name + ', Label --> ' + self.part_obj.Label + ', ShapeType --> ' + self.part_obj.Shape.ShapeType) print(' CharacteristicLengthMax: ' + str(self.clmax)) print(' CharacteristicLengthMin: ' + str(self.clmin)) @@ -136,7 +136,7 @@ class FemGmshTools(): def get_dimension(self): # Dimension # known_element_dimensions = ['From Shape', '1D', '2D', '3D'] - # if not given, GMSH uses the highest available. + # if not given, Gmsh uses the highest available. # A use case for not "From Shape" would be a surface (2D) mesh of a solid if self.dimension == 'From Shape': shty = self.part_obj.Shape.ShapeType @@ -185,7 +185,7 @@ class FemGmshTools(): self.mesh_name = self.part_obj.Name + '_Mesh_TmpGmsh' self.temp_file_mesh = tmpdir + path_sep + self.mesh_name + '.unv' print(' ' + self.temp_file_mesh) - # GMSH input file + # Gmsh input file self.temp_file_geo = tmpdir + path_sep + 'shape2mesh.geo' print(' ' + self.temp_file_geo) @@ -202,7 +202,7 @@ class FemGmshTools(): if p1.wait() == 0: gmsh_path = p1.stdout.read().split('\n')[0] elif p1.wait() == 1: - error_message = "GMSH binary gmsh not found in standard system binary path. Please install gmsh or set path to binary in FEM preferences tab GMSH.\n" + error_message = "Gmsh binary gmsh not found in standard system binary path. Please install Gmsh or set path to binary in FEM preferences tab Gmsh.\n" FreeCAD.Console.PrintError(error_message) raise Exception(error_message) self.gmsh_bin = gmsh_path @@ -269,7 +269,7 @@ class FemGmshTools(): if self.mesh_obj.MeshRegionList: if part.Shape.ShapeType == "Compound" and hasattr(part, "Proxy"): # other part obj might not have a Proxy, thus an exception would be raised if (part.Proxy.Type == "FeatureBooleanFragments" or part.Proxy.Type == "FeatureSlice" or part.Proxy.Type == "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." + 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." FreeCAD.Console.PrintError(error_message + "\n") # TODO: no gui popup because FreeCAD will be in a endless print loop # as long as the pop up is on --> maybe find a better solution for @@ -328,7 +328,7 @@ class FemGmshTools(): print (' Mesh boundary layers, we need to get the elements.') 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." + 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." FreeCAD.Console.PrintError(err + "\n") for mr_obj in self.mesh_obj.MeshBoundaryLayerList: if mr_obj.MinimumThickness and Units.Quantity(mr_obj.MinimumThickness).Value > 0: @@ -397,7 +397,7 @@ class FemGmshTools(): for k in item: v = item[k] if k in set(['EdgesList', 'FacesList']): - # the element name of FreeCAD which starts with 1 (example: 'Face1'), same as GMSH + # the element name of FreeCAD which starts with 1 (example: 'Face1'), same as Gmsh #el_id = int(el[4:]) # FIXME: strip `face` or `edge` prefix ele_nodes = (''.join((str(el[4:]) + ', ') for el in v)).rstrip(', ') line = prefix + '.' + str(k) + ' = {' + ele_nodes + ' };\n' @@ -421,7 +421,7 @@ class FemGmshTools(): def write_geo(self): geo = open(self.temp_file_geo, "w") - geo.write("// geo file for meshing with GMSH meshing software created by FreeCAD\n") + geo.write("// geo file for meshing with Gmsh meshing software created by FreeCAD\n") geo.write("\n") geo.write("// open brep geometry\n") geo.write('Merge "' + self.temp_file_geometry + '";\n') @@ -429,7 +429,7 @@ class FemGmshTools(): if self.group_elements: # print(' We are going to have to find elements to make mesh groups for.') geo.write("// group data\n") - # we use the element name of FreeCAD which starts with 1 (example: 'Face1'), same as GMSH + # we use the element name of FreeCAD which starts with 1 (example: 'Face1'), same as Gmsh for group in sorted(self.group_elements.keys()): # for unit test we need them to have a fixed order gdata = self.group_elements[group] # print(gdata) @@ -458,7 +458,7 @@ class FemGmshTools(): geo.write("\n") geo.write("// Characteristic Length\n") if self.ele_length_map: - # we use the index FreeCAD which starts with 0, we need to add 1 for the index in GMSH + # we use the index FreeCAD which starts with 0, we need to add 1 for the index in Gmsh geo.write("// Characteristic Length according CharacteristicLengthMap\n") for e in self.ele_length_map: ele_nodes = (''.join((str(n + 1) + ', ') for n in self.ele_node_map[e])).rstrip(', ') @@ -482,12 +482,12 @@ class FemGmshTools(): geo.write("Mesh.RecombineAll = 1;\n") geo.write("\n") geo.write("// optimize the mesh\n") - # GMSH tetra optimizer + # Gmsh tetra optimizer if hasattr(self.mesh_obj, 'OptimizeStd') and self.mesh_obj.OptimizeStd is True: geo.write("Mesh.Optimize = 1;\n") else: geo.write("Mesh.Optimize = 0;\n") - # Netgen optimizer in GMSH + # Netgen optimizer in Gmsh if hasattr(self.mesh_obj, 'OptimizeNetgen') and self.mesh_obj.OptimizeNetgen is True: geo.write("Mesh.OptimizeNetgen = 1;\n") else: @@ -532,15 +532,15 @@ class FemGmshTools(): geo.write('Save "' + self.temp_file_mesh + '";\n') geo.write("\n\n") geo.write("//////////////////////////////////////////////////////////////////////\n") - geo.write("// GMSH documentation:\n") + geo.write("// Gmsh documentation:\n") geo.write("// http://gmsh.info/doc/texinfo/gmsh.html#Mesh\n") geo.write("//\n") - geo.write("// We do not check if something went wrong, like negative jacobians etc. You can run GMSH manually yourself: \n") + geo.write("// We do not check if something went wrong, like negative jacobians etc. You can run Gmsh manually yourself: \n") geo.write("//\n") - geo.write("// to see full GMSH log, run in bash:\n") + geo.write("// to see full Gmsh log, run in bash:\n") geo.write("// " + self.gmsh_bin + " - " + self.temp_file_geo + "\n") geo.write("//\n") - geo.write("// to run GMSH and keep file in GMSH GUI (with log), run in bash:\n") + geo.write("// to run Gmsh and keep file in Gmsh GUI (with log), run in bash:\n") geo.write("// " + self.gmsh_bin + " " + self.temp_file_geo + "\n") geo.close diff --git a/src/Mod/Fem/Gui/DlgSettingsFemGmsh.ui b/src/Mod/Fem/Gui/DlgSettingsFemGmsh.ui index 3be9f8bff2..aa3185d1a8 100644 --- a/src/Mod/Fem/Gui/DlgSettingsFemGmsh.ui +++ b/src/Mod/Fem/Gui/DlgSettingsFemGmsh.ui @@ -11,7 +11,7 @@ - GMSH + Gmsh @@ -28,7 +28,7 @@ Qt::LeftToRight - GMSH + Gmsh Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop @@ -58,7 +58,7 @@ - GMSH binary + Gmsh binary diff --git a/src/Mod/Fem/ObjectsFem.py b/src/Mod/Fem/ObjectsFem.py index 8e0921afc7..0b4e6b78e6 100644 --- a/src/Mod/Fem/ObjectsFem.py +++ b/src/Mod/Fem/ObjectsFem.py @@ -235,8 +235,8 @@ def makeMeshBoundaryLayer(doc, base_mesh, name="MeshBoundaryLayer"): return obj -def makeMeshGmsh(doc, name="FEMMeshGMSH"): - '''makeMeshGmsh(document, [name]): makes a GMSH FEM mesh object''' +def makeMeshGmsh(doc, name="FEMMeshGmsh"): + '''makeMeshGmsh(document, [name]): makes a Gmsh FEM mesh object''' obj = doc.addObject("Fem::FemMeshObjectPython", name) import PyObjects._FemMeshGmsh PyObjects._FemMeshGmsh._FemMeshGmsh(obj) diff --git a/src/Mod/Fem/PyGui/TaskPanelFemMeshGmsh.ui b/src/Mod/Fem/PyGui/TaskPanelFemMeshGmsh.ui index cb1f13acaf..607be25b97 100644 --- a/src/Mod/Fem/PyGui/TaskPanelFemMeshGmsh.ui +++ b/src/Mod/Fem/PyGui/TaskPanelFemMeshGmsh.ui @@ -11,7 +11,7 @@ - FEM Mesh by GMSH + FEM Mesh by Gmsh @@ -143,7 +143,7 @@ - GMSH + Gmsh diff --git a/src/Mod/Fem/PyGui/_CommandFemAnalysis.py b/src/Mod/Fem/PyGui/_CommandFemAnalysis.py index e55469f49f..48def5f490 100644 --- a/src/Mod/Fem/PyGui/_CommandFemAnalysis.py +++ b/src/Mod/Fem/PyGui/_CommandFemAnalysis.py @@ -40,7 +40,7 @@ class _CommandFemAnalysis(FemCommands): self.resources = {'Pixmap': 'fem-analysis', 'MenuText': QtCore.QT_TRANSLATE_NOOP("FEM_Analysis", "Analysis container"), 'Accel': "N, A", - 'ToolTip': QtCore.QT_TRANSLATE_NOOP("FEM_Analysis", "Creates a analysis container with standard solver CalculiX")} + 'ToolTip': QtCore.QT_TRANSLATE_NOOP("FEM_Analysis", "Creates an analysis container with standard solver CalculiX")} self.is_active = 'with_document' def Activated(self): diff --git a/src/Mod/Fem/PyGui/_CommandFemMeshGmshFromShape.py b/src/Mod/Fem/PyGui/_CommandFemMeshGmshFromShape.py index 2a9ab4a3f9..c41426da90 100644 --- a/src/Mod/Fem/PyGui/_CommandFemMeshGmshFromShape.py +++ b/src/Mod/Fem/PyGui/_CommandFemMeshGmshFromShape.py @@ -20,7 +20,7 @@ # * * # *************************************************************************** -__title__ = "Command GMSH Mesh From Shape" +__title__ = "Command Gmsh Mesh From Shape" __author__ = "Bernd Hahnebach" __url__ = "http://www.freecadweb.org" @@ -39,17 +39,17 @@ class _CommandFemMeshGmshFromShape(FemCommands): def __init__(self): super(_CommandFemMeshGmshFromShape, self).__init__() self.resources = {'Pixmap': 'fem-femmesh-gmsh-from-shape', - 'MenuText': QtCore.QT_TRANSLATE_NOOP("FEM_MeshGmshFromShape", "FEM mesh from shape by GMSH"), - 'ToolTip': QtCore.QT_TRANSLATE_NOOP("FEM_MeshGmshFromShape", "Create a FEM mesh from a shape by GMSH mesher")} + 'MenuText': QtCore.QT_TRANSLATE_NOOP("FEM_MeshGmshFromShape", "FEM mesh from shape by Gmsh"), + 'ToolTip': QtCore.QT_TRANSLATE_NOOP("FEM_MeshGmshFromShape", "Create a FEM mesh from a shape by Gmsh mesher")} self.is_active = 'with_part_feature' def Activated(self): - FreeCAD.ActiveDocument.openTransaction("Create FEM mesh by GMSH") + FreeCAD.ActiveDocument.openTransaction("Create FEM mesh by Gmsh") FreeCADGui.addModule("FemGui") sel = FreeCADGui.Selection.getSelection() if (len(sel) == 1): if(sel[0].isDerivedFrom("Part::Feature")): - mesh_obj_name = 'FEMMeshGMSH' + mesh_obj_name = 'FEMMeshGmsh' # mesh_obj_name = sel[0].Name + "_Mesh" # if requested by some people add Preference for this FreeCADGui.addModule("ObjectsFem") FreeCADGui.doCommand("ObjectsFem.makeMeshGmsh(FreeCAD.ActiveDocument, '" + mesh_obj_name + "')") diff --git a/src/Mod/Fem/PyGui/_TaskPanelFemMeshGmsh.py b/src/Mod/Fem/PyGui/_TaskPanelFemMeshGmsh.py index 4f6f53f94c..37679460db 100644 --- a/src/Mod/Fem/PyGui/_TaskPanelFemMeshGmsh.py +++ b/src/Mod/Fem/PyGui/_TaskPanelFemMeshGmsh.py @@ -129,7 +129,7 @@ class _TaskPanelFemMeshGmsh: if self.mesh_obj.MeshRegionList: if part.Shape.ShapeType == "Compound" and hasattr(part, "Proxy"): # other part obj might not have a Proxy, thus an exception would be raised if (part.Proxy.Type == "FeatureBooleanFragments" or part.Proxy.Type == "FeatureSlice" or part.Proxy.Type == "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." + 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." QtGui.QMessageBox.critical(None, "Shape to mesh is a BooleanFragmentsCompound and mesh regions are defined", error_message) self.Start = time.time() self.form.l_time.setText('Time: {0:4.1f}: '.format(time.time() - self.Start)) @@ -139,7 +139,7 @@ class _TaskPanelFemMeshGmsh: self.get_active_analysis() import FemGmshTools gmsh_mesh = FemGmshTools.FemGmshTools(self.obj, self.analysis) - self.console_log("Start GMSH ...") + self.console_log("Start Gmsh ...") error = '' try: error = gmsh_mesh.create_mesh() @@ -148,11 +148,11 @@ class _TaskPanelFemMeshGmsh: print("Unexpected error when creating mesh: ", sys.exc_info()[0]) if error: print(error) - self.console_log('GMSH had warnings ...') + self.console_log('Gmsh had warnings ...') self.console_log(error, '#FF0000') else: - self.console_log('Clean run of GMSH') - self.console_log("GMSH done!") + self.console_log('Clean run of Gmsh') + self.console_log("Gmsh done!") self.form.l_time.setText('Time: {0:4.1f}: '.format(time.time() - self.Start)) self.Timer.stop() self.update() diff --git a/src/Mod/Fem/PyGui/_ViewProviderFemMeshGmsh.py b/src/Mod/Fem/PyGui/_ViewProviderFemMeshGmsh.py index 90a6f7b946..a8c61fce24 100644 --- a/src/Mod/Fem/PyGui/_ViewProviderFemMeshGmsh.py +++ b/src/Mod/Fem/PyGui/_ViewProviderFemMeshGmsh.py @@ -83,9 +83,9 @@ class _ViewProviderFemMeshGmsh: if not gui_doc.getInEdit(): gui_doc.setEdit(vobj.Object.Name) else: - FreeCAD.Console.PrintError('Activate the analysis this GMSH FEM mesh object belongs too!\n') + FreeCAD.Console.PrintError('Activate the analysis this Gmsh FEM mesh object belongs too!\n') else: - print('GMSH FEM mesh object does not belong to the active analysis.') + print('Gmsh FEM mesh object does not belong to the active analysis.') found_mesh_analysis = False for o in gui_doc.Document.Objects: if o.isDerivedFrom('Fem::FemAnalysisPython'): @@ -93,16 +93,16 @@ class _ViewProviderFemMeshGmsh: if m == self.Object: found_mesh_analysis = True FemGui.setActiveAnalysis(o) - print('The analysis the GMSH FEM mesh object belongs too was found and activated: ' + o.Name) + print('The analysis the Gmsh FEM mesh object belongs too was found and activated: ' + o.Name) gui_doc.setEdit(vobj.Object.Name) break if not found_mesh_analysis: - print('GMSH FEM mesh object does not belong to an analysis. Analysis group meshing will be deactivated.') + print('Gmsh FEM mesh object does not belong to an analysis. Analysis group meshing will be deactivated.') gui_doc.setEdit(vobj.Object.Name) else: FreeCAD.Console.PrintError('Active analysis is not in active document.') else: - print('No active analysis in active document, we are going to have a look if the GMSH FEM mesh object belongs to a non active analysis.') + print('No active analysis in active document, we are going to have a look if the Gmsh FEM mesh object belongs to a non active analysis.') found_mesh_analysis = False for o in gui_doc.Document.Objects: if o.isDerivedFrom('Fem::FemAnalysisPython'): @@ -110,11 +110,11 @@ class _ViewProviderFemMeshGmsh: if m == self.Object: found_mesh_analysis = True FemGui.setActiveAnalysis(o) - print('The analysis the GMSH FEM mesh object belongs to was found and activated: ' + o.Name) + print('The analysis the Gmsh FEM mesh object belongs to was found and activated: ' + o.Name) gui_doc.setEdit(vobj.Object.Name) break if not found_mesh_analysis: - print('GMSH FEM mesh object does not belong to an analysis. Analysis group meshing will be deactivated.') + print('Gmsh FEM mesh object does not belong to an analysis. Analysis group meshing will be deactivated.') gui_doc.setEdit(vobj.Object.Name) else: print('No analysis in the active document.') diff --git a/src/Mod/Fem/PyObjects/_FemMeshGmsh.py b/src/Mod/Fem/PyObjects/_FemMeshGmsh.py index 28588b4fab..af873c5863 100644 --- a/src/Mod/Fem/PyObjects/_FemMeshGmsh.py +++ b/src/Mod/Fem/PyObjects/_FemMeshGmsh.py @@ -29,7 +29,7 @@ __url__ = "http://www.freecadweb.org" class _FemMeshGmsh(): - """A Fem::FemMeshObject python type, add GMSH specific properties + """A Fem::FemMeshObject python type, add Gmsh specific properties """ # they will be used from the task panel too, thus they need to be outside of the __init__ @@ -55,43 +55,43 @@ class _FemMeshGmsh(): obj.addProperty("App::PropertyLink", "Part", "FEM Mesh", "Part object to mesh") obj.Part = None - obj.addProperty("App::PropertyLength", "CharacteristicLengthMax", "FEM GMSH Mesh Params", "Max mesh element size (0.0 = infinity)") + obj.addProperty("App::PropertyLength", "CharacteristicLengthMax", "FEM Gmsh Mesh Params", "Max mesh element size (0.0 = infinity)") obj.CharacteristicLengthMax = 0.0 # will be 1e+22 - obj.addProperty("App::PropertyLength", "CharacteristicLengthMin", "FEM GMSH Mesh Params", "Min mesh element size") + obj.addProperty("App::PropertyLength", "CharacteristicLengthMin", "FEM Gmsh Mesh Params", "Min mesh element size") obj.CharacteristicLengthMin = 0.0 - obj.addProperty("App::PropertyEnumeration", "ElementDimension", "FEM GMSH Mesh Params", "Dimension of mesh elements (Auto = according ShapeType of part to mesh)") + obj.addProperty("App::PropertyEnumeration", "ElementDimension", "FEM Gmsh Mesh Params", "Dimension of mesh elements (Auto = according ShapeType of part to mesh)") obj.ElementDimension = _FemMeshGmsh.known_element_dimensions obj.ElementDimension = 'From Shape' # according ShapeType of Part to mesh - obj.addProperty("App::PropertyEnumeration", "ElementOrder", "FEM GMSH Mesh Params", "Order of mesh elements") + obj.addProperty("App::PropertyEnumeration", "ElementOrder", "FEM Gmsh Mesh Params", "Order of mesh elements") obj.ElementOrder = _FemMeshGmsh.known_element_orders obj.ElementOrder = '2nd' - obj.addProperty("App::PropertyBool", "OptimizeStd", "FEM GMSH Mesh Params", "Optimize tetra elements") + obj.addProperty("App::PropertyBool", "OptimizeStd", "FEM Gmsh Mesh Params", "Optimize tetra elements") obj.OptimizeStd = True - obj.addProperty("App::PropertyBool", "OptimizeNetgen", "FEM GMSH Mesh Params", "Optimize tetra elements by use of Netgen") + obj.addProperty("App::PropertyBool", "OptimizeNetgen", "FEM Gmsh Mesh Params", "Optimize tetra elements by use of Netgen") obj.OptimizeNetgen = False - obj.addProperty("App::PropertyBool", "HighOrderOptimize", "FEM GMSH Mesh Params", "Optimize hight order meshes") + obj.addProperty("App::PropertyBool", "HighOrderOptimize", "FEM Gmsh Mesh Params", "Optimize hight order meshes") obj.HighOrderOptimize = False - obj.addProperty("App::PropertyBool", "RecombineAll", "FEM GMSH Mesh Params", "Apply recombination algorithm to all surfaces") + obj.addProperty("App::PropertyBool", "RecombineAll", "FEM Gmsh Mesh Params", "Apply recombination algorithm to all surfaces") obj.RecombineAll = False - obj.addProperty("App::PropertyBool", "CoherenceMesh", "FEM GMSH Mesh Params", "Removes all duplicate mesh vertices") + obj.addProperty("App::PropertyBool", "CoherenceMesh", "FEM Gmsh Mesh Params", "Removes all duplicate mesh vertices") obj.CoherenceMesh = True - obj.addProperty("App::PropertyFloat", "GeometryTolerance", "FEM GMSH Mesh Params", "Geometrical Tolerance (0.0 = GMSH std = 1e-08)") + obj.addProperty("App::PropertyFloat", "GeometryTolerance", "FEM Gmsh Mesh Params", "Geometrical Tolerance (0.0 = GMSH std = 1e-08)") obj.GeometryTolerance = 1e-06 - obj.addProperty("App::PropertyEnumeration", "Algorithm2D", "FEM GMSH Mesh Params", "mesh algorithm 2D") + obj.addProperty("App::PropertyEnumeration", "Algorithm2D", "FEM Gmsh Mesh Params", "mesh algorithm 2D") obj.Algorithm2D = _FemMeshGmsh.known_mesh_algorithm_2D obj.Algorithm2D = 'Automatic' # ? - obj.addProperty("App::PropertyEnumeration", "Algorithm3D", "FEM GMSH Mesh Params", "mesh algorithm 3D") + obj.addProperty("App::PropertyEnumeration", "Algorithm3D", "FEM Gmsh Mesh Params", "mesh algorithm 3D") obj.Algorithm3D = _FemMeshGmsh.known_mesh_algorithm_3D obj.Algorithm3D = 'Automatic' # ?