Salome HOME
Precise doc on sub-mesh priority
[modules/smesh.git] / doc / salome / examples / transforming_meshes_ex06.py
1 # Merging Elements
2
3
4 import salome
5 salome.salome_init()
6 from salome.geom import geomBuilder
7 geompy = geomBuilder.New()
8
9 import SMESH
10 from salome.smesh import smeshBuilder
11 smesh =  smeshBuilder.New()
12
13 # create a face to be meshed
14 px = geompy.MakeVertex(100., 0.  , 0.  )
15 py = geompy.MakeVertex(0.  , 100., 0.  )
16 pz = geompy.MakeVertex(0.  , 0.  , 100.)
17
18 vxy = geompy.MakeVector(px, py)
19 arc = geompy.MakeArc(py, pz, px)
20
21 wire = geompy.MakeWire([vxy, arc])
22 isPlanarFace = 1
23
24 face1 = geompy.MakeFace(wire, isPlanarFace)
25 id_face1 = geompy.addToStudy(face1, "Face1")
26
27 # create a circle to be an extrusion path
28 px1 = geompy.MakeVertex( 100.,  100.,  0.)
29 py1 = geompy.MakeVertex(-100., -100.,  0.)
30 pz1 = geompy.MakeVertex(   0.,    0., 50.)
31
32 circle = geompy.MakeCircleThreePnt(py1, pz1, px1)
33 id_circle = geompy.addToStudy(circle, "Path")
34  
35 # create a 2D mesh on the face
36 trias = smesh.Mesh(face1, "Face : 2D mesh")
37
38 algo1D = trias.Segment()
39 algo1D.NumberOfSegments(6)
40 algo2D = trias.Triangle()
41 algo2D.LengthFromEdges()
42
43 trias.Compute()
44
45 # create a group of all triangles currently present in the mesh
46 faceTriGroup = trias.Group( face1, "face triangles" )
47
48 # create a path mesh
49 circlemesh = smesh.Mesh(circle, "Path mesh")
50 algo = circlemesh.Segment()
51 algo.NumberOfSegments(10)
52 circlemesh.Compute()
53
54 # extrusion of the mesh
55 trias.ExtrusionAlongPath([], circlemesh, circle, 1, MakeGroups=True )
56
57 # get a group "opposite" to faceTriGroup within the generated prismatic mesh
58 oppositeGroup = trias.GetGroupByName( faceTriGroup.GetName() + "_top" )[0]
59
60 # get edges of the groups
61 edgeGroup = trias.CreateDimGroup([ faceTriGroup, oppositeGroup ], SMESH.EDGE, "face edges")
62
63 # merge nodes of the groups only
64 print("Number of nodes before MergeNodes:", end=' ') 
65 trias.NbNodes()
66 tolerance = 0.001
67 array_of_nodes_groups = trias.FindCoincidentNodesOnPart([faceTriGroup, oppositeGroup], tolerance)
68
69 trias.MergeNodes(array_of_nodes_groups)
70
71 print("Number of nodes after MergeNodes:", trias.NbNodes())
72 print("")
73 print("Number of elements before MergeEqualElements:")
74 print("Edges      : ", trias.NbEdges())
75 print("Faces      : ", trias.NbFaces())
76 print("Volumes    : ", trias.NbVolumes())
77
78 # merge elements of the groups
79 equalFaces = trias.FindEqualElements( [faceTriGroup, oppositeGroup, edgeGroup] )
80 trias.MergeElements( equalFaces )
81 print("Number of elements after MergeEqualElements:")
82 print("Edges      : ", trias.NbEdges())
83 print("Faces      : ", trias.NbFaces())
84 print("Volumes    : ", trias.NbVolumes())
85
86 salome.sg.updateObjBrowser()