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; font-family:'Lucida Console' , monospace; }
\r
14 p.whs5 { margin-top:0pt; margin-bottom:0pt; font-family:'Times New Roman' , serif; }
\r
15 p.whs6 { margin-top:0pt; margin-bottom:0pt; }
\r
17 </style><script type="text/javascript" language="JavaScript">
\r
19 if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))
\r
21 var strNSS = "<style type='text/css'>";
\r
22 strNSS += "h3.whs1 {margin-top:1pt;margin-bottom:1pt; }";
\r
23 strNSS += "h4.whs2 {margin-top:1pt;margin-bottom:1pt; }";
\r
24 strNSS += "p.whs3 {margin-top:1pt;margin-bottom:1pt; }";
\r
25 strNSS += "p.whs4 {margin-top:1pt;margin-bottom:1pt; }";
\r
26 strNSS += "p.whs5 {margin-top:1pt;margin-bottom:1pt; }";
\r
27 strNSS += "p.whs6 {margin-top:1pt;margin-bottom:1pt; }";
\r
28 strNSS +="</style>";
\r
29 document.write(strNSS);
\r
33 <script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">
\r
36 if (innerWidth != origWidth || innerHeight != origHeight)
\r
39 if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {
\r
40 origWidth = innerWidth;
\r
41 origHeight = innerHeight;
\r
47 <style type="text/css">
\r
49 div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }
\r
50 p.WebHelpNavBar { text-align:right; }
\r
52 </style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>
\r
53 <script type="text/javascript" language="javascript" src="whver.js"></script>
\r
54 <script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>
\r
55 <script type="text/javascript" language="javascript1.2" src="whutils.js"></script>
\r
56 <script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>
\r
57 <script type="text/javascript" language="javascript1.2">
\r
59 if (window.gbWhTopic)
\r
61 if (window.setRelStartPage)
\r
63 addTocInfo("MESH module\nTUI Scripts\nTransforming Meshes");
\r
64 addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");
\r
65 addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");
\r
70 if (window.setRelStartPage)
\r
72 setRelStartPage("index.htm");
\r
82 document.location.reload();
\r
86 <body><script type="text/javascript" language="javascript1.2">
\r
88 if (window.writeIntopicBar)
\r
92 <h1>Transforming Meshes</h1>
\r
94 <h3 class="whs1">Transforming Meshes</h3>
\r
96 <h4 class="whs2"> </h4>
\r
98 <h4 class="whs2"><a name=bookmark>Translation</a></h4>
\r
100 <p class="whs3"> </p>
\r
102 <p class="whs4">import SMESH_mechanic</p>
\r
104 <p class="whs4"> </p>
\r
106 <p class="whs4"><span style="font-family: 'Lucida Console', monospace;">smesh
\r
107 = SMESH_mechanic.smesh </span></p>
\r
109 <p class="whs4">mesh = SMESH_mechanic.mesh
\r
112 <p class="whs4"> </p>
\r
114 <p class="whs5"># define translation
\r
117 <p class="whs4"><span style="font-family: 'Lucida Console', monospace;">point
\r
118 = smesh.PointStruct(-150., -150., 0.)</span></p>
\r
120 <p class="whs4">vector =smesh.DirStruct(point)
\r
123 <p class="whs4"> </p>
\r
125 <p class="whs5"># translate a mesh</p>
\r
127 <p class="whs4">doCopy = 1</p>
\r
129 <p class="whs4"> </p>
\r
131 <p class="whs4">mesh.Translate([],
\r
132 vector, doCopy) </p>
\r
134 <p class="whs6"> </p>
\r
136 <h4 class="whs2"><a name=bookmark1>Rotation</a></h4>
\r
138 <p class="whs3"> </p>
\r
140 <p class="whs3">import math</p>
\r
142 <p class="whs3">import SMESH_mechanic</p>
\r
144 <p class="whs3"> </p>
\r
146 <p class="whs3"><span style="font-family: 'Lucida Console', monospace;">smesh
\r
147 = SMESH_mechanic.smesh</span></p>
\r
149 <p class="whs3">mesh = SMESH_mechanic.mesh </p>
\r
151 <p class="whs3"> </p>
\r
153 <p class="whs5"># define rotation axis
\r
156 <p class="whs3">axisXYZ = smesh.AxisStruct(0., 0., 0.,
\r
159 <p class="whs3">angle270 = 1.5 * math.pi</p>
\r
161 <p class="whs3"> </p>
\r
163 <p class="whs5"># rotate a mesh</p>
\r
165 <p class="whs4">mesh.Rotate([],
\r
166 axisXYZ, angle270, 1) </p>
\r
168 <p class="whs6"> </p>
\r
170 <h4 class="whs2"><a name=bookmark2>Symmetry</a></h4>
\r
172 <p class="whs3"> </p>
\r
174 <p class="whs3">import math</p>
\r
176 <p class="whs3"> </p>
\r
178 <p class="whs3">import SMESH_mechanic</p>
\r
180 <p class="whs3"> </p>
\r
182 <p class="whs3"><span style="font-family: 'Lucida Console', monospace;">smesh
\r
183 = SMESH_mechanic.smesh</span></p>
\r
185 <p class="whs3">mesh = SMESH_mechanic.mesh </p>
\r
187 <p class="whs3"> </p>
\r
189 <p class="whs5"># create a symmetrical
\r
190 copy of the mesh mirrored through a point</p>
\r
192 <p class="whs3">axis = SMESH.AxisStruct(0, 0, 0, 0, 0,
\r
195 <p class="whs3"> </p>
\r
197 <p class="whs3">mesh.Mirror([], axis, smesh.POINT, 1)
\r
200 <p class="whs6"> </p>
\r
202 <h4 class="whs2"><a name=bookmark3>Merging
\r
205 <p class="whs3"> </p>
\r
207 <p class="whs4">import SMESH_mechanic</p>
\r
209 <p class="whs4">mesh = SMESH_mechanic.mesh</p>
\r
211 <p class="whs4"> </p>
\r
213 <p class="whs5"># merge nodes</p>
\r
215 <p class="whs4">Tolerance = 25.0</p>
\r
217 <p class="whs4"> </p>
\r
219 <p class="whs4">GroupsOfNodes =
\r
220 mesh.FindCoincidentNodes(Tolerance)</p>
\r
222 <p class="whs4">mesh.MergeNodes(GroupsOfNodes)
\r
225 <p class="whs6"> </p>
\r
227 <h4><a name=bookmark8>Merging Elements</a></h4>
\r
229 <p class="whs4">import salome</p>
\r
231 <p class="whs4">import geompy</p>
\r
233 <p class="whs4">import smesh</p>
\r
235 <p class="whs4"> </p>
\r
237 <p class="whs5"># create a face to
\r
240 <p class="whs4">px = geompy.MakeVertex(100.,
\r
244 <p class="whs4">py = geompy.MakeVertex(0.
\r
248 <p class="whs4">pz = geompy.MakeVertex(0.
\r
249 , 0. ,
\r
252 <p class="whs4"> </p>
\r
254 <p class="whs4">vxy = geompy.MakeVector(px,
\r
257 <p class="whs4">arc = geompy.MakeArc(py,
\r
260 <p class="whs4"> </p>
\r
262 <p class="whs4">wire = geompy.MakeWire([vxy,
\r
265 <p class="whs4">isPlanarFace = 1</p>
\r
267 <p class="whs4"> </p>
\r
269 <p class="whs4">face1 = geompy.MakeFace(wire,
\r
272 <p class="whs4">id_face1 = geompy.addToStudy(face1,
\r
273 "Face1")</p>
\r
275 <p class="whs4"> </p>
\r
277 <p class="whs5"># create a circle to
\r
278 be an extrusion path</p>
\r
280 <p class="whs4">px1 = geompy.MakeVertex(
\r
284 <p class="whs4">py1 = geompy.MakeVertex(-100.,
\r
285 -100., 0.)</p>
\r
287 <p class="whs4">pz1 = geompy.MakeVertex(
\r
289 0.,
\r
292 <p class="whs4"> </p>
\r
294 <p class="whs4">circle = geompy.MakeCircleThreePnt(py1,
\r
297 <p class="whs4">id_circle = geompy.addToStudy(circle,
\r
298 "Path")</p>
\r
300 <p class="whs4"> </p>
\r
302 <p class="whs5"># create a 2D mesh
\r
305 <p class="whs4">trias = smesh.Mesh(face1,
\r
306 "Face : 2D mesh")</p>
\r
308 <p class="whs4"> </p>
\r
310 <p class="whs4">algo1D = trias.Segment()</p>
\r
312 <p class="whs4">algo1D.NumberOfSegments(6)</p>
\r
314 <p class="whs4">algo2D = trias.Triangle()</p>
\r
316 <p class="whs4">algo2D.LengthFromEdges()</p>
\r
318 <p class="whs4"> </p>
\r
320 <p class="whs4">trias.Compute()</p>
\r
322 <p class="whs5"> </p>
\r
324 <p class="whs5"># create a path mesh</p>
\r
326 <p class="whs4">circlemesh = smesh.Mesh(circle,
\r
327 "Path mesh")</p>
\r
329 <p class="whs4">algo = circlemesh.Segment()</p>
\r
331 <p class="whs4">algo.NumberOfSegments(10)</p>
\r
333 <p class="whs4">circlemesh.Compute()</p>
\r
335 <p class="whs5"> </p>
\r
337 <p class="whs5"># extrusion of the
\r
340 <p class="whs4"><span style="font-family: 'Lucida Console', monospace;">trias.ExtrusionAlongPath([],
\r
341 circlemesh, circle,</span></p>
\r
343 <p class="whs4"> 1,
\r
344 0, [], 0, smesh.PointStruct(0, 0, 0))</p>
\r
346 <p class="whs4"> </p>
\r
348 <p class="whs5"># merge nodes</p>
\r
350 <p class="whs4">print "Number
\r
351 of nodes before MergeNodes:", </p>
\r
353 <p class="whs4">trias.NbNodes()</p>
\r
355 <p class="whs4">tolerance = 0.001</p>
\r
357 <p class="whs4">array_of_nodes_groups
\r
358 = trias.FindCoincidentNodes(tolerance)</p>
\r
360 <p class="whs4"> </p>
\r
362 <p class="whs4">trias.MergeNodes(array_of_nodes_groups)</p>
\r
364 <p class="whs4"> </p>
\r
366 <p class="whs4">print "Number
\r
367 of nodes after MergeNodes:", trias.NbNodes()</p>
\r
369 <p class="whs4">print ""</p>
\r
371 <p class="whs4">print "Number
\r
372 of elements before MergeEqualElements:"</p>
\r
374 <p class="whs4">print "Edges
\r
375 :
\r
376 ", trias.NbEdges()</p>
\r
378 <p class="whs4">print "Triangles
\r
380 trias.NbTriangles()</p>
\r
382 <p class="whs4">print "Quadrangles:
\r
383 ", trias.NbQuadrangles()</p>
\r
385 <p class="whs4">print "Volumes
\r
386 :
\r
387 ", trias.NbVolumes()</p>
\r
389 <p class="whs4"> </p>
\r
391 <p class="whs5"># merge elements</p>
\r
393 <p class="whs4">trias.MergeEqualElements()</p>
\r
395 <p class="whs4">print "Number
\r
396 of elements after MergeEqualElements:"</p>
\r
398 <p class="whs4">print "Edges
\r
399 :
\r
400 ", trias.NbEdges()</p>
\r
402 <p class="whs4">print "Triangles
\r
404 trias.NbTriangles()</p>
\r
406 <p class="whs4">print "Quadrangles:
\r
407 ", trias.NbQuadrangles()</p>
\r
409 <p class="whs4">print "Volumes
\r
410 :
\r
411 ", trias.NbVolumes()</p>
\r
413 <p class="whs4"> </p>
\r
415 <p class="whs4">salome.sg.updateObjBrowser(1)
\r
418 <p class="whs4"> </p>
\r
420 <h3>Sewing Meshes</h3>
\r
422 <h4><a name=bookmark4>Sew Meshes Border to Border</a></h4>
\r
424 <p class="whs4">import geompy</p>
\r
426 <p class="whs4">import smesh</p>
\r
428 <p class="whs4"> </p>
\r
430 <p class="whs5"># create two faces
\r
433 <p class="whs4">box1 = geompy.MakeBox(0.,
\r
434 0., -10., 30., 20., 25.)</p>
\r
436 <p class="whs4">facesList1 = geompy.SubShapeAll(box1,
\r
437 geompy.ShapeType["FACE"])</p>
\r
439 <p class="whs4">face1 = facesList1[2]</p>
\r
441 <p class="whs4"> </p>
\r
443 <p class="whs4">box2 = geompy.MakeBox(0.,
\r
444 5., 0., 20., 20., 15.)</p>
\r
446 <p class="whs4">facesList2 = geompy.SubShapeAll(box2,
\r
447 geompy.ShapeType["FACE"])</p>
\r
449 <p class="whs4">face2 = facesList2[1]</p>
\r
451 <p class="whs4"> </p>
\r
453 <p class="whs4">edgesList = geompy.SubShapeAll(face2,
\r
454 geompy.ShapeType["EDGE"])</p>
\r
456 <p class="whs4">edge1 = edgesList[2]</p>
\r
458 <p class="whs4"> </p>
\r
460 <p class="whs4">aComp = geompy.MakeCompound([face1,
\r
463 <p class="whs4">geompy.addToStudy(aComp,
\r
464 "Two faces")</p>
\r
466 <p class="whs4"> </p>
\r
468 <p class="whs5"># create a mesh on
\r
471 <p class="whs4">mesh = smesh.Mesh(aComp,
\r
472 "Two faces : quadrangle mesh")</p>
\r
474 <p class="whs4"> </p>
\r
476 <p class="whs4">algo1D = mesh.Segment()</p>
\r
478 <p class="whs4">algo1D.NumberOfSegments(9)</p>
\r
480 <p class="whs4">algo2D = mesh.Quadrangle()</p>
\r
482 <p class="whs4"> </p>
\r
484 <p class="whs4">algo_local = mesh.Segment(edge1)</p>
\r
486 <p class="whs4">algo_local.Arithmetic1D(1,
\r
489 <p class="whs4">algo_local.Propagation()</p>
\r
491 <p class="whs4"> </p>
\r
493 <p class="whs4">mesh.Compute()</p>
\r
495 <p class="whs4"> </p>
\r
497 <p class="whs5"># sew border to side</p>
\r
499 <p class="whs5"># FirstNodeIDOnFreeBorder,
\r
500 SecondNodeIDOnFreeBorder, LastNodeIDOnFreeBorder,</p>
\r
502 <p class="whs5"># FirstNodeIDOnSide,
\r
503 LastNodeIDOnSide,</p>
\r
505 <p class="whs5"># CreatePolygons, CreatePolyedrs</p>
\r
507 <p class="whs4">mesh.SewBorderToSide(5,
\r
508 45, 6, 113, 109, 0, 0) </p>
\r
510 <h4><a name=bookmark5>Sew Conform Free Borders</a></h4>
\r
512 <p class="whs4">import geompy</p>
\r
514 <p class="whs4">import smesh</p>
\r
516 <p class="whs4"> </p>
\r
518 <p class="whs5"># create two faces
\r
521 <p class="whs4">box1 = geompy.MakeBox(0.,
\r
522 0., -10., 20., 20., 15.)</p>
\r
524 <p class="whs4">facesList1 = geompy.SubShapeAll(box1,
\r
525 geompy.ShapeType["FACE"])</p>
\r
527 <p class="whs4">face1 = facesList1[2]</p>
\r
529 <p class="whs4"> </p>
\r
531 <p class="whs4">box2 = geompy.MakeBox(0.,
\r
532 5., 0., 20., 20., 15.)</p>
\r
534 <p class="whs4">facesList2 = geompy.SubShapeAll(box2,
\r
535 geompy.ShapeType["FACE"])</p>
\r
537 <p class="whs4">face2 = facesList2[1]</p>
\r
539 <p class="whs4"> </p>
\r
541 <p class="whs4">edgesList = geompy.SubShapeAll(face2,
\r
542 geompy.ShapeType["EDGE"])</p>
\r
544 <p class="whs4">edge1 = edgesList[2]</p>
\r
546 <p class="whs4"> </p>
\r
548 <p class="whs4">aComp = geompy.MakeCompound([face1,
\r
551 <p class="whs4">geompy.addToStudy(aComp,
\r
552 "Two faces")</p>
\r
554 <p class="whs4"> </p>
\r
556 <p class="whs5"># create a mesh on
\r
559 <p class="whs4">mesh = smesh.Mesh(aComp,
\r
560 "Two faces : quadrangle mesh")</p>
\r
562 <p class="whs4"> </p>
\r
564 <p class="whs4">algo1D = mesh.Segment()</p>
\r
566 <p class="whs4">algo1D.NumberOfSegments(9)</p>
\r
568 <p class="whs4">algo2D = mesh.Quadrangle()</p>
\r
570 <p class="whs4"> </p>
\r
572 <p class="whs4">algo_local = mesh.Segment(edge1)</p>
\r
574 <p class="whs4">algo_local.Arithmetic1D(1,
\r
577 <p class="whs4">algo_local.Propagation()</p>
\r
579 <p class="whs4"> </p>
\r
581 <p class="whs4">mesh.Compute()</p>
\r
583 <p class="whs4"> </p>
\r
585 <p class="whs5"># sew conform free
\r
588 <p class="whs5"># FirstNodeID1, SecondNodeID1,
\r
589 LastNodeID1, FirstNodeID2, SecondNodeID2</p>
\r
591 <p class="whs4">mesh.SewConformFreeBorders(5,
\r
592 45, 6, 3, 24) </p>
\r
594 <h4><a name=bookmark6>Sew Free Borders</a></h4>
\r
596 <p class="whs4">import geompy</p>
\r
598 <p class="whs4">import smesh</p>
\r
600 <p class="whs4"> </p>
\r
602 <p class="whs5"># create two faces
\r
605 <p class="whs4">box1 = geompy.MakeBox(0.,
\r
606 0., 0., 20., 20., 15.)</p>
\r
608 <p class="whs4">facesList1 = geompy.SubShapeAll(box1,
\r
609 geompy.ShapeType["FACE"])</p>
\r
611 <p class="whs4">face1 = facesList1[2]</p>
\r
613 <p class="whs4"> </p>
\r
615 <p class="whs4">box2 = geompy.MakeBox(0.,
\r
616 5., 0., 20., 20., 15.)</p>
\r
618 <p class="whs4">facesList2 = geompy.SubShapeAll(box2,
\r
619 geompy.ShapeType["FACE"])</p>
\r
621 <p class="whs4">face2 = facesList2[1]</p>
\r
623 <p class="whs4"> </p>
\r
625 <p class="whs4">edgesList = geompy.SubShapeAll(face2,
\r
626 geompy.ShapeType["EDGE"])</p>
\r
628 <p class="whs4">edge1 = edgesList[2]</p>
\r
630 <p class="whs4"> </p>
\r
632 <p class="whs4">aComp = geompy.MakeCompound([face1,
\r
635 <p class="whs4">geompy.addToStudy(aComp,
\r
636 "Two faces")</p>
\r
638 <p class="whs4"> </p>
\r
640 <p class="whs5"># create a mesh on
\r
643 <p class="whs4">mesh = smesh.Mesh(aComp,
\r
644 "Two faces : quadrangle mesh")</p>
\r
646 <p class="whs4"> </p>
\r
648 <p class="whs4">algo1D = mesh.Segment()</p>
\r
650 <p class="whs4">algo1D.NumberOfSegments(4)</p>
\r
652 <p class="whs4">algo2D = mesh.Quadrangle()</p>
\r
654 <p class="whs4"> </p>
\r
656 <p class="whs4">algo_local = mesh.Segment(edge1)</p>
\r
658 <p class="whs4">algo_local.Arithmetic1D(1,
\r
661 <p class="whs4">algo_local.Propagation()</p>
\r
663 <p class="whs4"> </p>
\r
665 <p class="whs4">mesh.Compute()</p>
\r
667 <p class="whs4"> </p>
\r
669 <p class="whs5"># sew free borders</p>
\r
671 <p class="whs5"># FirstNodeID1, SecondNodeID1,
\r
674 <p class="whs5"># FirstNodeID2, SecondNodeID2,
\r
675 LastNodeID2, CreatePolygons, CreatePolyedrs</p>
\r
677 <p class="whs6">mesh.SewFreeBorders(6,
\r
678 21, 5, 1, 12, 3, 0, 0) </p>
\r
680 <h4><a name=bookmark7>Sew Side Elements</a></h4>
\r
682 <p class="whs4">import geompy</p>
\r
684 <p class="whs4">import smesh</p>
\r
686 <p class="whs4"> </p>
\r
688 <p class="whs5"># create two boxes</p>
\r
690 <p class="whs4">box1 = geompy.MakeBox(0.,
\r
694 <p class="whs4">box2 = geompy.MakeBox(0.,
\r
695 15., 0., 20., 25., 10.)</p>
\r
697 <p class="whs4"> </p>
\r
699 <p class="whs4">EdgesList = geompy.SubShapeAll(box2,
\r
700 geompy.ShapeType["EDGE"])</p>
\r
702 <p class="whs4"> </p>
\r
704 <p class="whs4">aComp = geompy.MakeCompound([box1,
\r
707 <p class="whs4">geompy.addToStudy(aComp,
\r
708 "Two boxes")</p>
\r
710 <p class="whs4"> </p>
\r
712 <p class="whs5"># create a mesh on
\r
715 <p class="whs4">mesh = smesh.Mesh(aComp,
\r
716 "Two faces : quadrangle mesh")</p>
\r
718 <p class="whs4"> </p>
\r
720 <p class="whs4">algo1D = mesh.Segment()</p>
\r
722 <p class="whs4">algo1D.NumberOfSegments(2)</p>
\r
724 <p class="whs4">algo2D = mesh.Quadrangle()</p>
\r
726 <p class="whs4"> </p>
\r
728 <p class="whs4">algo_local = mesh.Segment(EdgesList[8])</p>
\r
730 <p class="whs4">algo_local.NumberOfSegments(4)</p>
\r
732 <p class="whs4">algo_local.Propagation()</p>
\r
734 <p class="whs4"> </p>
\r
736 <p class="whs4">mesh.Compute()</p>
\r
738 <p class="whs4"> </p>
\r
740 <p class="whs5"># sew side elements</p>
\r
742 <p class="whs5"># IDsOfSide1Elements,
\r
743 IDsOfSide2Elements,</p>
\r
745 <p class="whs5"># NodeID1OfSide1ToMerge,
\r
746 NodeID1OfSide2ToMerge, NodeID2OfSide1ToMerge, NodeID2OfSide2ToMerge</p>
\r
748 <p class="whs4">mesh.SewSideElements([69,
\r
749 70, 71, 72], [91, 92, 89, 90], 8, 38, 23, 58) </p>
\r
751 <script type="text/javascript" language="javascript1.2">
\r
753 if (window.writeIntopicBar)
\r
754 writeIntopicBar(0);
\r