diff --git a/src/Mod/Fem/femmesh/netgentools.py b/src/Mod/Fem/femmesh/netgentools.py index 0d8b890ba7..5c65ba9bca 100644 --- a/src/Mod/Fem/femmesh/netgentools.py +++ b/src/Mod/Fem/femmesh/netgentools.py @@ -111,6 +111,7 @@ NetgenTools.run_netgen(**{params}) "heal": self.obj.HealShape, "params": self.get_meshing_parameters(), "second_order": self.obj.SecondOrder, + "second_order_linear": self.obj.SecondOrderLinear, "result_file": self.result_file, "mesh_region": self.get_mesh_region(), } @@ -122,10 +123,16 @@ NetgenTools.run_netgen(**{params}) return self.process @staticmethod - def run_netgen(brep_file, threads, heal, params, second_order, result_file, mesh_region): - import pyngcore as ngcore - from netgen import meshing - + def run_netgen( + brep_file, + threads, + heal, + params, + second_order, + second_order_linear, + result_file, + mesh_region, + ): geom = occ.OCCGeometry(brep_file) ngcore.SetNumThreads(threads) @@ -148,6 +155,8 @@ NetgenTools.run_netgen(**{params}) mesh = geom.GenerateMesh(mp=meshing.MeshingParameters(**params)) if second_order: + if second_order_linear: + mesh.SetGeometry(None) mesh.SecondOrder() coords = mesh.Coordinates() @@ -323,20 +332,20 @@ NetgenTools.run_netgen(**{params}) return params def get_mesh_region(self): - import Part + from Part import Shape as PartShape - d = [] + result = [] for reg in self.obj.MeshRegionList: for s, sub_list in reg.References: if s.isDerivedFrom("App::GeoFeature") and isinstance( - s.getPropertyOfGeometry(), Part.Shape + s.getPropertyOfGeometry(), PartShape ): geom = s.getPropertyOfGeometry() - sub_sh = [s.getSubObject(_) for _ in sub_list] - res = geom.findSubShape(sub_sh) + sub_obj = [s.getSubObject(_) for _ in sub_list] + sub_sh = geom.findSubShape(sub_obj) l = reg.CharacteristicLength.getValueAs("mm").Value - d.append((res, l)) - return d + result.append((sub_sh, l)) + return result @staticmethod def version(): diff --git a/src/Mod/Fem/femobjects/mesh_netgen.py b/src/Mod/Fem/femobjects/mesh_netgen.py index d8f4120008..539d567e2a 100644 --- a/src/Mod/Fem/femobjects/mesh_netgen.py +++ b/src/Mod/Fem/femobjects/mesh_netgen.py @@ -413,6 +413,15 @@ class MeshNetgen(base_fempythonobject.BaseFemPythonObject): value=True, ) ) + prop.append( + _PropHelper( + type="App::PropertyBool", + name="SecondOrderLinear", + group="Mesh Parameters", + doc="Second order nodes are created by linear interpolation", + value=False, + ) + ) prop.append( _PropHelper( type="App::PropertyInteger",