# Pattern Mapping import salome salome.salome_init_without_session() import SMESH from salome.geom import geomBuilder from salome.smesh import smeshBuilder geom_builder = geomBuilder.New() smesh_builder = smeshBuilder.New() # define the geometry Box_1 = geom_builder.MakeBoxDXDYDZ(200., 200., 200.) geom_builder.addToStudy(Box_1, "Box_1") faces = geom_builder.SubShapeAll(Box_1, geom_builder.ShapeType["FACE"]) Face_1 = faces[0] Face_2 = faces[1] geom_builder.addToStudyInFather(Box_1, Face_1, "Face_1") geom_builder.addToStudyInFather(Box_1, Face_2, "Face_2") # build a quadrangle mesh 3x3 on Face_1 Mesh_1 = smesh_builder.Mesh(Face_1) algo1D = Mesh_1.Segment() algo1D.NumberOfSegments(3) Mesh_1.Quadrangle() isDone = Mesh_1.Compute() if not isDone: raise Exception('Mesh Mesh_1 : computation failed') # build a triangle mesh on Face_2 Mesh_2 = smesh_builder.Mesh(Face_2) algo1D = Mesh_2.Segment() algo1D.NumberOfSegments(1) algo2D = Mesh_2.Triangle() algo2D.MaxElementArea(240) isDone = Mesh_2.Compute() if not isDone: raise Exception('Mesh Mesh_2 : computation failed') # create a 2d pattern pattern = smesh_builder.GetPattern() isDone = pattern.LoadFromFace(Mesh_2.GetMesh(), Face_2, 0) if (isDone != 1): print('LoadFromFace :', pattern.GetErrorCode()) # apply the pattern to a face of the first mesh facesToSplit = Mesh_1.GetElementsByType(SMESH.FACE) print("Splitting %d rectangular face(s) to %d triangles..."%(len(facesToSplit), 2*len(facesToSplit))) pattern.ApplyToMeshFaces(Mesh_1.GetMesh(), facesToSplit, 0, 0) isDone = pattern.MakeMesh(Mesh_1.GetMesh(), 0, 0) if (isDone != 1): print('MakeMesh :', pattern.GetErrorCode()) # create quadrangle mesh Mesh_3 = smesh_builder.Mesh(Box_1) Mesh_3.Segment().NumberOfSegments(1) Mesh_3.Quadrangle() Mesh_3.Hexahedron() isDone = Mesh_3.Compute() if not isDone: raise Exception('Mesh Mesh_3 : computation failed') # create a 3d pattern (hexahedrons) pattern_hexa = smesh_builder.GetPattern() smp_hexa = """!!! Nb of points: 15 0 0 0 !- 0 1 0 0 !- 1 0 1 0 !- 2 1 1 0 !- 3 0 0 1 !- 4 1 0 1 !- 5 0 1 1 !- 6 1 1 1 !- 7 0.5 0 0.5 !- 8 0.5 0 1 !- 9 0.5 0.5 0.5 !- 10 0.5 0.5 1 !- 11 1 0 0.5 !- 12 1 0.5 0.5 !- 13 1 0.5 1 !- 14 !!! Indices of points of 4 elements: 8 12 5 9 10 13 14 11 0 8 9 4 2 10 11 6 2 10 11 6 3 13 14 7 0 1 12 8 2 3 13 10""" pattern_hexa.LoadFromFile(smp_hexa) # apply the pattern to a mesh volsToSplit = Mesh_3.GetElementsByType(SMESH.VOLUME) print("Splitting %d hexa volume(s) to %d hexas..."%(len(volsToSplit), 4*len(volsToSplit))) pattern_hexa.ApplyToHexahedrons(Mesh_3.GetMesh(), volsToSplit,0,3) isDone = pattern_hexa.MakeMesh(Mesh_3.GetMesh(), True, True) if (isDone != 1): print('MakeMesh :', pattern_hexa.GetErrorCode()) # create one more quadrangle mesh Mesh_4 = smesh_builder.Mesh(Box_1) Mesh_4.Segment().NumberOfSegments(1) Mesh_4.Quadrangle() Mesh_4.Hexahedron() isDone = Mesh_4.Compute() if not isDone: raise Exception('Mesh Mesh_4 : computation failed') # create another 3d pattern (pyramids) pattern_pyra = smesh_builder.GetPattern() smp_pyra = """!!! Nb of points: 9 0 0 0 !- 0 1 0 0 !- 1 0 1 0 !- 2 1 1 0 !- 3 0 0 1 !- 4 1 0 1 !- 5 0 1 1 !- 6 1 1 1 !- 7 0.5 0.5 0.5 !- 8 !!! Indices of points of 6 elements: 0 1 5 4 8 7 5 1 3 8 3 2 6 7 8 2 0 4 6 8 0 2 3 1 8 4 5 7 6 8""" pattern_pyra.LoadFromFile(smp_pyra) # apply the pattern to a face mesh volsToSplit = Mesh_4.GetElementsByType(SMESH.VOLUME) print("Splitting %d hexa volume(s) to %d hexas..."%(len(volsToSplit), 6*len(volsToSplit))) pattern_pyra.ApplyToHexahedrons(Mesh_4.GetMesh(), volsToSplit,1,0) isDone = pattern_pyra.MakeMesh(Mesh_4.GetMesh(), True, True) if (isDone != 1): print('MakeMesh :', pattern_pyra.GetErrorCode())