11 import GEOM, SMESH, SALOMEDS
13 from salome.geom import geomBuilder
14 from salome.smesh import smeshBuilder
18 smesh = smeshBuilder.New()
19 geompy = geomBuilder.New()
21 import medcoupling as mc
23 def create_param_file(param_file):
24 """ Create a parameter file for runner """
52 with open(param_file, "w") as ffile:
57 """ Test netgen3d mesher """
59 box = geompy.MakeBoxDXDYDZ(200, 200, 200)
61 geompy.ExtractShapes(box, geompy.ShapeType["FACE"], True)
62 groupe_1 = geompy.CreateGroup(box, geompy.ShapeType["FACE"])
63 geompy.UnionIDs(groupe_1, [3, 13, 23, 27, 31, 33])
65 [_, _, _, _, _, _, groupe_1] = geompy.GetExistingSubObjects(box, False)
68 netgen_2d_parameters_1 = smesh.CreateHypothesisByAverageLength(
69 'NETGEN_Parameters_2D', 'NETGENEngine', 34.641, 0)
70 mesh_2d = smesh.Mesh(groupe_1, 'Maillage_1')
71 mesh_2d.AddHypothesis(groupe_1, netgen_2d_parameters_1)
72 mesh_2d.Triangle(algo=smeshBuilder.NETGEN_1D2D)
73 is_done = mesh_2d.Compute()
75 smesh.SetName(mesh_2d, 'Maillage_1')
77 with tempfile.TemporaryDirectory() as tmp_dir:
78 mesh_file = path.join(tmp_dir, "mesh.med")
79 shape_file = path.join(tmp_dir, "shape.step")
80 param_file = path.join(tmp_dir, "param.txt")
81 output_mesh = path.join(tmp_dir, "mesh3D.med")
83 print("Running in folder: ", tmp_dir)
84 create_param_file(param_file)
86 mesh_2d.ExportMED(mesh_file, 0, 41, 1, mesh_2d, 1, [], '', -1, 1)
87 geompy.ExportSTEP(box, shape_file, GEOM.LU_METER)
89 runner = path.join("${NETGENPLUGIN_ROOT_DIR}",
92 "NETGENPlugin_Runner")
94 if sys.platform == 'win32':
97 cmd = "{runner} NETGEN3D {mesh_file} {shape_file} "\
98 "{param_file} NONE NONE {output_mesh}"\
99 .format(runner=runner,
101 shape_file=shape_file,
102 param_file=param_file,
103 output_mesh=output_mesh)
105 subprocess.check_call(cmd, shell=True)
107 mesh_read = mc.ReadUMeshFromFile(output_mesh, "MESH", 0)
109 nb_tetras = mesh_read.getNumberOfCellsWithType(mc.NORM_TETRA4)
110 nb_points = mesh_read.getNumberOfNodes()
112 mesh_read = mc.ReadUMeshFromFile(output_mesh, "MESH", -1)
113 nb_triangles = mesh_read.getNumberOfCellsWithType(mc.NORM_TRI3)
115 mesh_read = mc.ReadUMeshFromFile(output_mesh, "MESH", -2)
116 nb_segments = mesh_read.getNumberOfCellsWithType(mc.NORM_SEG2)
118 print("Nb Tetras:", nb_tetras)
119 print("Nb Triangles:", nb_triangles)
120 print("Nb Segments:", nb_segments)
121 print("Nb Points:", nb_points)
124 assert nb_segments > 0
125 assert nb_triangles > 0
128 if __name__ == "__main__":