Salome HOME
Merge from BR_V5_DEV 16Feb09
[modules/smesh.git] / doc / salome / gui / SMESH / input / tui_transforming_meshes.doc
1 /*!
2
3 \page tui_transforming_meshes_page Transforming Meshes
4
5 <br><h2>Transforming Meshes</h2>
6
7 <br>
8 \anchor tui_translation
9 <h3>Translation</h3>
10
11 \code
12 import SMESH_mechanic
13
14 smesh = SMESH_mechanic.smesh 
15 mesh = SMESH_mechanic.mesh 
16
17 # define translation vector
18 point = smesh.PointStruct(-150., -150., 0.)
19 vector =smesh.DirStruct(point) 
20
21 # translate a mesh
22 doCopy = 1
23
24 mesh.Translate([], vector, doCopy)
25 \endcode
26
27 <br>
28 \anchor tui_rotation
29 <h3>Rotation</h3>
30
31 \code
32 import math
33
34 import SMESH_mechanic
35
36 smesh = SMESH_mechanic.smesh
37 mesh = SMESH_mechanic.mesh 
38
39 # define rotation axis and angle
40 axisXYZ = smesh.AxisStruct(0., 0., 0., 5., 5., 20.)
41 angle270 = 1.5 * math.pi
42
43 # rotate a mesh
44 mesh.Rotate([], axisXYZ, angle270, 1)  
45 \endcode
46
47 <br>
48 \anchor tui_symmetry
49 <h3>Symmetry</h3>
50
51 \code
52 import math
53
54 import SMESH_mechanic
55
56 smesh = SMESH_mechanic.smesh
57 mesh = SMESH_mechanic.mesh 
58
59 # create a symmetrical copy of the mesh mirrored through a point
60 axis = SMESH.AxisStruct(0, 0, 0, 0, 0, 0)
61
62 mesh.Mirror([], axis, smesh.POINT, 1)
63 \endcode
64
65 <br>
66 \anchor tui_merging_nodes
67 <h3>Merging Nodes</h3>
68
69 \code
70 import SMESH_mechanic
71 mesh = SMESH_mechanic.mesh
72
73 # merge nodes
74 Tolerance = 25.0
75
76 GroupsOfNodes =  mesh.FindCoincidentNodes(Tolerance)
77 mesh.MergeNodes(GroupsOfNodes)  
78 \endcode
79
80 <br>
81 \anchor tui_merging_elements
82 <h3>Merging Elements</h3>
83
84 \code
85 import salome
86 import geompy
87 import smesh
88
89 # create a face to be meshed
90 px = geompy.MakeVertex(100., 0.  , 0.  )
91 py = geompy.MakeVertex(0.  , 100., 0.  )
92 pz = geompy.MakeVertex(0.  , 0.  , 100.)
93
94 vxy = geompy.MakeVector(px, py)
95 arc = geompy.MakeArc(py, pz, px)
96
97 wire = geompy.MakeWire([vxy, arc])
98 isPlanarFace = 1
99
100 face1 = geompy.MakeFace(wire, isPlanarFace)
101 id_face1 = geompy.addToStudy(face1, "Face1")
102
103 # create a circle to be an extrusion path
104 px1 = geompy.MakeVertex( 100.,  100.,  0.)
105 py1 = geompy.MakeVertex(-100., -100.,  0.)
106 pz1 = geompy.MakeVertex(   0.,    0., 50.)
107
108 circle = geompy.MakeCircleThreePnt(py1, pz1, px1)
109 id_circle = geompy.addToStudy(circle, "Path")
110  
111 # create a 2D mesh on the face
112 trias = smesh.Mesh(face1, "Face : 2D mesh")
113
114 algo1D = trias.Segment()
115 algo1D.NumberOfSegments(6)
116 algo2D = trias.Triangle()
117 algo2D.LengthFromEdges()
118
119 trias.Compute()
120
121 # create a path mesh
122 circlemesh = smesh.Mesh(circle, "Path mesh")
123 algo = circlemesh.Segment()
124 algo.NumberOfSegments(10)
125 circlemesh.Compute()
126
127 # extrusion of the mesh
128 trias.ExtrusionAlongPath([], circlemesh, circle,
129                          1, 0, [], 0, smesh.PointStruct(0, 0, 0))
130
131 # merge nodes
132 print "Number of nodes before MergeNodes:", 
133 trias.NbNodes()
134 tolerance = 0.001
135 array_of_nodes_groups = trias.FindCoincidentNodes(tolerance)
136
137 trias.MergeNodes(array_of_nodes_groups)
138
139 print "Number of nodes after MergeNodes:", trias.NbNodes()
140 print ""
141 print "Number of elements before MergeEqualElements:"
142 print "Edges      : ", trias.NbEdges()
143 print "Triangles  : ", trias.NbTriangles()
144 print "Quadrangles: ", trias.NbQuadrangles()
145 print "Volumes    : ", trias.NbVolumes()
146
147 # merge elements
148 trias.MergeEqualElements()
149 print "Number of elements after MergeEqualElements:"
150 print "Edges      : ", trias.NbEdges()
151 print "Triangles  : ", trias.NbTriangles()
152 print "Quadrangles: ", trias.NbQuadrangles()
153 print "Volumes    : ", trias.NbVolumes()
154
155 salome.sg.updateObjBrowser(1)
156 \endcode
157
158 <br><h2>Sewing Meshes</h2>
159
160 <br>
161 \anchor tui_sew_meshes_border_to_side
162 <h3>Sew Meshes Border to Side</h3>
163
164 \code
165 import geompy
166 import smesh
167
168 # create two faces of a box
169 box1 = geompy.MakeBox(0., 0., -10., 30., 20., 25.)
170 facesList1 = geompy.SubShapeAll(box1, geompy.ShapeType["FACE"])
171 face1 = facesList1[2]
172
173 box2 = geompy.MakeBox(0., 5., 0., 20., 20., 15.)
174 facesList2 = geompy.SubShapeAll(box2, geompy.ShapeType["FACE"])
175 face2 = facesList2[1]
176
177 edgesList = geompy.SubShapeAll(face2, geompy.ShapeType["EDGE"])
178 edge1 = edgesList[2]
179
180 aComp = geompy.MakeCompound([face1, face2])
181 geompy.addToStudy(aComp, "Two faces")
182
183 # create a mesh on two faces
184 mesh = smesh.Mesh(aComp, "Two faces : quadrangle mesh")
185
186 algo1D = mesh.Segment()
187 algo1D.NumberOfSegments(9)
188 algo2D = mesh.Quadrangle()
189
190 algo_local = mesh.Segment(edge1)
191 algo_local.Arithmetic1D(1, 4)
192 algo_local.Propagation()
193
194 mesh.Compute()
195
196 # sew border to side
197 # FirstNodeIDOnFreeBorder, SecondNodeIDOnFreeBorder, LastNodeIDOnFreeBorder,
198 # FirstNodeIDOnSide, LastNodeIDOnSide,
199 # CreatePolygons, CreatePolyedrs
200 mesh.SewBorderToSide(5, 45, 6, 113, 109, 0, 0)
201 \endcode
202
203 <br>
204 \anchor tui_sew_conform_free_borders
205 <h3>Sew Conform Free Borders</h3>
206
207 \code
208 import geompy
209 import smesh
210
211 # create two faces of the box
212 box1 = geompy.MakeBox(0., 0., -10., 20., 20., 15.)
213 facesList1 = geompy.SubShapeAll(box1, geompy.ShapeType["FACE"])
214 face1 = facesList1[2]
215
216 box2 = geompy.MakeBox(0., 5., 0., 20., 20., 15.)
217 facesList2 = geompy.SubShapeAll(box2, geompy.ShapeType["FACE"])
218 face2 = facesList2[1]
219
220 edgesList = geompy.SubShapeAll(face2, geompy.ShapeType["EDGE"])
221 edge1 = edgesList[2]
222
223 aComp = geompy.MakeCompound([face1, face2])
224 geompy.addToStudy(aComp, "Two faces")
225
226 # create a mesh on two faces
227 mesh = smesh.Mesh(aComp, "Two faces : quadrangle mesh")
228
229 algo1D = mesh.Segment()
230 algo1D.NumberOfSegments(9)
231 algo2D = mesh.Quadrangle()
232
233 algo_local = mesh.Segment(edge1)
234 algo_local.Arithmetic1D(1, 4)
235 algo_local.Propagation()
236
237 mesh.Compute()
238
239 # sew conform free borders
240 # FirstNodeID1, SecondNodeID1, LastNodeID1, FirstNodeID2, SecondNodeID2
241 mesh.SewConformFreeBorders(5, 45, 6, 3, 24) 
242 \endcode
243
244 <br>
245 \anchor tui_sew_free_borders
246 <h3>Sew Free Borders</h3>
247
248 \code
249 import geompy
250 import smesh
251
252 # create two faces of the box
253 box1 = geompy.MakeBox(0., 0., 0., 20., 20., 15.)
254 facesList1 = geompy.SubShapeAll(box1, geompy.ShapeType["FACE"])
255 face1 = facesList1[2]
256
257 box2 = geompy.MakeBox(0., 5., 0., 20., 20., 15.)
258 facesList2 = geompy.SubShapeAll(box2, geompy.ShapeType["FACE"])
259 face2 = facesList2[1]
260
261 edgesList = geompy.SubShapeAll(face2, geompy.ShapeType["EDGE"])
262 edge1 = edgesList[2]
263
264 aComp = geompy.MakeCompound([face1, face2])
265 geompy.addToStudy(aComp, "Two faces")
266
267 # create a mesh on two faces
268 mesh = smesh.Mesh(aComp, "Two faces : quadrangle mesh")
269
270 algo1D = mesh.Segment()
271 algo1D.NumberOfSegments(4)
272 algo2D = mesh.Quadrangle()
273
274 algo_local = mesh.Segment(edge1)
275 algo_local.Arithmetic1D(1, 4)
276 algo_local.Propagation()
277
278 mesh.Compute()
279
280 # sew free borders
281 # FirstNodeID1, SecondNodeID1, LastNodeID1,
282 # FirstNodeID2, SecondNodeID2, LastNodeID2, CreatePolygons, CreatePolyedrs
283 mesh.SewFreeBorders(6, 21, 5, 1, 12, 3, 0, 0)
284 \endcode
285
286 <br>
287 \anchor tui_sew_side_elements
288 <h3>Sew Side Elements</h3>
289
290 \code
291 import geompy
292 import smesh
293
294 # create two boxes
295 box1 = geompy.MakeBox(0.,  0., 0., 10., 10., 10.)
296 box2 = geompy.MakeBox(0., 15., 0., 20., 25., 10.)
297
298 EdgesList = geompy.SubShapeAll(box2, geompy.ShapeType["EDGE"])
299
300 aComp = geompy.MakeCompound([box1, box2])
301 geompy.addToStudy(aComp, "Two boxes")
302
303 # create a mesh on two boxes
304 mesh = smesh.Mesh(aComp, "Two faces : quadrangle mesh")
305
306 algo1D = mesh.Segment()
307 algo1D.NumberOfSegments(2)
308 algo2D = mesh.Quadrangle()
309
310 algo_local = mesh.Segment(EdgesList[8])
311 algo_local.NumberOfSegments(4)
312 algo_local.Propagation()
313
314 mesh.Compute()
315
316 # sew side elements
317 # IDsOfSide1Elements, IDsOfSide2Elements,
318 # NodeID1OfSide1ToMerge, NodeID1OfSide2ToMerge, NodeID2OfSide1ToMerge, NodeID2OfSide2ToMerge
319 mesh.SewSideElements([69, 70, 71, 72], [91, 92, 89, 90], 8, 38, 23, 58)
320 \endcode
321
322 */