mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2024-12-30 19:30:35 +05:00
138 lines
4.1 KiB
Python
138 lines
4.1 KiB
Python
# 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())
|