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)
67 shape_faces = geompy.SubShapeAllSorted(box, geompy.ShapeType["FACE"])
68 oneFace = shape_faces[0]
71 netgen_2d_parameters_1 = smesh.CreateHypothesisByAverageLength(
72 'NETGEN_Parameters_2D', 'NETGENEngine', 34.641, 0)
74 mesh_2d = smesh.Mesh(box, 'Maillage_1')
75 mesh_2d.AddHypothesis(box, netgen_2d_parameters_1)
77 mesh_2d.Triangle(algo=smeshBuilder.NETGEN_1D2D)
78 isDone = mesh_2d.Compute()
81 raise Exception("Error when computing Mesh")
83 smesh.SetName(mesh_2d, 'Maillage_1')
85 with tempfile.TemporaryDirectory() as tmp_dir:
86 mesh_file = path.join(tmp_dir, "mesh.med")
87 shape_file = path.join(tmp_dir, "shape.step")
88 param_file = path.join(tmp_dir, "param.txt")
89 output_mesh = path.join(tmp_dir, "mesh3D.med")
91 print("Running in folder: ", tmp_dir)
92 create_param_file(param_file)
94 mesh_2d.ExportMED(mesh_file, 0, 41, 1, mesh_2d, 1, [], '', -1, 1)
95 geompy.ExportSTEP(box, shape_file, GEOM.LU_METER)
97 runner = path.join("${NETGENPLUGIN_ROOT_DIR}",
100 "NETGENPlugin_Runner")
102 if sys.platform == 'win32':
105 cmd = "{runner} NETGEN3D {mesh_file} {shape_file} "\
106 "{param_file} NONE NONE {output_mesh}"\
107 .format(runner=runner,
109 shape_file=shape_file,
110 param_file=param_file,
111 output_mesh=output_mesh)
113 subprocess.check_call(cmd, shell=True)
115 mesh_read = mc.ReadUMeshFromFile(output_mesh, "MESH", 0)
117 nb_tetras = mesh_read.getNumberOfCellsWithType(mc.NORM_TETRA4)
118 nb_points = mesh_read.getNumberOfNodes()
120 mesh_read = mc.ReadUMeshFromFile(output_mesh, "MESH", -1)
121 nb_triangles = mesh_read.getNumberOfCellsWithType(mc.NORM_TRI3)
123 mesh_read = mc.ReadUMeshFromFile(output_mesh, "MESH", -2)
124 nb_segments = mesh_read.getNumberOfCellsWithType(mc.NORM_SEG2)
126 print("Nb Tetras:", nb_tetras)
127 print("Nb Triangles:", nb_triangles)
128 print("Nb Segments:", nb_segments)
129 print("Nb Points:", nb_points)
132 assert nb_segments > 0
133 assert nb_triangles > 0
136 if __name__ == "__main__":
137 if sys.platform == "win32":
138 print("Disabled on windows")