Salome HOME
Join modifications from branch OCC_debug_for_3_2_0b1
[modules/smesh.git] / doc / salome / gui / SMESH / transforming_meshes.htm
1 <!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
2 \r
3 <html>\r
4 \r
5 <head>\r
6 <title>Transforming Meshes</title>\r
7 <meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
8 <meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com"><style type="text/css">\r
9 <!--\r
10 h3.whs1 { margin-top:0pt; margin-bottom:0pt; }\r
11 h4.whs2 { margin-top:0pt; margin-bottom:0pt; }\r
12 p.whs3 { font-family:'Lucida Console' , monospace; margin-top:0pt; margin-bottom:0pt; }\r
13 p.whs4 { margin-top:0pt; margin-bottom:0pt; }\r
14 p.whs5 { margin-top:0pt; margin-bottom:0pt; font-family:'Lucida Console' , monospace; }\r
15 -->\r
16 </style><script type="text/javascript" language="JavaScript">\r
17 <!--\r
18 if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
19 {\r
20   var strNSS = "<style type='text/css'>";\r
21   strNSS += "h3.whs1 {margin-top:1pt;margin-bottom:1pt; }";\r
22   strNSS += "h4.whs2 {margin-top:1pt;margin-bottom:1pt; }";\r
23   strNSS += "p.whs3 {margin-top:1pt;margin-bottom:1pt; }";\r
24   strNSS += "p.whs4 {margin-top:1pt;margin-bottom:1pt; }";\r
25   strNSS += "p.whs5 {margin-top:1pt;margin-bottom:1pt; }";\r
26   strNSS +="</style>";\r
27   document.write(strNSS);\r
28 }\r
29 //-->\r
30 </script>\r
31 <script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
32 <!--\r
33 function reDo() {\r
34   if (innerWidth != origWidth || innerHeight != origHeight)\r
35      location.reload();\r
36 }\r
37 if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
38         origWidth = innerWidth;\r
39         origHeight = innerHeight;\r
40         onresize = reDo;\r
41 }\r
42 onerror = null; \r
43 //-->\r
44 </script>\r
45 <style type="text/css">\r
46 <!--\r
47 div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
48 -->\r
49 </style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
50 <script type="text/javascript" language="javascript" src="whver.js"></script>\r
51 <script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
52 <script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
53 <script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
54 </head>\r
55 <body><script type="text/javascript" language="javascript1.2">\r
56 <!--\r
57 if (window.gbWhTopic)\r
58 {\r
59         if (window.addTocInfo)\r
60         {\r
61         addTocInfo("MESH module\nTUI Scripts\nTransforming Meshes");\r
62 addButton("show",BTN_TEXT,"Show","","","","",0,0,"","","");\r
63 \r
64         }\r
65         if (window.writeBtnStyle)\r
66                 writeBtnStyle();\r
67 \r
68         if (window.writeIntopicBar)\r
69                 writeIntopicBar(1);\r
70 \r
71         if (window.setRelStartPage)\r
72         {\r
73         setRelStartPage("smesh.htm");\r
74 \r
75                 autoSync(1);\r
76                 sendSyncInfo();\r
77                 sendAveInfoOut();\r
78         }\r
79 }\r
80 else\r
81         if (window.gbIE4)\r
82                 document.location.reload();\r
83 //-->\r
84 </script>\r
85 <h1>Transforming Meshes</h1>\r
86 \r
87 <h3 class="whs1">Transforming Meshes</h3>\r
88 \r
89 <h4 class="whs2">&nbsp;</h4>\r
90 \r
91 <h4 class="whs2"><a name=bookmark>Translation</a></h4>\r
92 \r
93 <p class="whs3">&nbsp;</p>\r
94 \r
95 <p class="whs3">import SMESH</p>\r
96 \r
97 <p class="whs3">import SMESH_mechanic</p>\r
98 \r
99 <p class="whs3">&nbsp;</p>\r
100 \r
101 <p class="whs3">mesh &nbsp;&nbsp;= \r
102  SMESH_mechanic.mesh</p>\r
103 \r
104 <p class="whs3">salome = SMESH_mechanic.salome</p>\r
105 \r
106 <p class="whs4">&nbsp;</p>\r
107 \r
108 <p class="whs4"># translate a mesh</p>\r
109 \r
110 <p class="whs3">anEditor = mesh.GetMeshEditor()</p>\r
111 \r
112 <p class="whs3">point = SMESH.PointStruct(-150, -150, \r
113  0)</p>\r
114 \r
115 <p class="whs3">vector = SMESH.DirStruct(point) </p>\r
116 \r
117 <p class="whs3">anEditor.TranslateObject(mesh, vector, \r
118  1)</p>\r
119 \r
120 <p class="whs4">&nbsp;</p>\r
121 \r
122 <p class="whs4"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
123  </p>\r
124 \r
125 <p class="whs4">&nbsp;</p>\r
126 \r
127 <h4 class="whs2"><a name=bookmark1>Rotation</a></h4>\r
128 \r
129 <p class="whs3">&nbsp;</p>\r
130 \r
131 <p class="whs3">import SMESH</p>\r
132 \r
133 <p class="whs3">import SMESH_mechanic</p>\r
134 \r
135 <p class="whs3">&nbsp;</p>\r
136 \r
137 <p class="whs3">import math</p>\r
138 \r
139 <p class="whs3">mesh &nbsp;&nbsp;= \r
140  SMESH_mechanic.mesh</p>\r
141 \r
142 <p class="whs3">salome = SMESH_mechanic.salome</p>\r
143 \r
144 <p class="whs4">&nbsp;</p>\r
145 \r
146 <p class="whs4"># rotate a mesh </p>\r
147 \r
148 <p class="whs3">anEditor = mesh.GetMeshEditor()</p>\r
149 \r
150 <p class="whs3">axisXYZ = SMESH.AxisStruct(0, 0, 0, 5, \r
151  5, 20)</p>\r
152 \r
153 <p class="whs3">angle180 = &nbsp;1.5*math.pi</p>\r
154 \r
155 <p class="whs3">anEditor.RotateObject(mesh, axisXYZ, angle180, \r
156  1)</p>\r
157 \r
158 <p class="whs3">&nbsp;</p>\r
159 \r
160 <p class="whs5">salome.sg.updateObjBrowser(1)</p>\r
161 \r
162 <p class="whs4">&nbsp;</p>\r
163 \r
164 <p class="whs4">&nbsp;</p>\r
165 \r
166 <h4 class="whs2"><a name=bookmark2>Symmetry</a></h4>\r
167 \r
168 <p class="whs3">&nbsp;</p>\r
169 \r
170 <p class="whs3">import SMESH</p>\r
171 \r
172 <p class="whs3">import SMESH_mechanic</p>\r
173 \r
174 <p class="whs3">&nbsp;</p>\r
175 \r
176 <p class="whs3">import math</p>\r
177 \r
178 <p class="whs3">mesh &nbsp;&nbsp;= \r
179  SMESH_mechanic.mesh</p>\r
180 \r
181 <p class="whs3">salome = SMESH_mechanic.salome</p>\r
182 \r
183 <p class="whs4">&nbsp;</p>\r
184 \r
185 <p class="whs4"># create a symmetrical \r
186  copy of the mesh mirrored through a point</p>\r
187 \r
188 <p class="whs3">anEditor = mesh.GetMeshEditor()</p>\r
189 \r
190 <p class="whs3">anEditor.MirrorObject(mesh, SMESH.AxisStruct(0, \r
191  0, 0, 0, 0, 0), SMESH.SMESH_MeshEditor.POINT, 1) </p>\r
192 \r
193 <p class="whs3">&nbsp;</p>\r
194 \r
195 <p class="whs4"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
196  </p>\r
197 \r
198 <p class="whs4">&nbsp;</p>\r
199 \r
200 <p class="whs4">&nbsp;</p>\r
201 \r
202 <h4 class="whs2"><a name=bookmark3>Merging \r
203  Nodes</a></h4>\r
204 \r
205 <p class="whs3">&nbsp;</p>\r
206 \r
207 <p class="whs3">import SMESH</p>\r
208 \r
209 <p class="whs3">import SMESH_mechanic</p>\r
210 \r
211 <p class="whs3">&nbsp;</p>\r
212 \r
213 <p class="whs3">smesh &nbsp;= \r
214  SMESH_mechanic.smesh</p>\r
215 \r
216 <p class="whs3">mesh &nbsp;&nbsp;= \r
217  SMESH_mechanic.mesh</p>\r
218 \r
219 <p class="whs3">salome = SMESH_mechanic.salome</p>\r
220 \r
221 <p class="whs4">&nbsp;</p>\r
222 \r
223 <p class="whs4"># merge nodes</p>\r
224 \r
225 <p class="whs3">aMeshEditor = mesh.GetMeshEditor()</p>\r
226 \r
227 <p class="whs3">Tolerance = 25.0</p>\r
228 \r
229 <p class="whs3">&nbsp;</p>\r
230 \r
231 <p class="whs3">GroupsOfNodes = aMeshEditor.FindCoincidentNodes(Tolerance)</p>\r
232 \r
233 <p class="whs3">aMeshEditor.MergeNodes(GroupsOfNodes)</p>\r
234 \r
235 <p class="whs3">&nbsp;&nbsp;&nbsp;&nbsp;</p>\r
236 \r
237 <p class="whs4"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
238  </p>\r
239 \r
240 <p class="whs4">&nbsp;</p>\r
241 \r
242 <h4><a name=bookmark8>Merging Elements</a></h4>\r
243 \r
244 <p class="whs5">import geompy</p>\r
245 \r
246 <p class="whs5">import smesh</p>\r
247 \r
248 <p class="whs5">import salome</p>\r
249 \r
250 <p class="whs5">import SMESH</p>\r
251 \r
252 <p class="whs4">&nbsp;</p>\r
253 \r
254 <p class="whs4"># create a face to be meshed</p>\r
255 \r
256 <p class="whs5">px = geompy.MakeVertex(100., \r
257  0. &nbsp;, 0. \r
258  &nbsp;)</p>\r
259 \r
260 <p class="whs5">py = geompy.MakeVertex(0. \r
261  &nbsp;, 100., \r
262  0. &nbsp;)</p>\r
263 \r
264 <p class="whs5">pz = geompy.MakeVertex(0. \r
265  &nbsp;, 0. &nbsp;, \r
266  100.)</p>\r
267 \r
268 <p class="whs5">&nbsp;</p>\r
269 \r
270 <p class="whs5">vxy = geompy.MakeVector(px, \r
271  py)</p>\r
272 \r
273 <p class="whs5">arc = geompy.MakeArc(py, \r
274  pz, px)</p>\r
275 \r
276 <p class="whs5">&nbsp;</p>\r
277 \r
278 <p class="whs5">wire = geompy.MakeWire([vxy, \r
279  arc])</p>\r
280 \r
281 <p class="whs5">isPlanarFace = 1</p>\r
282 \r
283 <p class="whs5">&nbsp;</p>\r
284 \r
285 <p class="whs5">face1 = geompy.MakeFace(wire, \r
286  isPlanarFace)</p>\r
287 \r
288 <p class="whs5">id_face1 = geompy.addToStudy(face1, \r
289  &quot;Face1&quot;)</p>\r
290 \r
291 <p class="whs4">&nbsp;</p>\r
292 \r
293 <p class="whs4"># create a 2D mesh on the \r
294  face</p>\r
295 \r
296 <p class="whs5">trias = smesh.Mesh(face1, \r
297  &quot;Face : 2D mesh&quot;)</p>\r
298 \r
299 <p class="whs5">&nbsp;</p>\r
300 \r
301 <p class="whs5">algo = trias.Segment()</p>\r
302 \r
303 <p class="whs5">algo.NumberOfSegments(6)</p>\r
304 \r
305 <p class="whs5">&nbsp;</p>\r
306 \r
307 <p class="whs5">algo = trias.Triangle()</p>\r
308 \r
309 <p class="whs5">algo.LengthFromEdges()</p>\r
310 \r
311 <p class="whs5">&nbsp;</p>\r
312 \r
313 <p class="whs5">trias.Compute()</p>\r
314 \r
315 <p class="whs5">&nbsp;</p>\r
316 \r
317 <p class="whs5">tri_mesh = trias.GetMesh()</p>\r
318 \r
319 <p class="whs4">&nbsp;</p>\r
320 \r
321 <p class="whs4"># create a path mesh</p>\r
322 \r
323 <p class="whs5">px1 = geompy.MakeVertex(100., \r
324  100. &nbsp;, \r
325  0. &nbsp;)</p>\r
326 \r
327 <p class="whs5">py1 = geompy.MakeVertex(-100. \r
328  &nbsp;, -100., \r
329  0. &nbsp;)</p>\r
330 \r
331 <p class="whs5">pz1 = geompy.MakeVertex(0. \r
332  &nbsp;, 0. &nbsp;, \r
333  50.)</p>\r
334 \r
335 <p class="whs5">&nbsp;</p>\r
336 \r
337 <p class="whs5">circle = geompy.MakeCircleThreePnt(py1, \r
338  pz1, px1)</p>\r
339 \r
340 <p class="whs5">id_circle = geompy.addToStudy(circle, \r
341  &quot;Path&quot;)</p>\r
342 \r
343 <p class="whs5">&nbsp;</p>\r
344 \r
345 <p class="whs5">circlemesh = smesh.Mesh(circle, \r
346  &quot;Path mesh&quot;)</p>\r
347 \r
348 <p class="whs5">&nbsp;</p>\r
349 \r
350 <p class="whs5">algo = circlemesh.Segment()</p>\r
351 \r
352 <p class="whs5">algo.NumberOfSegments(10)</p>\r
353 \r
354 <p class="whs5">&nbsp;</p>\r
355 \r
356 <p class="whs5">circlemesh.Compute()</p>\r
357 \r
358 <p class="whs4">&nbsp;</p>\r
359 \r
360 <p class="whs4"># extrusion of the mesh</p>\r
361 \r
362 <p class="whs5">aMeshEditor = tri_mesh.GetMeshEditor()</p>\r
363 \r
364 <p class="whs5">aMeshEditor.ExtrusionAlongPathObject(tri_mesh, \r
365  circlemesh.GetMesh(), circle, 1, 0, [], 0, SMESH.PointStruct(0, 0, 0))</p>\r
366 \r
367 <p class="whs4">&nbsp;</p>\r
368 \r
369 <p class="whs4"># merge nodes</p>\r
370 \r
371 <p class="whs5">print &quot;Number \r
372  of nodes before MergeNodes:&quot;, tri_mesh.NbNodes()</p>\r
373 \r
374 <p class="whs5">&nbsp;</p>\r
375 \r
376 <p class="whs5">tolerance = 0.001</p>\r
377 \r
378 <p class="whs5">array_of_nodes_groups \r
379  = aMeshEditor.FindCoincidentNodes(tolerance)</p>\r
380 \r
381 <p class="whs5">aMeshEditor.MergeNodes(array_of_nodes_groups)</p>\r
382 \r
383 <p class="whs5">&nbsp;</p>\r
384 \r
385 <p class="whs5">print &quot;Number \r
386  of nodes after MergeNodes:&quot;, tri_mesh.NbNodes()</p>\r
387 \r
388 <p class="whs5">print &quot;&quot;</p>\r
389 \r
390 <p class="whs5">print &quot;Number \r
391  of elements before MergeEqualElements:&quot;</p>\r
392 \r
393 <p class="whs5">print &quot;Edges \r
394  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: \r
395  &quot;, tri_mesh.NbEdges()</p>\r
396 \r
397 <p class="whs5">print &quot;Triangles \r
398  &nbsp;: &quot;, \r
399  tri_mesh.NbTriangles()</p>\r
400 \r
401 <p class="whs5">print &quot;Quadrangles: \r
402  &quot;, tri_mesh.NbQuadrangles()</p>\r
403 \r
404 <p class="whs5">print &quot;Volumes \r
405  &nbsp;&nbsp;&nbsp;: \r
406  &quot;, tri_mesh.NbVolumes()</p>\r
407 \r
408 <p class="whs4">&nbsp;</p>\r
409 \r
410 <p class="whs4"># merge elements</p>\r
411 \r
412 <p class="whs5">aMeshEditor.MergeEqualElements()</p>\r
413 \r
414 <p class="whs5">&nbsp;</p>\r
415 \r
416 <p class="whs5">print &quot;Number \r
417  of elements after MergeEqualElements:&quot;</p>\r
418 \r
419 <p class="whs5">print &quot;Edges \r
420  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: \r
421  &quot;, tri_mesh.NbEdges()</p>\r
422 \r
423 <p class="whs5">print &quot;Triangles \r
424  &nbsp;: &quot;, \r
425  tri_mesh.NbTriangles()</p>\r
426 \r
427 <p class="whs5">print &quot;Quadrangles: \r
428  &quot;, tri_mesh.NbQuadrangles()</p>\r
429 \r
430 <p class="whs5">print &quot;Volumes \r
431  &nbsp;&nbsp;&nbsp;: \r
432  &quot;, tri_mesh.NbVolumes()</p>\r
433 \r
434 <p class="whs5">&nbsp;</p>\r
435 \r
436 <p class="whs4"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
437  </p>\r
438 \r
439 <h3>Sewing Meshes</h3>\r
440 \r
441 <h4><a name=bookmark4>Sew Meshes Border to Border</a></h4>\r
442 \r
443 <p class="whs5">import salome</p>\r
444 \r
445 <p class="whs5">import geompy</p>\r
446 \r
447 <p class="whs5">import smesh</p>\r
448 \r
449 <p class="whs4">&nbsp;</p>\r
450 \r
451 <p class="whs4"># create two faces of a \r
452  box</p>\r
453 \r
454 <p class="whs5">box1 = geompy.MakeBox(0., \r
455  0., -10., 30., 20., 25.)</p>\r
456 \r
457 <p class="whs5">subShapeList1 = \r
458  geompy.SubShapeAll(box1, geompy.ShapeType[&quot;FACE&quot;])</p>\r
459 \r
460 <p class="whs5">&nbsp;</p>\r
461 \r
462 <p class="whs5">box2 = geompy.MakeBox(0., \r
463  5., 0., 20., 20., 15.)</p>\r
464 \r
465 <p class="whs5">subShapeList2 = \r
466  geompy.SubShapeAll(box2, geompy.ShapeType[&quot;FACE&quot;])</p>\r
467 \r
468 <p class="whs5">EdgesList = geompy.SubShapeAll(subShapeList2[ \r
469  1 ], geompy.ShapeType[&quot;EDGE&quot;])</p>\r
470 \r
471 <p class="whs5">&nbsp;</p>\r
472 \r
473 <p class="whs5">aComp = geompy.MakeCompound( \r
474  [subShapeList1[ 2 ], subShapeList2[ 1 ]] )</p>\r
475 \r
476 <p class="whs5">idComp = geompy.addToStudy( \r
477  aComp, &quot;Two faces&quot; )</p>\r
478 \r
479 <p class="whs5">aCompobj &nbsp;= \r
480  salome.IDToObject( idComp )</p>\r
481 \r
482 <p class="whs5">&nbsp;</p>\r
483 \r
484 <p class="whs4"># create a mesh on two \r
485  faces</p>\r
486 \r
487 <p class="whs4">&nbsp;</p>\r
488 \r
489 <p class="whs5">mesh = smesh.Mesh(aCompobj, \r
490  &quot;Two faces : quadrangle mesh&quot;)</p>\r
491 \r
492 <p class="whs5">algo = mesh.Segment()</p>\r
493 \r
494 <p class="whs5">&nbsp;</p>\r
495 \r
496 <p class="whs4"># define &quot;NumberOfSegments&quot; \r
497  hypothesis to cut an edge in a fixed number of segments</p>\r
498 \r
499 <p class="whs5">algo.NumberOfSegments(9)</p>\r
500 \r
501 <p class="whs4">&nbsp;</p>\r
502 \r
503 <p class="whs4"># create a quadrangle 2D \r
504  algorithm for faces</p>\r
505 \r
506 <p class="whs5">mesh.Quadrangle()</p>\r
507 \r
508 <p class="whs4">&nbsp;</p>\r
509 \r
510 <p class="whs4"># create a local hypothesis</p>\r
511 \r
512 <p class="whs5">algo = mesh.Segment(EdgesList[2])</p>\r
513 \r
514 <p class="whs4">&nbsp;</p>\r
515 \r
516 <p class="whs4"># define &quot;Arithmetic1D&quot; \r
517  hypothesis to cut an edge in several segments with increasing arithmetic \r
518  length </p>\r
519 \r
520 <p class="whs5">algo.Arithmetic1D(1, \r
521  4)</p>\r
522 \r
523 <p class="whs4">&nbsp;</p>\r
524 \r
525 <p class="whs4"># define &quot;Propagation&quot; \r
526  hypothesis that propagates all other hypothesis on all edges on the opposite \r
527  side in case of quadrangular faces</p>\r
528 \r
529 <p class="whs5">algo.Propagation()</p>\r
530 \r
531 <p class="whs5">mesh.Compute()</p>\r
532 \r
533 <p class="whs4">&nbsp;</p>\r
534 \r
535 <p class="whs4"># sew free borders</p>\r
536 \r
537 <p class="whs5">anEditor = mesh.GetMesh().GetMeshEditor()</p>\r
538 \r
539 <p class="whs5">anEditor.SewBorderToSide(5, \r
540  45, 6, 113, 109, 0, 0)</p>\r
541 \r
542 <p class="whs5">&nbsp;</p>\r
543 \r
544 <p class="whs4"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
545  </p>\r
546 \r
547 <p class="whs4">&nbsp;</p>\r
548 \r
549 <h4><a name=bookmark5>Sew Conform Free Borders</a></h4>\r
550 \r
551 <p class="whs5">import salome</p>\r
552 \r
553 <p class="whs5">import geompy</p>\r
554 \r
555 <p class="whs5">import smesh</p>\r
556 \r
557 <p class="whs4">&nbsp;</p>\r
558 \r
559 <p class="whs4"># create two faces of the \r
560  box</p>\r
561 \r
562 <p class="whs5">box1 = geompy.MakeBox(0., \r
563  0., -10., 20., 20., 15.)</p>\r
564 \r
565 <p class="whs5">subShapeList1 = \r
566  geompy.SubShapeAll(box1, geompy.ShapeType[&quot;FACE&quot;])</p>\r
567 \r
568 <p class="whs5">&nbsp;</p>\r
569 \r
570 <p class="whs5">box2 = geompy.MakeBox(0., \r
571  5., 0., 20., 20., 15.)</p>\r
572 \r
573 <p class="whs5">subShapeList2 = \r
574  geompy.SubShapeAll(box2, geompy.ShapeType[&quot;FACE&quot;])</p>\r
575 \r
576 <p class="whs5">EdgesList = geompy.SubShapeAll(subShapeList2[ \r
577  1 ], geompy.ShapeType[&quot;EDGE&quot;])</p>\r
578 \r
579 <p class="whs5">&nbsp;</p>\r
580 \r
581 <p class="whs5">aComp = geompy.MakeCompound( \r
582  [subShapeList1[ 2 ], subShapeList2[ 1 ]] )</p>\r
583 \r
584 <p class="whs5">idComp = geompy.addToStudy( \r
585  aComp, &quot;Two faces&quot; )</p>\r
586 \r
587 <p class="whs5">aCompobj &nbsp;= \r
588  salome.IDToObject( idComp )</p>\r
589 \r
590 <p class="whs4">&nbsp;</p>\r
591 \r
592 <p class="whs4"># create a mesh on two \r
593  faces</p>\r
594 \r
595 <p class="whs5">mesh = smesh.Mesh(aCompobj, \r
596  &quot;Two faces : quadrangle mesh&quot;)</p>\r
597 \r
598 <p class="whs5">algo = mesh.Segment()</p>\r
599 \r
600 <p class="whs4">&nbsp;</p>\r
601 \r
602 <p class="whs4"># define &quot;NumberOfSegments&quot; \r
603  hypothesis to cut an edge in a fixed number of segments</p>\r
604 \r
605 <p class="whs5">algo.NumberOfSegments(9)</p>\r
606 \r
607 <p class="whs4">&nbsp;</p>\r
608 \r
609 <p class="whs4"># create a quadrangle 2D \r
610  algorithm for faces</p>\r
611 \r
612 <p class="whs5">mesh.Quadrangle()</p>\r
613 \r
614 <p class="whs4">&nbsp;</p>\r
615 \r
616 <p class="whs4"># create a local hypothesis</p>\r
617 \r
618 <p class="whs5">algo = mesh.Segment(EdgesList[2])</p>\r
619 \r
620 <p class="whs4">&nbsp;</p>\r
621 \r
622 <p class="whs4"># define &quot;Arithmetic1D&quot; \r
623  hypothesis to cut an edge in several segments with increasing arithmetic \r
624  length </p>\r
625 \r
626 <p class="whs5">algo.Arithmetic1D(1, \r
627  4)</p>\r
628 \r
629 <p class="whs4">&nbsp;</p>\r
630 \r
631 <p class="whs4"># define &quot;Propagation&quot; \r
632  hypothesis that propagate all other hypothesis on all edges on<span style="margin-top: 0pt; margin-bottom: 0pt;"> \r
633  the opposite side in case of quadrangular faces</span></p>\r
634 \r
635 <p class="whs5">algo.Propagation()</p>\r
636 \r
637 <p class="whs5">mesh.Compute()</p>\r
638 \r
639 <p class="whs4">&nbsp;</p>\r
640 \r
641 <p class="whs4"># sew free borders</p>\r
642 \r
643 <p class="whs5">anEditor = mesh.GetMesh().GetMeshEditor()</p>\r
644 \r
645 <p class="whs5">anEditor.SewConformFreeBorders(5, \r
646  45, 6, 3, 24)</p>\r
647 \r
648 <p class="whs4"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
649  </p>\r
650 \r
651 <p class="whs4">&nbsp;</p>\r
652 \r
653 <h4><a name=bookmark6>Sew Free Borders</a></h4>\r
654 \r
655 <p class="whs5">import salome</p>\r
656 \r
657 <p class="whs5">import geompy</p>\r
658 \r
659 <p class="whs5">import smesh</p>\r
660 \r
661 <p class="whs4">&nbsp;</p>\r
662 \r
663 <p class="whs4"># create two faces of the \r
664  box</p>\r
665 \r
666 <p class="whs5">box1 = geompy.MakeBox(0., \r
667  0., 0., 20., 20., 15.)</p>\r
668 \r
669 <p class="whs5">subShapeList1 = \r
670  geompy.SubShapeAll(box1, geompy.ShapeType[&quot;FACE&quot;])</p>\r
671 \r
672 <p class="whs4">&nbsp;</p>\r
673 \r
674 <p class="whs5">box2 = geompy.MakeBox(0., \r
675  5., 0., 20., 20., 15.)</p>\r
676 \r
677 <p class="whs5">subShapeList2 = \r
678  geompy.SubShapeAll(box2, geompy.ShapeType[&quot;FACE&quot;])</p>\r
679 \r
680 <p class="whs5">EdgesList = geompy.SubShapeAll(subShapeList2[ \r
681  1 ], geompy.ShapeType[&quot;EDGE&quot;])</p>\r
682 \r
683 <p class="whs5">&nbsp;</p>\r
684 \r
685 <p class="whs5">aComp = geompy.MakeCompound( \r
686  [subShapeList1[ 2 ], subShapeList2[ 1 ]] )</p>\r
687 \r
688 <p class="whs5">idComp = geompy.addToStudy( \r
689  aComp, &quot;Two faces&quot; )</p>\r
690 \r
691 <p class="whs5">aCompobj &nbsp;= \r
692  salome.IDToObject( idComp )</p>\r
693 \r
694 <p class="whs5">&nbsp;</p>\r
695 \r
696 <p class="whs4"># create a mesh on two \r
697  faces</p>\r
698 \r
699 <p class="whs5">mesh = smesh.Mesh(aCompobj, \r
700  &quot;Two faces : quadrangle mesh&quot;)</p>\r
701 \r
702 <p class="whs5">algo = mesh.Segment()</p>\r
703 \r
704 <p class="whs4">&nbsp;</p>\r
705 \r
706 <p class="whs4"># define &quot;NumberOfSegments&quot; \r
707  hypothesis to cut an edge in a fixed number of segments</p>\r
708 \r
709 <p class="whs5">algo.NumberOfSegments(4)</p>\r
710 \r
711 <p class="whs4">&nbsp;</p>\r
712 \r
713 <p class="whs4"># creates a quadrangle \r
714  2D algorithm for faces</p>\r
715 \r
716 <p class="whs5">mesh.Quadrangle()</p>\r
717 \r
718 <p class="whs4">&nbsp;</p>\r
719 \r
720 <p class="whs4"># create a local hypothesis</p>\r
721 \r
722 <p class="whs5">algo = mesh.Segment(EdgesList[2])</p>\r
723 \r
724 <p class="whs4">&nbsp;</p>\r
725 \r
726 <p class="whs4"># define &quot;Arithmetic1D&quot; \r
727  hypothesis to cut an edge in several segments with &nbsp;increasing \r
728  arithmetic length</p>\r
729 \r
730 <p class="whs5">algo.Arithmetic1D(1, \r
731  4)</p>\r
732 \r
733 <p class="whs4">&nbsp;</p>\r
734 \r
735 <p class="whs4"># define &quot;Propagation&quot; \r
736  hypothesis that propagate all other hypothesis on all edges on<span style="margin-top: 0pt; margin-bottom: 0pt;"> \r
737  the opposite side in case of quadrangular faces</span></p>\r
738 \r
739 <p class="whs5">algo.Propagation()</p>\r
740 \r
741 <p class="whs5">mesh.Compute()</p>\r
742 \r
743 <p class="whs4">&nbsp;</p>\r
744 \r
745 <p class="whs4"># sew free borders</p>\r
746 \r
747 <p class="whs5">anEditor = mesh.GetMesh().GetMeshEditor()</p>\r
748 \r
749 <p class="whs5">anEditor.SewFreeBorders(6, \r
750  21, 5, 1, 12, 3, 0, 0)</p>\r
751 \r
752 <p class="whs5">&nbsp;</p>\r
753 \r
754 <p class="whs4"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
755  </p>\r
756 \r
757 <p class="whs4">&nbsp;</p>\r
758 \r
759 <h4><a name=bookmark7>Sew Side Elements</a></h4>\r
760 \r
761 <p class="whs5">import salome</p>\r
762 \r
763 <p class="whs5">import geompy</p>\r
764 \r
765 <p class="whs5">import smesh</p>\r
766 \r
767 <p class="whs5">&nbsp;</p>\r
768 \r
769 <p class="whs4"># create two faces of the \r
770  box</p>\r
771 \r
772 <p class="whs5">box1 = geompy.MakeBox(0., \r
773  &nbsp;0., 0., \r
774  10., 10., 10.)</p>\r
775 \r
776 <p class="whs5">box2 = geompy.MakeBox(0., \r
777  15., 0., 20., 25., 10.)</p>\r
778 \r
779 <p class="whs5">EdgesList = geompy.SubShapeAll(box2, \r
780  geompy.ShapeType[&quot;EDGE&quot;])</p>\r
781 \r
782 <p class="whs4">&nbsp;</p>\r
783 \r
784 <p class="whs5">aComp = geompy.MakeCompound( \r
785  [box1, box2] )</p>\r
786 \r
787 <p class="whs5">idComp = geompy.addToStudy( \r
788  aComp, &quot;Two faces&quot; )</p>\r
789 \r
790 <p class="whs5">aCompobj &nbsp;= \r
791  salome.IDToObject( idComp )</p>\r
792 \r
793 <p class="whs5">&nbsp;</p>\r
794 \r
795 <p class="whs4"># create a mesh on two \r
796  faces</p>\r
797 \r
798 <p class="whs5">mesh = smesh.Mesh(aCompobj, \r
799  &quot;Two faces : quadrangle mesh&quot;)</p>\r
800 \r
801 <p class="whs5">algo = mesh.Segment()</p>\r
802 \r
803 <p class="whs4">&nbsp;</p>\r
804 \r
805 <p class="whs4"># define &quot;NumberOfSegments&quot; \r
806  hypothesis to cut an edge in a fixed number of segments</p>\r
807 \r
808 <p class="whs5">algo.NumberOfSegments(2)</p>\r
809 \r
810 <p class="whs4">&nbsp;</p>\r
811 \r
812 <p class="whs4"># create a quadrangle 2D \r
813  algorithm for faces</p>\r
814 \r
815 <p class="whs5">mesh.Quadrangle()</p>\r
816 \r
817 <p class="whs4">&nbsp;</p>\r
818 \r
819 <p class="whs4"># create a local hypothesis</p>\r
820 \r
821 <p class="whs5">algo = mesh.Segment(EdgesList[8])</p>\r
822 \r
823 <p class="whs4">&nbsp;</p>\r
824 \r
825 <p class="whs4"># define &quot;Arithmetic1D&quot; \r
826  hypothesis to cut an edge in several segments with increasing arithmetic \r
827  length </p>\r
828 \r
829 <p class="whs5">algo.NumberOfSegments(4)</p>\r
830 \r
831 <p class="whs4">&nbsp;</p>\r
832 \r
833 <p class="whs4"># define &quot;Propagation&quot; \r
834  hypothesis that propagates all other hypothesis on all edges on <span \r
835  style="margin-top: 0pt; margin-bottom: 0pt;">the opposite side in case \r
836  of quadrangular faces</span></p>\r
837 \r
838 <p class="whs5">algo.Propagation()</p>\r
839 \r
840 <p class="whs5">mesh.Compute()</p>\r
841 \r
842 <p class="whs4">&nbsp;</p>\r
843 \r
844 <p class="whs4"># sew free borders</p>\r
845 \r
846 <p class="whs5">anEditor = mesh.GetMesh().GetMeshEditor()</p>\r
847 \r
848 <p class="whs5">anEditor.SewSideElements([69, \r
849  70, 71, 72], [91, 92, 89, 90], 8, 38, 23, 58)</p>\r
850 \r
851 <p class="whs4"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
852  </p>\r
853 \r
854 <script type="text/javascript" language="javascript1.2">\r
855 <!--\r
856 if (window.writeIntopicBar)\r
857         writeIntopicBar(0);\r
858 //-->\r
859 </script>\r
860 </body>\r
861 </html>\r