Salome HOME
Check result of Compute() in test and examples
[modules/smesh.git] / doc / examples / filters_ex39.py
1 # "Elements of a domain" filter and "Renumber" hypothesis
2
3 import salome
4 salome.salome_init_without_session()
5
6 import SMESH
7 from salome.geom import geomBuilder
8 from salome.smesh import smeshBuilder
9
10 geom_builder = geomBuilder.New()
11 smesh_builder = smeshBuilder.New()
12
13 # create two boxes to have two domains in the mesh
14
15 box1 = geom_builder.MakeBoxDXDYDZ( 100,100,100 )
16 box2 = geom_builder.MakeTranslation( box1, 200, 0, 0 )
17 boxes = geom_builder.MakeCompound( [box1, box2] )
18 box1, box2 = geom_builder.SubShapeAll( boxes, geom_builder.ShapeType["SHAPE"], "box")
19
20 vertex = geom_builder.SubShape( box1, geom_builder.ShapeType["VERTEX"], [1] )
21
22 # create a mesh
23
24 mesh = smesh_builder.Mesh( boxes )
25 mesh.Segment(box1).NumberOfSegments( 5 )  # to have different nb of elements on the boxes
26 mesh.Segment(box2).NumberOfSegments( 10 )
27 mesh.Quadrangle()
28 ijkAlgo = mesh.Hexahedron()
29
30 # Use Renumber hypothesis to get hexahedra and nodes numbered like in a structured mesh.
31 # k axis of box1 will be ( 100,100,0 ) - ( 100,100,100 )
32 # k axis of box2 will be ( 0,0,0 ) - (0,0,100), by default
33 v000 = geom_builder.MakeVertex( 100,100,0, theName='v000' ) # can use box sub-vertex or standalone one
34 v001 = geom_builder.GetVertexNearPoint( box1, geom_builder.MakeVertex(100,100,100), theName='v001')
35 ijkAlgo.Renumber([ smeshBuilder.BlockCS( box1, v000, v001 ) ])
36
37 if not mesh.Compute(): raise Exception("Error when computing Mesh")
38
39 # Create filters with FT_ConnectedElements criterion by pointing a domain in different ways:
40
41 # using point coordinates in box_1
42 nodeFilter = smesh_builder.GetFilter( SMESH.NODE, SMESH.FT_ConnectedElements, "=", "1.,2,10", mesh=mesh )
43 print("Nb. nodes in box_1:", len( nodeFilter.GetIDs()))
44
45 # using point coordinates in box_2
46 edgeFilter = smesh_builder.GetFilter( SMESH.EDGE, SMESH.FT_ConnectedElements, "=", [202,1,1 ], mesh=mesh )
47 print("Nb. segments in box_2:", len( edgeFilter.GetIDs()))
48
49 # using a geom vertex of box_1
50 faceFilter = smesh_builder.GetFilter( SMESH.FACE, SMESH.FT_ConnectedElements, "=", vertex, mesh=mesh )
51 print("Nb. faces in box_1:", len( edgeFilter.GetIDs()))
52
53 # using node ID in box_2
54 voluFilter = smesh_builder.GetFilter( SMESH.VOLUME, SMESH.FT_ConnectedElements, "=", 10, mesh=mesh )
55 print("Nb. volumes in box_2:", len( voluFilter.GetIDs()))