1 <!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">
\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
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
16 </style><script type="text/javascript" language="JavaScript">
\r
18 if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))
\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
31 <script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">
\r
34 if (innerWidth != origWidth || innerHeight != origHeight)
\r
37 if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {
\r
38 origWidth = innerWidth;
\r
39 origHeight = innerHeight;
\r
45 <style type="text/css">
\r
47 div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }
\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
55 <body><script type="text/javascript" language="javascript1.2">
\r
57 if (window.gbWhTopic)
\r
59 if (window.addTocInfo)
\r
61 addTocInfo("MESH module\nTUI Scripts\nTransforming Meshes");
\r
62 addButton("show",BTN_TEXT,"Show","","","","",0,0,"","","");
\r
65 if (window.writeBtnStyle)
\r
68 if (window.writeIntopicBar)
\r
71 if (window.setRelStartPage)
\r
73 setRelStartPage("smesh.htm");
\r
82 document.location.reload();
\r
85 <h1>Transforming Meshes</h1>
\r
87 <h3 class="whs1">Transforming Meshes</h3>
\r
89 <h4 class="whs2"> </h4>
\r
91 <h4 class="whs2"><a name=bookmark>Translation</a></h4>
\r
93 <p class="whs3"> </p>
\r
95 <p class="whs3">import SMESH</p>
\r
97 <p class="whs3">import SMESH_mechanic</p>
\r
99 <p class="whs3"> </p>
\r
101 <p class="whs3">mesh =
\r
102 SMESH_mechanic.mesh</p>
\r
104 <p class="whs3">salome = SMESH_mechanic.salome</p>
\r
106 <p class="whs4"> </p>
\r
108 <p class="whs4"># translate a mesh</p>
\r
110 <p class="whs3">anEditor = mesh.GetMeshEditor()</p>
\r
112 <p class="whs3">point = SMESH.PointStruct(-150, -150,
\r
115 <p class="whs3">vector = SMESH.DirStruct(point) </p>
\r
117 <p class="whs3">anEditor.TranslateObject(mesh, vector,
\r
120 <p class="whs4"> </p>
\r
122 <p class="whs4"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span>
\r
125 <p class="whs4"> </p>
\r
127 <h4 class="whs2"><a name=bookmark1>Rotation</a></h4>
\r
129 <p class="whs3"> </p>
\r
131 <p class="whs3">import SMESH</p>
\r
133 <p class="whs3">import SMESH_mechanic</p>
\r
135 <p class="whs3"> </p>
\r
137 <p class="whs3">mport math</p>
\r
139 <p class="whs3">mesh =
\r
140 SMESH_mechanic.mesh</p>
\r
142 <p class="whs3">salome = SMESH_mechanic.salome</p>
\r
144 <p class="whs4"> </p>
\r
146 <p class="whs4"># rotate a mesh </p>
\r
148 <p class="whs3">anEditor = mesh.GetMeshEditor()</p>
\r
150 <p class="whs3">axisXYZ = SMESH.AxisStruct(0, 0, 0, 5,
\r
153 <p class="whs3">angle180 = 1.5*math.pi</p>
\r
155 <p class="whs3">anEditor.RotateObject(mesh, axisXYZ, angle180,
\r
158 <p class="whs3"> </p>
\r
160 <p class="whs5">salome.sg.updateObjBrowser(1)</p>
\r
162 <p class="whs4"> </p>
\r
164 <p class="whs4"> </p>
\r
166 <h4 class="whs2"><a name=bookmark2>Symmetry</a></h4>
\r
168 <p class="whs3"> </p>
\r
170 <p class="whs3">import SMESH</p>
\r
172 <p class="whs3">import SMESH_mechanic</p>
\r
174 <p class="whs3"> </p>
\r
176 <p class="whs3">import math</p>
\r
178 <p class="whs3">mesh =
\r
179 SMESH_mechanic.mesh</p>
\r
181 <p class="whs3">salome = SMESH_mechanic.salome</p>
\r
183 <p class="whs4"> </p>
\r
185 <p class="whs4"># create a symmetrical
\r
186 copy of the mesh mirrored through a point</p>
\r
188 <p class="whs3">anEditor = mesh.GetMeshEditor()</p>
\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
193 <p class="whs3"> </p>
\r
195 <p class="whs4"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span>
\r
198 <p class="whs4"> </p>
\r
200 <p class="whs4"> </p>
\r
202 <h4 class="whs2"><a name=bookmark3>Merging
\r
205 <p class="whs3"> </p>
\r
207 <p class="whs3">import SMESH</p>
\r
209 <p class="whs3">import SMESH_mechanic</p>
\r
211 <p class="whs3"> </p>
\r
213 <p class="whs3">smesh =
\r
214 SMESH_mechanic.smesh</p>
\r
216 <p class="whs3">mesh =
\r
217 SMESH_mechanic.mesh</p>
\r
219 <p class="whs3">salome = SMESH_mechanic.salome</p>
\r
221 <p class="whs4"> </p>
\r
223 <p class="whs4"># merge nodes</p>
\r
225 <p class="whs3">aMeshEditor = mesh.GetMeshEditor()</p>
\r
227 <p class="whs3">Tolerance = 25.0</p>
\r
229 <p class="whs3"> </p>
\r
231 <p class="whs3">GroupsOfNodes = aMeshEditor.FindCoincidentNodes(Tolerance)</p>
\r
233 <p class="whs3">aMeshEditor.MergeNodes(GroupsOfNodes)</p>
\r
235 <p class="whs3"> </p>
\r
237 <p class="whs4"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span>
\r
240 <p class="whs4"> </p>
\r
242 <h3>Sewing Meshes</h3>
\r
244 <h4><a name=bookmark4>Sew Meshes Border to Border</a></h4>
\r
246 <p class="whs5">import salome</p>
\r
248 <p class="whs5">import geompy</p>
\r
250 <p class="whs5">import smesh</p>
\r
252 <p class="whs4"> </p>
\r
254 <p class="whs4"># create two faces of a
\r
257 <p class="whs5">box1 = geompy.MakeBox(0.,
\r
258 0., -10., 30., 20., 25.)</p>
\r
260 <p class="whs5">subShapeList1 =
\r
261 geompy.SubShapeAll(box1, geompy.ShapeType["FACE"])</p>
\r
263 <p class="whs5"> </p>
\r
265 <p class="whs5">box2 = geompy.MakeBox(0.,
\r
266 5., 0., 20., 20., 15.)</p>
\r
268 <p class="whs5">subShapeList2 =
\r
269 geompy.SubShapeAll(box2, geompy.ShapeType["FACE"])</p>
\r
271 <p class="whs5">EdgesList = geompy.SubShapeAll(subShapeList2[
\r
272 1 ], geompy.ShapeType["EDGE"])</p>
\r
274 <p class="whs5"> </p>
\r
276 <p class="whs5">aComp = geompy.MakeCompound(
\r
277 [subShapeList1[ 2 ], subShapeList2[ 1 ]] )</p>
\r
279 <p class="whs5">idComp = geompy.addToStudy(
\r
280 aComp, "Two faces" )</p>
\r
282 <p class="whs5">aCompobj =
\r
283 salome.IDToObject( idComp )</p>
\r
285 <p class="whs5"> </p>
\r
287 <p class="whs4"># create a mesh on two
\r
290 <p class="whs4"> </p>
\r
292 <p class="whs5">mesh = smesh.Mesh(aCompobj,
\r
293 "Two faces : quadrangle mesh")</p>
\r
295 <p class="whs5">algo = mesh.Segment()</p>
\r
297 <p class="whs5"> </p>
\r
299 <p class="whs4"># define "NumberOfSegments"
\r
300 hypothesis to cut an edge in a fixed number of segments</p>
\r
302 <p class="whs5">algo.NumberOfSegments(9)</p>
\r
304 <p class="whs4"> </p>
\r
306 <p class="whs4"># create a quadrangle 2D
\r
307 algorithm for faces</p>
\r
309 <p class="whs5">mesh.Quadrangle()</p>
\r
311 <p class="whs4"> </p>
\r
313 <p class="whs4"># create a local hypothesis</p>
\r
315 <p class="whs5">algo = mesh.Segment(EdgesList[2])</p>
\r
317 <p class="whs4"> </p>
\r
319 <p class="whs4"># define "Arithmetic1D"
\r
320 hypothesis to cut an edge in several segments with increasing arithmetic
\r
323 <p class="whs5">algo.Arithmetic1D(1,
\r
326 <p class="whs4"> </p>
\r
328 <p class="whs4"># define "Propagation"
\r
329 hypothesis that propagates all other hypothesis on all edges on the opposite
\r
330 side in case of quadrangular faces</p>
\r
332 <p class="whs5">algo.Propagation()</p>
\r
334 <p class="whs5">mesh.Compute()</p>
\r
336 <p class="whs4"> </p>
\r
338 <p class="whs4"># sew free borders</p>
\r
340 <p class="whs5">anEditor = mesh.GetMesh().GetMeshEditor()</p>
\r
342 <p class="whs5">anEditor.SewBorderToSide(5,
\r
343 45, 6, 113, 109, 0, 0)</p>
\r
345 <p class="whs5"> </p>
\r
347 <p class="whs4"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span>
\r
350 <p class="whs4"> </p>
\r
352 <h4><a name=bookmark5>Sew Conform Free Borders</a></h4>
\r
354 <p class="whs5">import salome</p>
\r
356 <p class="whs5">import geompy</p>
\r
358 <p class="whs5">import smesh</p>
\r
360 <p class="whs4"> </p>
\r
362 <p class="whs4"># create two faces of the
\r
365 <p class="whs5">box1 = geompy.MakeBox(0.,
\r
366 0., -10., 20., 20., 15.)</p>
\r
368 <p class="whs5">subShapeList1 =
\r
369 geompy.SubShapeAll(box1, geompy.ShapeType["FACE"])</p>
\r
371 <p class="whs5"> </p>
\r
373 <p class="whs5">box2 = geompy.MakeBox(0.,
\r
374 5., 0., 20., 20., 15.)</p>
\r
376 <p class="whs5">subShapeList2 =
\r
377 geompy.SubShapeAll(box2, geompy.ShapeType["FACE"])</p>
\r
379 <p class="whs5">EdgesList = geompy.SubShapeAll(subShapeList2[
\r
380 1 ], geompy.ShapeType["EDGE"])</p>
\r
382 <p class="whs5"> </p>
\r
384 <p class="whs5">aComp = geompy.MakeCompound(
\r
385 [subShapeList1[ 2 ], subShapeList2[ 1 ]] )</p>
\r
387 <p class="whs5">idComp = geompy.addToStudy(
\r
388 aComp, "Two faces" )</p>
\r
390 <p class="whs5">aCompobj =
\r
391 salome.IDToObject( idComp )</p>
\r
393 <p class="whs4"> </p>
\r
395 <p class="whs4"># create a mesh on two
\r
398 <p class="whs5">mesh = smesh.Mesh(aCompobj,
\r
399 "Two faces : quadrangle mesh")</p>
\r
401 <p class="whs5">algo = mesh.Segment()</p>
\r
403 <p class="whs4"> </p>
\r
405 <p class="whs4"># define "NumberOfSegments"
\r
406 hypothesis to cut an edge in a fixed number of segments</p>
\r
408 <p class="whs5">algo.NumberOfSegments(9)</p>
\r
410 <p class="whs4"> </p>
\r
412 <p class="whs4"># create a quadrangle 2D
\r
413 algorithm for faces</p>
\r
415 <p class="whs5">mesh.Quadrangle()</p>
\r
417 <p class="whs4"> </p>
\r
419 <p class="whs4"># create a local hypothesis</p>
\r
421 <p class="whs5">algo = mesh.Segment(EdgesList[2])</p>
\r
423 <p class="whs4"> </p>
\r
425 <p class="whs4"># define "Arithmetic1D"
\r
426 hypothesis to cut an edge in several segments with increasing arithmetic
\r
429 <p class="whs5">algo.Arithmetic1D(1,
\r
432 <p class="whs4"> </p>
\r
434 <p class="whs4"># define "Propagation"
\r
435 hypothesis that propagate all other hypothesis on all edges on<span style="margin-top: 0pt; margin-bottom: 0pt;">
\r
436 the opposite side in case of quadrangular faces</span></p>
\r
438 <p class="whs5">algo.Propagation()</p>
\r
440 <p class="whs5">mesh.Compute()</p>
\r
442 <p class="whs4"> </p>
\r
444 <p class="whs4"># sew free borders</p>
\r
446 <p class="whs5">anEditor = mesh.GetMesh().GetMeshEditor()</p>
\r
448 <p class="whs5">anEditor.SewConformFreeBorders(5,
\r
451 <p class="whs4"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span>
\r
454 <p class="whs4"> </p>
\r
456 <h4><a name=bookmark6>Sew Free Borders</a></h4>
\r
458 <p class="whs5">import salome</p>
\r
460 <p class="whs5">import geompy</p>
\r
462 <p class="whs5">import smesh</p>
\r
464 <p class="whs4"> </p>
\r
466 <p class="whs4"># create two faces of the
\r
469 <p class="whs5">box1 = geompy.MakeBox(0.,
\r
470 0., 0., 20., 20., 15.)</p>
\r
472 <p class="whs5">subShapeList1 =
\r
473 geompy.SubShapeAll(box1, geompy.ShapeType["FACE"])</p>
\r
475 <p class="whs4"> </p>
\r
477 <p class="whs5">box2 = geompy.MakeBox(0.,
\r
478 5., 0., 20., 20., 15.)</p>
\r
480 <p class="whs5">subShapeList2 =
\r
481 geompy.SubShapeAll(box2, geompy.ShapeType["FACE"])</p>
\r
483 <p class="whs5">EdgesList = geompy.SubShapeAll(subShapeList2[
\r
484 1 ], geompy.ShapeType["EDGE"])</p>
\r
486 <p class="whs5"> </p>
\r
488 <p class="whs5">aComp = geompy.MakeCompound(
\r
489 [subShapeList1[ 2 ], subShapeList2[ 1 ]] )</p>
\r
491 <p class="whs5">idComp = geompy.addToStudy(
\r
492 aComp, "Two faces" )</p>
\r
494 <p class="whs5">aCompobj =
\r
495 salome.IDToObject( idComp )</p>
\r
497 <p class="whs5"> </p>
\r
499 <p class="whs4"># create a mesh on two
\r
502 <p class="whs5">mesh = smesh.Mesh(aCompobj,
\r
503 "Two faces : quadrangle mesh")</p>
\r
505 <p class="whs5">algo = mesh.Segment()</p>
\r
507 <p class="whs4"> </p>
\r
509 <p class="whs4"># define "NumberOfSegments"
\r
510 hypothesis to cut an edge in a fixed number of segments</p>
\r
512 <p class="whs5">algo.NumberOfSegments(4)</p>
\r
514 <p class="whs4"> </p>
\r
516 <p class="whs4"># creates a quadrangle
\r
517 2D algorithm for faces</p>
\r
519 <p class="whs5">mesh.Quadrangle()</p>
\r
521 <p class="whs4"> </p>
\r
523 <p class="whs4"># create a local hypothesis</p>
\r
525 <p class="whs5">algo = mesh.Segment(EdgesList[2])</p>
\r
527 <p class="whs4"> </p>
\r
529 <p class="whs4"># define "Arithmetic1D"
\r
530 hypothesis to cut an edge in several segments with increasing
\r
531 arithmetic length</p>
\r
533 <p class="whs5">algo.Arithmetic1D(1,
\r
536 <p class="whs4"> </p>
\r
538 <p class="whs4"># define "Propagation"
\r
539 hypothesis that propagate all other hypothesis on all edges on<span style="margin-top: 0pt; margin-bottom: 0pt;">
\r
540 the opposite side in case of quadrangular faces</span></p>
\r
542 <p class="whs5">algo.Propagation()</p>
\r
544 <p class="whs5">mesh.Compute()</p>
\r
546 <p class="whs4"> </p>
\r
548 <p class="whs4"># sew free borders</p>
\r
550 <p class="whs5">anEditor = mesh.GetMesh().GetMeshEditor()</p>
\r
552 <p class="whs5">anEditor.SewFreeBorders(6,
\r
553 21, 5, 1, 12, 3, 0, 0)</p>
\r
555 <p class="whs5"> </p>
\r
557 <p class="whs4"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span>
\r
560 <p class="whs4"> </p>
\r
562 <h4><a name=bookmark7>Sew Side Elements</a></h4>
\r
564 <p class="whs5">import salome</p>
\r
566 <p class="whs5">import geompy</p>
\r
568 <p class="whs5">import smesh</p>
\r
570 <p class="whs5"> </p>
\r
572 <p class="whs4"># create two faces of the
\r
575 <p class="whs5">box1 = geompy.MakeBox(0.,
\r
579 <p class="whs5">box2 = geompy.MakeBox(0.,
\r
580 15., 0., 20., 25., 10.)</p>
\r
582 <p class="whs5">EdgesList = geompy.SubShapeAll(box2,
\r
583 geompy.ShapeType["EDGE"])</p>
\r
585 <p class="whs4"> </p>
\r
587 <p class="whs5">aComp = geompy.MakeCompound(
\r
590 <p class="whs5">idComp = geompy.addToStudy(
\r
591 aComp, "Two faces" )</p>
\r
593 <p class="whs5">aCompobj =
\r
594 salome.IDToObject( idComp )</p>
\r
596 <p class="whs5"> </p>
\r
598 <p class="whs4"># create a mesh on two
\r
601 <p class="whs5">mesh = smesh.Mesh(aCompobj,
\r
602 "Two faces : quadrangle mesh")</p>
\r
604 <p class="whs5">algo = mesh.Segment()</p>
\r
606 <p class="whs4"> </p>
\r
608 <p class="whs4"># define "NumberOfSegments"
\r
609 hypothesis to cut an edge in a fixed number of segments</p>
\r
611 <p class="whs5">algo.NumberOfSegments(2)</p>
\r
613 <p class="whs4"> </p>
\r
615 <p class="whs4"># create a quadrangle 2D
\r
616 algorithm for faces</p>
\r
618 <p class="whs5">mesh.Quadrangle()</p>
\r
620 <p class="whs4"> </p>
\r
622 <p class="whs4"># create a local hypothesis</p>
\r
624 <p class="whs5">algo = mesh.Segment(EdgesList[8])</p>
\r
626 <p class="whs4"> </p>
\r
628 <p class="whs4"># define "Arithmetic1D"
\r
629 hypothesis to cut an edge in several segments with increasing arithmetic
\r
632 <p class="whs5">algo.NumberOfSegments(4)</p>
\r
634 <p class="whs4"> </p>
\r
636 <p class="whs4"># define "Propagation"
\r
637 hypothesis that propagates all other hypothesis on all edges on <span
\r
638 style="margin-top: 0pt; margin-bottom: 0pt;">the opposite side in case
\r
639 of quadrangular faces</span></p>
\r
641 <p class="whs5">algo.Propagation()</p>
\r
643 <p class="whs5">mesh.Compute()</p>
\r
645 <p class="whs4"> </p>
\r
647 <p class="whs4"># sew free borders</p>
\r
649 <p class="whs5">anEditor = mesh.GetMesh().GetMeshEditor()</p>
\r
651 <p class="whs5">anEditor.SewSideElements([69,
\r
652 70, 71, 72], [91, 92, 89, 90], 8, 38, 23, 58)</p>
\r
654 <p class="whs4"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span>
\r
657 <script type="text/javascript" language="javascript1.2">
\r
659 if (window.writeIntopicBar)
\r
660 writeIntopicBar(0);
\r