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