1 <!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">
\r
6 <title>Quality Controls</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 p.whs1 { margin-top:0pt; margin-bottom:0pt; font-weight:bold; color:#ff0000; }
\r
11 p.whs2 { margin-top:0pt; margin-bottom:0pt; }
\r
12 p.whs3 { margin-top:0pt; margin-bottom:0pt; font-family:'Lucida Console' , monospace; }
\r
13 p.whs4 { margin-top:0pt; margin-bottom:0pt; font-family:'Times New Roman' , serif; }
\r
15 </style><script type="text/javascript" language="JavaScript">
\r
17 if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))
\r
19 var strNSS = "<style type='text/css'>";
\r
20 strNSS += "p.whs1 {margin-top:1pt;margin-bottom:1pt; }";
\r
21 strNSS += "p.whs2 {margin-top:1pt;margin-bottom:1pt; }";
\r
22 strNSS += "p.whs3 {margin-top:1pt;margin-bottom:1pt; }";
\r
23 strNSS += "p.whs4 {margin-top:1pt;margin-bottom:1pt; }";
\r
24 strNSS +="</style>";
\r
25 document.write(strNSS);
\r
29 <script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">
\r
32 if (innerWidth != origWidth || innerHeight != origHeight)
\r
35 if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {
\r
36 origWidth = innerWidth;
\r
37 origHeight = innerHeight;
\r
43 <style type="text/css">
\r
45 div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }
\r
46 p.WebHelpNavBar { text-align:right; }
\r
48 </style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>
\r
49 <script type="text/javascript" language="javascript" src="whver.js"></script>
\r
50 <script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>
\r
51 <script type="text/javascript" language="javascript1.2" src="whutils.js"></script>
\r
52 <script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>
\r
53 <script type="text/javascript" language="javascript1.2">
\r
55 if (window.gbWhTopic)
\r
57 if (window.setRelStartPage)
\r
59 addTocInfo("MESH module\nTUI Scripts\nQuality Controls");
\r
60 addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");
\r
61 addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");
\r
66 if (window.setRelStartPage)
\r
68 setRelStartPage("index.htm");
\r
78 document.location.reload();
\r
82 <body><script type="text/javascript" language="javascript1.2">
\r
84 if (window.writeIntopicBar)
\r
88 <h1>Quality Controls</h1>
\r
90 <h3><a name=bookmark>Free Borders</a></h3>
\r
92 <p class="whs1"># Attention! This script has been written
\r
93 using the old approach basing on direct usage of SMESH idl interface.</p>
\r
95 <p class="whs1"># For the moment smesh package doesn't provide
\r
96 methods to check free borders. </p>
\r
98 <p class="whs1"># In the next SALOME version the scripts will
\r
99 be updated to use only the commands from smesh package.</p>
\r
101 <p class="whs2"> </p>
\r
103 <p class="whs3">import salome</p>
\r
105 <p class="whs3">import geompy</p>
\r
107 <p class="whs3"> </p>
\r
109 <p class="whs3">import smesh</p>
\r
111 <p class="whs3">import SMESH</p>
\r
113 <p class="whs2"> </p>
\r
115 <p class="whs2"># create open shell: a
\r
116 box without one plane</p>
\r
118 <p class="whs3">box = geompy.MakeBox(0.,
\r
119 0., 0., 20., 20., 15.)</p>
\r
121 <p class="whs3">FaceList = geompy.SubShapeAll(box,
\r
122 geompy.ShapeType["FACE"])</p>
\r
124 <p class="whs3">FaceList.remove(FaceList[5])</p>
\r
126 <p class="whs3">box = geompy.MakeShell(FaceList)</p>
\r
128 <p class="whs3">idbox = geompy.addToStudy(box,
\r
129 "box")</p>
\r
131 <p class="whs2"> </p>
\r
133 <p class="whs2"># create a mesh</p>
\r
135 <p class="whs3">tria = smesh.Mesh(box,
\r
136 "Mesh_free_borders")</p>
\r
138 <p class="whs3">algo = tria.Segment()</p>
\r
140 <p class="whs3">algo.NumberOfSegments(5)</p>
\r
142 <p class="whs3">algo = tria.Triangle()</p>
\r
144 <p class="whs3">algo.MaxElementArea(20.)</p>
\r
146 <p class="whs3">tria.Compute()</p>
\r
148 <p class="whs3"> </p>
\r
150 <p class="whs3">mesh = tria.GetMesh()</p>
\r
152 <p class="whs3">gen = smesh.smesh</p>
\r
154 <p class="whs2"> </p>
\r
156 <p class="whs2"># criterion : free borders</p>
\r
158 <p class="whs3">aFilterMgr = gen.CreateFilterManager()</p>
\r
160 <p class="whs3">aPredicate = aFilterMgr.CreateFreeBorders()</p>
\r
162 <p class="whs3">aFilter = aFilterMgr.CreateFilter()</p>
\r
164 <p class="whs3">aFilter.SetPredicate(aPredicate)</p>
\r
166 <p class="whs3">anIds = aFilter.GetElementsId(mesh)</p>
\r
168 <p class="whs2"> </p>
\r
170 <p class="whs2"># print the result</p>
\r
172 <p class="whs3">print "Criterion:
\r
173 Free borders Nb = ", len(anIds)</p>
\r
175 <p class="whs3">j = 1</p>
\r
177 <p class="whs3">for i in range(len(anIds)):</p>
\r
179 <p class="whs3"> if
\r
180 j > 20: j = 1; print ""</p>
\r
182 <p class="whs3"> print
\r
185 <p class="whs3"> j
\r
188 <p class="whs3"> pass</p>
\r
190 <p class="whs3">print ""</p>
\r
192 <p class="whs2"> </p>
\r
194 <p class="whs2"># create a group</p>
\r
196 <p class="whs3">aGroup = mesh.CreateGroup(SMESH.EDGE,
\r
197 "Free borders")</p>
\r
199 <p class="whs3">aGroup.Add(anIds)</p>
\r
201 <p class="whs3"> </p>
\r
203 <p class="whs2"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span>
\r
206 <h3><a name=bookmark1>Borders at Multiconnection</a></h3>
\r
208 <p class="whs1"><span style="font-weight: bold; color: #ff0000;"><font color=red ><B>#
\r
209 Attention! This script has been written using the old approach basing
\r
210 on direct usage of SMESH idl interface.</B></font></span></p>
\r
212 <p class="whs1"># For the moment smesh package doesn't provide
\r
213 methods to check borders at multiconnection. </p>
\r
215 <p class="whs1"># In the next SALOME version the scripts will
\r
216 be updated to use only the commands from smesh package.</p>
\r
218 <p class="whs3"> </p>
\r
220 <p class="whs3">import salome</p>
\r
222 <p class="whs3">import geompy</p>
\r
224 <p class="whs3"> </p>
\r
226 <p class="whs3">import smesh</p>
\r
228 <p class="whs3">import SMESH</p>
\r
230 <p class="whs3"> </p>
\r
232 <p class="whs4"># create open shell:
\r
233 a box without one plane</p>
\r
235 <p class="whs3">box = geompy.MakeBox(0.,
\r
236 0., 0., 20., 20., 15.)</p>
\r
238 <p class="whs3">FaceList = geompy.SubShapeAll(box,
\r
239 geompy.ShapeType["FACE"])</p>
\r
241 <p class="whs3">FaceList.remove(FaceList[5])</p>
\r
243 <p class="whs3">box = geompy.MakeShell(FaceList)</p>
\r
245 <p class="whs3">idbox = geompy.addToStudy(box,
\r
246 "box")</p>
\r
248 <p class="whs3"> </p>
\r
250 <p class="whs4"># create a mesh</p>
\r
252 <p class="whs3">tria = smesh.Mesh(box,
\r
253 "Mesh_borders_at_multi-connections")</p>
\r
255 <p class="whs3">algo = tria.Segment()</p>
\r
257 <p class="whs3">algo.NumberOfSegments(5)</p>
\r
259 <p class="whs3">algo = tria.Triangle()</p>
\r
261 <p class="whs3">algo.MaxElementArea(20.)</p>
\r
263 <p class="whs3">tria.Compute()</p>
\r
265 <p class="whs3">mesh = tria.GetMesh()</p>
\r
267 <p class="whs3">gen = smesh.smesh</p>
\r
269 <p class="whs3"> </p>
\r
271 <p class="whs4"># Criterion : Borders
\r
272 at multi-connection</p>
\r
274 <p class="whs3">nb_conn = 2</p>
\r
276 <p class="whs3"> </p>
\r
278 <p class="whs3">aFilterMgr = gen.CreateFilterManager()</p>
\r
280 <p class="whs3">aFunctor = aFilterMgr.CreateMultiConnection()</p>
\r
282 <p class="whs3"> </p>
\r
284 <p class="whs3">aPredicate = aFilterMgr.CreateEqualTo()</p>
\r
286 <p class="whs3">aPredicate.SetNumFunctor(aFunctor)</p>
\r
288 <p class="whs3">aPredicate.SetMargin(nb_conn)</p>
\r
290 <p class="whs3"> </p>
\r
292 <p class="whs3">aFilter = aFilterMgr.CreateFilter()</p>
\r
294 <p class="whs3">aFilter.SetPredicate(aPredicate)</p>
\r
296 <p class="whs3"> </p>
\r
298 <p class="whs3">anIds = aFilter.GetElementsId(mesh)</p>
\r
300 <p class="whs3"> </p>
\r
302 <p class="whs4"># print the result</p>
\r
304 <p class="whs3">print "Criterion:
\r
305 Borders at multi-connections Nb = ", len(anIds)</p>
\r
307 <p class="whs3">j = 1</p>
\r
309 <p class="whs3">for i in range(len(anIds)):</p>
\r
311 <p class="whs3"> if
\r
312 j > 20: j = 1; print ""</p>
\r
314 <p class="whs3"> print
\r
317 <p class="whs3"> j
\r
320 <p class="whs3"> pass</p>
\r
322 <p class="whs3">print ""</p>
\r
324 <p class="whs3"> </p>
\r
326 <p class="whs4"># create a group</p>
\r
328 <p class="whs3">aGroup = mesh.CreateGroup(SMESH.EDGE,
\r
329 "Borders at multi-connections")</p>
\r
331 <p class="whs3">aGroup.Add(anIds)</p>
\r
333 <p class="whs3">salome.sg.updateObjBrowser(1)
\r
336 <h3><a name=bookmark2>Length 1D</a></h3>
\r
338 <p class="whs1"><span style="font-weight: bold; color: #ff0000;"><font color=red ><B>#
\r
339 Attention! This script has been written using the old approach basing
\r
340 on direct usage of SMESH idl interface.</B></font></span></p>
\r
342 <p class="whs1"># For the moment smesh package doesn't provide
\r
343 methods to check length 1D. </p>
\r
345 <p class="whs1"># In the next SALOME version the scripts will
\r
346 be updated to use only the commands from smesh package.</p>
\r
348 <p class="whs2"> </p>
\r
350 <p class="whs3">import salome</p>
\r
352 <p class="whs3">import geompy</p>
\r
354 <p class="whs3"> </p>
\r
356 <p class="whs3">import smesh</p>
\r
358 <p class="whs3">import SMESH</p>
\r
360 <p class="whs2"> </p>
\r
362 <p class="whs2"># create open shell: a
\r
363 box without one plane</p>
\r
365 <p class="whs3">box = geompy.MakeBox(0.,
\r
366 0., 0., 20., 20., 15.)</p>
\r
368 <p class="whs3">FaceList = geompy.SubShapeAll(box,
\r
369 geompy.ShapeType["FACE"])</p>
\r
371 <p class="whs3">FaceList.remove(FaceList[5])</p>
\r
373 <p class="whs3">box = geompy.MakeShell(FaceList)</p>
\r
375 <p class="whs3">idbox = geompy.addToStudy(box,
\r
376 "box")</p>
\r
378 <p class="whs2"> </p>
\r
380 <p class="whs2"># create a mesh</p>
\r
382 <p class="whs3">tria = smesh.Mesh(box,
\r
383 "Mesh_Length_1D")</p>
\r
385 <p class="whs3">algo = tria.Segment()</p>
\r
387 <p class="whs3">algo.NumberOfSegments(5)</p>
\r
389 <p class="whs3">algo = tria.Triangle()</p>
\r
391 <p class="whs3">algo.MaxElementArea(20.)</p>
\r
393 <p class="whs3">tria.Compute()</p>
\r
395 <p class="whs3">mesh = tria.GetMesh()</p>
\r
397 <p class="whs3">gen = smesh.smesh</p>
\r
399 <p class="whs2"> </p>
\r
401 <p class="whs2"># Criterion : Length >
\r
404 <p class="whs3">length_margin =
\r
407 <p class="whs3"> </p>
\r
409 <p class="whs3">aFilterMgr = gen.CreateFilterManager()</p>
\r
411 <p class="whs3">aFunctor = aFilterMgr.CreateLength()</p>
\r
413 <p class="whs3"> </p>
\r
415 <p class="whs3">aPredicate = aFilterMgr.CreateMoreThan()</p>
\r
417 <p class="whs3">aPredicate.SetNumFunctor(aFunctor)</p>
\r
419 <p class="whs3">aPredicate.SetMargin(length_margin)</p>
\r
421 <p class="whs3"> </p>
\r
423 <p class="whs3">aFilter = aFilterMgr.CreateFilter()</p>
\r
425 <p class="whs3">aFilter.SetPredicate(aPredicate)</p>
\r
427 <p class="whs3"> </p>
\r
429 <p class="whs3">anIds = aFilter.GetElementsId(mesh)</p>
\r
431 <p class="whs2"> </p>
\r
433 <p class="whs2"># print the result</p>
\r
435 <p class="whs3">print "Criterion:
\r
436 Edges length > ", length_margin, " Nb = ", len(anIds)</p>
\r
438 <p class="whs3">j = 1</p>
\r
440 <p class="whs3">for i in range(len(anIds)):</p>
\r
442 <p class="whs3"> if
\r
443 j > 20: j = 1; print ""</p>
\r
445 <p class="whs3"> print
\r
448 <p class="whs3"> j
\r
451 <p class="whs3"> pass</p>
\r
453 <p class="whs3">print ""</p>
\r
455 <p class="whs2"> </p>
\r
457 <p class="whs2"># create a group</p>
\r
459 <p class="whs3">aGroup = mesh.CreateGroup(SMESH.EDGE,
\r
460 "Edges with length > " + `length_margin`)</p>
\r
462 <p class="whs3">aGroup.Add(anIds)</p>
\r
464 <p class="whs3"> </p>
\r
466 <p class="whs2"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span>
\r
469 <h3><a name=bookmark3>Free Edges</a></h3>
\r
471 <p class="whs1"><span style="font-weight: bold; color: #ff0000;"><font color=red ><B>#
\r
472 Attention! This script has been written using the old approach basing
\r
473 on direct usage of SMESH idl interface.</B></font></span></p>
\r
475 <p class="whs1"># For the moment smesh package doesn't provide
\r
476 methods to check free edges. </p>
\r
478 <p class="whs1"># In the next SALOME version the scripts will
\r
479 be updated to use only the commands from smesh package.</p>
\r
481 <p class="whs3"> </p>
\r
483 <p class="whs3">import SMESH</p>
\r
485 <p class="whs3">import SMESH_mechanic</p>
\r
487 <p class="whs3"> </p>
\r
489 <p class="whs3">smesh =
\r
490 SMESH_mechanic.smesh</p>
\r
492 <p class="whs3">mesh =
\r
493 SMESH_mechanic.mesh</p>
\r
495 <p class="whs3">salome = SMESH_mechanic.salome</p>
\r
497 <p class="whs3"> </p>
\r
499 <p class="whs3">aFilterMgr = smesh.CreateFilterManager()</p>
\r
501 <p class="whs3"> </p>
\r
503 <p class="whs4"># Remove some elements
\r
504 to obtain free edges</p>
\r
506 <p class="whs4"># Criterion : AREA
\r
509 <p class="whs3">area_margin = 95.</p>
\r
511 <p class="whs3"> </p>
\r
513 <p class="whs3">aFunctor = aFilterMgr.CreateArea()</p>
\r
515 <p class="whs3">aPredicate = aFilterMgr.CreateMoreThan()</p>
\r
517 <p class="whs3">aPredicate.SetNumFunctor(aFunctor)</p>
\r
519 <p class="whs3">aPredicate.SetMargin(area_margin)</p>
\r
521 <p class="whs3"> </p>
\r
523 <p class="whs3">aFilter = aFilterMgr.CreateFilter()</p>
\r
525 <p class="whs3">aFilter.SetPredicate(aPredicate)</p>
\r
527 <p class="whs3"> </p>
\r
529 <p class="whs3">anIds = aFilter.GetElementsId(mesh)</p>
\r
531 <p class="whs3">anEditor = mesh.GetMeshEditor()</p>
\r
533 <p class="whs3">anEditor.RemoveElements(anIds)</p>
\r
535 <p class="whs3"> </p>
\r
537 <p class="whs4"># Criterion : Free
\r
540 <p class="whs3">aPredicate = aFilterMgr.CreateFreeEdges()</p>
\r
542 <p class="whs3">aPredicate.SetMesh(mesh)</p>
\r
544 <p class="whs3">aBorders = aPredicate.GetBorders()</p>
\r
546 <p class="whs3"> </p>
\r
548 <p class="whs4"># create groups</p>
\r
550 <p class="whs3">aGroupF = mesh.CreateGroup(SMESH.FACE,
\r
551 "Faces with free edges")</p>
\r
553 <p class="whs3">aGroupN = mesh.CreateGroup(SMESH.NODE,
\r
554 "Nodes on free edges")</p>
\r
556 <p class="whs3"> </p>
\r
558 <p class="whs4"># fill groups with
\r
559 elements, corresponding to the criterion</p>
\r
561 <p class="whs3">print ""</p>
\r
563 <p class="whs3">print "Criterion:
\r
564 Free edges Nb = ", len(aBorders)</p>
\r
566 <p class="whs3">for i in range(len(aBorders)):</p>
\r
568 <p class="whs3"> aBorder
\r
571 <p class="whs3"> print
\r
572 "Face # ", aBorder.myElemId, " : Edge between nodes (",</p>
\r
574 <p class="whs3"> print
\r
575 aBorder.myPnt1, ", ", aBorder.myPnt2, ")"</p>
\r
577 <p class="whs3"> </p>
\r
579 <p class="whs3"> <span
\r
580 style="margin-top: 0pt;
\r
581 margin-bottom: 0pt;
\r
582 font-family: 'Lucida Console', monospace;">aGroupF.Add([aBorder.myElemId])</span></p>
\r
584 <p class="whs3"> aGroupN.Add([aBorder.myPnt1,
\r
585 aBorder.myPnt2])</p>
\r
587 <p class="whs3"> </p>
\r
589 <p class="whs3">salome.sg.updateObjBrowser(1)
\r
592 <p class="whs3"> </p>
\r
594 <h3><a name=bookmark4>Length 2D</a></h3>
\r
596 <p class="whs1"><span><font color=red ><B><span style="font-weight: bold; color: #ff0000;"><font color=red ><B>#
\r
597 Attention! This script has been written using the old approach basing
\r
598 on direct usage of SMESH idl interface.</B></font></span></B></font></span></p>
\r
600 <p class="whs1"># For the moment smesh package doesn't provide
\r
601 methods to check length 2D. </p>
\r
603 <p class="whs1"># In the next SALOME version the scripts will
\r
604 be updated to use only the commands from smesh package.</p>
\r
606 <p class="whs3"> </p>
\r
608 <p class="whs3">import salome</p>
\r
610 <p class="whs3">import geompy</p>
\r
612 <p class="whs3"> </p>
\r
614 <p class="whs3">import smesh</p>
\r
616 <p class="whs3">import SMESH</p>
\r
618 <p class="whs3"> </p>
\r
620 <p class="whs4"># create open shell:
\r
621 a box without one plane</p>
\r
623 <p class="whs3">box = geompy.MakeBox(0.,
\r
624 0., 0., 20., 20., 15.)</p>
\r
626 <p class="whs3">FaceList = geompy.SubShapeAll(box,
\r
627 geompy.ShapeType["FACE"])</p>
\r
629 <p class="whs3">FaceList.remove(FaceList[5])</p>
\r
631 <p class="whs3">box = geompy.MakeShell(FaceList)</p>
\r
633 <p class="whs3">idbox = geompy.addToStudy(box,
\r
634 "box")</p>
\r
636 <p class="whs3"> </p>
\r
638 <p class="whs4"># create a mesh</p>
\r
640 <p class="whs3">tria = smesh.Mesh(box,
\r
641 "Mesh_Length_2D")</p>
\r
643 <p class="whs3">algo = tria.Segment()</p>
\r
645 <p class="whs3">algo.NumberOfSegments(5)</p>
\r
647 <p class="whs3">algo = tria.Triangle()</p>
\r
649 <p class="whs3">algo.MaxElementArea(20.)</p>
\r
651 <p class="whs3">tria.Compute()</p>
\r
653 <p class="whs3"> </p>
\r
655 <p class="whs3">mesh = tria.GetMesh()</p>
\r
657 <p class="whs3">gen = smesh.smesh</p>
\r
659 <p class="whs3"> </p>
\r
661 <p class="whs4"># Criterion : Length
\r
664 <p class="whs3">length_margin =
\r
667 <p class="whs3"> </p>
\r
669 <p class="whs3">aFilterMgr = gen.CreateFilterManager()</p>
\r
671 <p class="whs3">aFunctor = aFilterMgr.CreateLength2D()</p>
\r
673 <p class="whs3"> </p>
\r
675 <p class="whs3">aPredicate = aFilterMgr.CreateMoreThan()</p>
\r
677 <p class="whs3">aPredicate.SetNumFunctor(aFunctor)</p>
\r
679 <p class="whs3">aPredicate.SetMargin(length_margin)</p>
\r
681 <p class="whs3"> </p>
\r
683 <p class="whs3">aFilter = aFilterMgr.CreateFilter()</p>
\r
685 <p class="whs3">aFilter.SetPredicate(aPredicate)</p>
\r
687 <p class="whs3"> </p>
\r
689 <p class="whs3">anIds = aFilter.GetElementsId(mesh)</p>
\r
691 <p class="whs3"> </p>
\r
693 <p class="whs4"># print the result</p>
\r
695 <p class="whs3">print "Criterion:
\r
696 Edges length 2D > ", length_margin, " Nb = ", len(anIds)</p>
\r
698 <p class="whs3">j = 1</p>
\r
700 <p class="whs3">for i in range(len(anIds)):</p>
\r
702 <p class="whs3"> if
\r
703 j > 20: j = 1; print ""</p>
\r
705 <p class="whs3"> print
\r
708 <p class="whs3"> j
\r
711 <p class="whs3"> pass</p>
\r
713 <p class="whs3">print ""</p>
\r
715 <p class="whs3"> </p>
\r
717 <p class="whs4"># create a group</p>
\r
719 <p class="whs3">aGroup = mesh.CreateGroup(SMESH.FACE,
\r
720 "Faces with length 2D > " + `length_margin`)</p>
\r
722 <p class="whs3">aGroup.Add(anIds)</p>
\r
724 <p class="whs3"> </p>
\r
726 <p class="whs3">salome.sg.updateObjBrowser(1)
\r
729 <p class="whs2"> </p>
\r
731 <h3><a name=bookmark5>Borders at Multiconnection 2D</a></h3>
\r
733 <p class="whs1"><span style="font-weight: bold; color: #ff0000;"><font color=red ><B><span
\r
734 style="font-weight: bold; color: #ff0000;"><font color=red ><B># Attention! This script has
\r
735 been written using the old approach basing on direct usage of SMESH idl
\r
736 interface.</B></font></span></B></font></span></p>
\r
738 <p class="whs1"># For the moment smesh package doesn't provide
\r
739 methods to check borders at multiconnection 2D. </p>
\r
741 <p class="whs1"># In the next SALOME version the scripts will
\r
742 be updated to use only the commands from smesh package.</p>
\r
744 <p class="whs3"> </p>
\r
746 <p class="whs3">import salome</p>
\r
748 <p class="whs3">import geompy</p>
\r
750 <p class="whs3"> </p>
\r
752 <p class="whs3">import smesh</p>
\r
754 <p class="whs3">import SMESH</p>
\r
756 <p class="whs3"> </p>
\r
758 <p class="whs4"># create a compound
\r
759 of two glued boxes</p>
\r
761 <p class="whs3">box1 = geompy.MakeBox(0.,
\r
762 0., 0., 20., 20., 15.)</p>
\r
764 <p class="whs3">box2 = geompy.MakeTranslation(box1,
\r
767 <p class="whs3">comp = geompy.MakeCompound([box1,
\r
770 <p class="whs3">box = geompy.MakeGlueFaces(comp,
\r
773 <p class="whs3">idbox = geompy.addToStudy(box,
\r
774 "box")</p>
\r
776 <p class="whs3"> </p>
\r
778 <p class="whs4"># create a mesh</p>
\r
780 <p class="whs3">tria = smesh.Mesh(box,
\r
781 "Box compound : 2D triangle mesh")</p>
\r
783 <p class="whs3">algo = tria.Segment()</p>
\r
785 <p class="whs3">algo.NumberOfSegments(5)</p>
\r
787 <p class="whs3">algo = tria.Triangle()</p>
\r
789 <p class="whs3">algo.MaxElementArea(20.)</p>
\r
791 <p class="whs3">tria.Compute()</p>
\r
793 <p class="whs3"> </p>
\r
795 <p class="whs3">mesh = tria.GetMesh()</p>
\r
797 <p class="whs3">gen = smesh.smesh</p>
\r
799 <p class="whs3"> </p>
\r
801 <p class="whs4"># Criterion : MULTI-CONNECTION
\r
804 <p class="whs3">nb_conn = 3</p>
\r
806 <p class="whs3"> </p>
\r
808 <p class="whs3">aFilterMgr = gen.CreateFilterManager()</p>
\r
810 <p class="whs3">aFunctor = aFilterMgr.CreateMultiConnection2D()</p>
\r
812 <p class="whs3"> </p>
\r
814 <p class="whs3">aPredicate = aFilterMgr.CreateEqualTo()</p>
\r
816 <p class="whs3">aPredicate.SetNumFunctor(aFunctor)</p>
\r
818 <p class="whs3">aPredicate.SetMargin(nb_conn)</p>
\r
820 <p class="whs3"> </p>
\r
822 <p class="whs3">aFilter = aFilterMgr.CreateFilter()</p>
\r
824 <p class="whs3">aFilter.SetPredicate(aPredicate)</p>
\r
826 <p class="whs3"> </p>
\r
828 <p class="whs3">anIds = aFilter.GetElementsId(mesh)</p>
\r
830 <p class="whs3"> </p>
\r
832 <p class="whs4"># print the result</p>
\r
834 <p class="whs3">print "Criterion:
\r
835 Borders at multi-connection 2D = ", nb_conn, " Nb = ",
\r
838 <p class="whs3">j = 1</p>
\r
840 <p class="whs3">for i in range(len(anIds)):</p>
\r
842 <p class="whs3"> if
\r
843 j > 20: j = 1; print ""</p>
\r
845 <p class="whs3"> print
\r
848 <p class="whs3"> j
\r
851 <p class="whs3"> pass</p>
\r
853 <p class="whs3">print ""</p>
\r
855 <p class="whs3"> </p>
\r
857 <p class="whs4"># create a group</p>
\r
859 <p class="whs3">aGroup = mesh.CreateGroup(SMESH.FACE,
\r
860 "Borders at multi-connection 2D = " + `nb_conn`)</p>
\r
862 <p class="whs3">aGroup.Add(anIds)</p>
\r
864 <p class="whs3"> </p>
\r
866 <p class="whs3">salome.sg.updateObjBrowser(1)
\r
869 <p class="whs3"> </p>
\r
871 <h3><a name=bookmark6>Area</a></h3>
\r
873 <p class="whs1"><span style="font-weight: bold; color: #ff0000;"><font color=red ><B><span
\r
874 style="font-weight: bold; color: #ff0000;"><font color=red ><B># Attention! This script has
\r
875 been written using the old approach basing on direct usage of SMESH idl
\r
876 interface.</B></font></span></B></font></span></p>
\r
878 <p class="whs1"># For the moment smesh package doesn't provide
\r
879 methods to check area. </p>
\r
881 <p class="whs1"># In the next SALOME version the scripts will
\r
882 be updated to use only the commands from smesh package.</p>
\r
884 <p class="whs2"> </p>
\r
886 <p class="whs3">import SMESH</p>
\r
888 <p class="whs3">import SMESH_mechanic</p>
\r
890 <p class="whs3"> </p>
\r
892 <p class="whs3">smesh =
\r
893 SMESH_mechanic.smesh</p>
\r
895 <p class="whs3">mesh =
\r
896 SMESH_mechanic.mesh</p>
\r
898 <p class="whs3">salome = SMESH_mechanic.salome</p>
\r
900 <p class="whs2"> </p>
\r
902 <p class="whs2"># Criterion : AREA >
\r
905 <p class="whs3">area_margin = 100.</p>
\r
907 <p class="whs3"> </p>
\r
909 <p class="whs3">aFilterMgr = smesh.CreateFilterManager()</p>
\r
911 <p class="whs3">aFunctor = aFilterMgr.CreateArea()</p>
\r
913 <p class="whs3"> </p>
\r
915 <p class="whs3">aPredicate = aFilterMgr.CreateMoreThan()</p>
\r
917 <p class="whs3">aPredicate.SetNumFunctor(aFunctor)</p>
\r
919 <p class="whs3">aPredicate.SetMargin(area_margin)</p>
\r
921 <p class="whs3"> </p>
\r
923 <p class="whs3">aFilter = aFilterMgr.CreateFilter()</p>
\r
925 <p class="whs3">aFilter.SetPredicate(aPredicate)</p>
\r
927 <p class="whs3"> </p>
\r
929 <p class="whs3">anIds = aFilter.GetElementsId(mesh)</p>
\r
931 <p class="whs2"> </p>
\r
933 <p class="whs2"># print the result</p>
\r
935 <p class="whs3">print "Criterion:
\r
936 Area > ", area_margin, " Nb = ", len(anIds)</p>
\r
938 <p class="whs3">j = 1</p>
\r
940 <p class="whs3">for i in range(len(anIds)):</p>
\r
942 <p class="whs3"> if
\r
943 j > 20: j = 1; print ""</p>
\r
945 <p class="whs3"> print
\r
948 <p class="whs3"> j
\r
951 <p class="whs3"> pass</p>
\r
953 <p class="whs3">print ""</p>
\r
955 <p class="whs3"> </p>
\r
957 <p class="whs2"># create a group</p>
\r
959 <p class="whs3">aGroup = mesh.CreateGroup(SMESH.FACE,
\r
960 "Area > " + `area_margin`)</p>
\r
962 <p class="whs3">aGroup.Add(anIds)</p>
\r
964 <p class="whs3"> </p>
\r
966 <p class="whs2"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span>
\r
969 <h3><a name=bookmark7>Taper</a></h3>
\r
971 <p class="whs1"><span style="font-weight: bold; color: #ff0000;"><font color=red ><B><span
\r
972 style="font-weight: bold; color: #ff0000;"><font color=red ><B># Attention! This script has
\r
973 been written using the old approach basing on direct usage of SMESH idl
\r
974 interface.</B></font></span></B></font></span></p>
\r
976 <p class="whs1"># For the moment smesh package doesn't provide
\r
977 methods to check taper. </p>
\r
979 <p class="whs1"># In the next SALOME version the scripts will
\r
980 be updated to use only the commands from smesh package.</p>
\r
982 <p class="whs3"> </p>
\r
984 <p class="whs3">import SMESH</p>
\r
986 <p class="whs3">import SMESH_mechanic</p>
\r
988 <p class="whs3"> </p>
\r
990 <p class="whs3">smesh =
\r
991 SMESH_mechanic.smesh</p>
\r
993 <p class="whs3">mesh =
\r
994 SMESH_mechanic.mesh</p>
\r
996 <p class="whs3">salome = SMESH_mechanic.salome</p>
\r
998 <p class="whs3"> </p>
\r
1000 <p class="whs4"># Criterion : Taper
\r
1003 <p class="whs3">taper_margin = 3e-20</p>
\r
1005 <p class="whs3"> </p>
\r
1007 <p class="whs3">aFilterMgr = smesh.CreateFilterManager()</p>
\r
1009 <p class="whs3">aFunctor = aFilterMgr.CreateTaper()</p>
\r
1011 <p class="whs3"> </p>
\r
1013 <p class="whs3">aPredicate = aFilterMgr.CreateMoreThan()</p>
\r
1015 <p class="whs3">aPredicate.SetNumFunctor(aFunctor)</p>
\r
1017 <p class="whs3">aPredicate.SetMargin(taper_margin)</p>
\r
1019 <p class="whs3"> </p>
\r
1021 <p class="whs3">aFilter = aFilterMgr.CreateFilter()</p>
\r
1023 <p class="whs3">aFilter.SetPredicate(aPredicate)</p>
\r
1025 <p class="whs3"> </p>
\r
1027 <p class="whs3">anIds = aFilter.GetElementsId(mesh)</p>
\r
1029 <p class="whs3"> </p>
\r
1031 <p class="whs4"># print the result</p>
\r
1033 <p class="whs3">print "Criterion:
\r
1034 Taper > ", taper_margin, " Nb = ", len(anIds)</p>
\r
1036 <p class="whs3">j = 1</p>
\r
1038 <p class="whs3">for i in range(len(anIds)):</p>
\r
1040 <p class="whs3"> if
\r
1041 j > 20: j = 1; print ""</p>
\r
1043 <p class="whs3"> print
\r
1046 <p class="whs3"> j
\r
1049 <p class="whs3"> pass</p>
\r
1051 <p class="whs3">print ""</p>
\r
1053 <p class="whs3"> </p>
\r
1055 <p class="whs4"># create a group</p>
\r
1057 <p class="whs3">aGroup = mesh.CreateGroup(SMESH.FACE,
\r
1058 "Taper > " + `taper_margin`)</p>
\r
1060 <p class="whs3">aGroup.Add(anIds)</p>
\r
1062 <p class="whs3"> </p>
\r
1064 <p class="whs3">salome.sg.updateObjBrowser(1)
\r
1067 <h3><a name=bookmark8>Aspect Ratio</a></h3>
\r
1069 <p class="whs1"><span style="font-weight: bold; color: #ff0000;"><font color=red ><B><span
\r
1070 style="font-weight: bold; color: #ff0000;"><font color=red ><B># Attention! This script has
\r
1071 been written using the old approach basing on direct usage of SMESH idl
\r
1072 interface.</B></font></span></B></font></span></p>
\r
1074 <p class="whs1"># For the moment smesh package doesn't provide
\r
1075 methods to check aspect ratio. </p>
\r
1077 <p class="whs1"># In the next SALOME version the scripts will
\r
1078 be updated to use only the commands from smesh package.</p>
\r
1080 <p class="whs3"> </p>
\r
1082 <p class="whs3">import SMESH</p>
\r
1084 <p class="whs3">import SMESH_mechanic</p>
\r
1086 <p class="whs3"> </p>
\r
1088 <p class="whs3">smesh =
\r
1089 SMESH_mechanic.smesh</p>
\r
1091 <p class="whs3">mesh =
\r
1092 SMESH_mechanic.mesh</p>
\r
1094 <p class="whs3">salome = SMESH_mechanic.salome</p>
\r
1096 <p class="whs3"> </p>
\r
1098 <p class="whs4"># Criterion : ASPECT
\r
1099 RATIO > 1.8</p>
\r
1101 <p class="whs3">ar_margin = 1.8</p>
\r
1103 <p class="whs3"> </p>
\r
1105 <p class="whs3">aFilterMgr = smesh.CreateFilterManager()</p>
\r
1107 <p class="whs3">aFunctor = aFilterMgr.CreateAspectRatio()</p>
\r
1109 <p class="whs3"> </p>
\r
1111 <p class="whs3">aPredicate = aFilterMgr.CreateMoreThan()</p>
\r
1113 <p class="whs3">aPredicate.SetNumFunctor(aFunctor)</p>
\r
1115 <p class="whs3">aPredicate.SetMargin(ar_margin)</p>
\r
1117 <p class="whs3"> </p>
\r
1119 <p class="whs3">aFilter = aFilterMgr.CreateFilter()</p>
\r
1121 <p class="whs3">aFilter.SetPredicate(aPredicate)</p>
\r
1123 <p class="whs3"> </p>
\r
1125 <p class="whs3">anIds = aFilter.GetElementsId(mesh)</p>
\r
1127 <p class="whs3"> </p>
\r
1129 <p class="whs4"># print the result</p>
\r
1131 <p class="whs3">print "Criterion:
\r
1132 Aspect Ratio > ", ar_margin, " Nb = ", len(anIds)</p>
\r
1134 <p class="whs3">j = 1</p>
\r
1136 <p class="whs3">for i in range(len(anIds)):</p>
\r
1138 <p class="whs3"> if
\r
1139 j > 20: j = 1; print ""</p>
\r
1141 <p class="whs3"> print
\r
1144 <p class="whs3"> j
\r
1147 <p class="whs3"> pass</p>
\r
1149 <p class="whs3">print ""</p>
\r
1151 <p class="whs3"> </p>
\r
1153 <p class="whs4"># create a group</p>
\r
1155 <p class="whs3">aGroup = mesh.CreateGroup(SMESH.FACE,
\r
1156 "Aspect Ratio > " + `ar_margin`)</p>
\r
1158 <p class="whs3">aGroup.Add(anIds)</p>
\r
1160 <p class="whs3"> </p>
\r
1162 <p class="whs3">salome.sg.updateObjBrowser(1)
\r
1165 <p class="whs3"> </p>
\r
1167 <h3><a name=bookmark9>Minimum Angle</a></h3>
\r
1169 <p class="whs1"><span style="font-weight: bold; color: #ff0000;"><font color=red ><B><span
\r
1170 style="font-weight: bold; color: #ff0000;"><font color=red ><B># Attention! This script has
\r
1171 been written using the old approach basing on direct usage of SMESH idl
\r
1172 interface.</B></font></span></B></font></span></p>
\r
1174 <p class="whs1"># For the moment smesh package doesn't provide
\r
1175 methods to check minimum angle. </p>
\r
1177 <p class="whs1"># In the next SALOME version the scripts will
\r
1178 be updated to use only the commands from smesh package.</p>
\r
1180 <p class="whs3"> </p>
\r
1182 <p class="whs3">import SMESH</p>
\r
1184 <p class="whs3">import SMESH_mechanic</p>
\r
1186 <p class="whs3"> </p>
\r
1188 <p class="whs3">smesh =
\r
1189 SMESH_mechanic.smesh</p>
\r
1191 <p class="whs3">mesh =
\r
1192 SMESH_mechanic.mesh</p>
\r
1194 <p class="whs3">salome = SMESH_mechanic.salome</p>
\r
1196 <p class="whs3"> </p>
\r
1198 <p class="whs4"># Criterion : MINIMUM
\r
1199 ANGLE < 35.</p>
\r
1201 <p class="whs3">min_angle = 35.</p>
\r
1203 <p class="whs3"> </p>
\r
1205 <p class="whs3">aFilterMgr = smesh.CreateFilterManager()</p>
\r
1207 <p class="whs3">aFunctor = aFilterMgr.CreateMinimumAngle()</p>
\r
1209 <p class="whs3"> </p>
\r
1211 <p class="whs3">aPredicate = aFilterMgr.CreateLessThan()</p>
\r
1213 <p class="whs3">aPredicate.SetNumFunctor(aFunctor)</p>
\r
1215 <p class="whs3">aPredicate.SetMargin(min_angle)</p>
\r
1217 <p class="whs3"> </p>
\r
1219 <p class="whs3">aFilter = aFilterMgr.CreateFilter()</p>
\r
1221 <p class="whs3">aFilter.SetPredicate(aPredicate)</p>
\r
1223 <p class="whs3"> </p>
\r
1225 <p class="whs3">anIds = aFilter.GetElementsId(mesh)</p>
\r
1227 <p class="whs3"> </p>
\r
1229 <p class="whs4"># print the result</p>
\r
1231 <p class="whs3">print "Criterion:
\r
1232 Minimum Angle < ", min_angle, " Nb = ", len(anIds)</p>
\r
1234 <p class="whs3">j = 1</p>
\r
1236 <p class="whs3">for i in range(len(anIds)):</p>
\r
1238 <p class="whs3"> if
\r
1239 j > 20: j = 1; print ""</p>
\r
1241 <p class="whs3"> print
\r
1244 <p class="whs3"> j
\r
1247 <p class="whs3"> pass</p>
\r
1249 <p class="whs3">print ""</p>
\r
1251 <p class="whs3"> </p>
\r
1253 <p class="whs4"># create a group</p>
\r
1255 <p class="whs3">aGroup = mesh.CreateGroup(SMESH.FACE,
\r
1256 "Minimum Angle < " + `min_angle`)</p>
\r
1258 <p class="whs3">aGroup.Add(anIds)</p>
\r
1260 <p class="whs3"> </p>
\r
1262 <p class="whs3">salome.sg.updateObjBrowser(1)
\r
1265 <p class="whs3"> </p>
\r
1267 <h3><a name=bookmark10>Warping</a></h3>
\r
1269 <p class="whs1"><span style="font-weight: bold; color: #ff0000;"><font color=red ><B><span
\r
1270 style="font-weight: bold; color: #ff0000;"><font color=red ><B># Attention! This script has
\r
1271 been written using the old approach basing on direct usage of SMESH idl
\r
1272 interface.</B></font></span></B></font></span></p>
\r
1274 <p class="whs1"># For the moment smesh package doesn't provide
\r
1275 methods to check warping. </p>
\r
1277 <p class="whs1"># In the next SALOME version the scripts will
\r
1278 be updated to use only the commands from smesh package.</p>
\r
1280 <p class="whs3"> </p>
\r
1282 <p class="whs3">import SMESH</p>
\r
1284 <p class="whs3">import SMESH_mechanic</p>
\r
1286 <p class="whs3"> </p>
\r
1288 <p class="whs3">smesh =
\r
1289 SMESH_mechanic.smesh</p>
\r
1291 <p class="whs3">mesh =
\r
1292 SMESH_mechanic.mesh</p>
\r
1294 <p class="whs3">salome = SMESH_mechanic.salome</p>
\r
1296 <p class="whs3"> </p>
\r
1298 <p class="whs4"># Criterion : WARP
\r
1299 ANGLE > 1e-15</p>
\r
1301 <p class="whs3">wa_margin = 1e-15</p>
\r
1303 <p class="whs3"> </p>
\r
1305 <p class="whs3">aFilterMgr = smesh.CreateFilterManager()</p>
\r
1307 <p class="whs3">aFunctor = aFilterMgr.CreateWarping()</p>
\r
1309 <p class="whs3"> </p>
\r
1311 <p class="whs3">aPredicate = aFilterMgr.CreateMoreThan()</p>
\r
1313 <p class="whs3">aPredicate.SetNumFunctor(aFunctor)</p>
\r
1315 <p class="whs3">aPredicate.SetMargin(wa_margin)</p>
\r
1317 <p class="whs3"> </p>
\r
1319 <p class="whs3">aFilter = aFilterMgr.CreateFilter()</p>
\r
1321 <p class="whs3">aFilter.SetPredicate(aPredicate)</p>
\r
1323 <p class="whs3"> </p>
\r
1325 <p class="whs3">anIds = aFilter.GetElementsId(mesh)</p>
\r
1327 <p class="whs3"> </p>
\r
1329 <p class="whs4"># print the result</p>
\r
1331 <p class="whs3">print "Criterion:
\r
1332 Warp > ", wa_margin, " Nb = ", len(anIds)</p>
\r
1334 <p class="whs3">j = 1</p>
\r
1336 <p class="whs3">for i in range(len(anIds)):</p>
\r
1338 <p class="whs3"> if
\r
1339 j > 20: j = 1; print ""</p>
\r
1341 <p class="whs3"> print
\r
1344 <p class="whs3"> j
\r
1347 <p class="whs3"> pass</p>
\r
1349 <p class="whs3">print ""</p>
\r
1351 <p class="whs3"> </p>
\r
1353 <p class="whs4"># create a group</p>
\r
1355 <p class="whs3">aGroup = mesh.CreateGroup(SMESH.FACE,
\r
1356 "Warp > " + `wa_margin`)</p>
\r
1358 <p class="whs3">aGroup.Add(anIds)</p>
\r
1360 <p class="whs3"> </p>
\r
1362 <p class="whs3">salome.sg.updateObjBrowser(1)
\r
1365 <p class="whs3"> </p>
\r
1367 <h3><a name=bookmark12>Skew</a></h3>
\r
1369 <p class="whs1"><span style="font-weight: bold; color: #ff0000;"><font color=red ><B><span
\r
1370 style="font-weight: bold; color: #ff0000;"><font color=red ><B># Attention! This script has
\r
1371 been written using the old approach basing on direct usage of SMESH idl
\r
1372 interface.</B></font></span></B></font></span></p>
\r
1374 <p class="whs1"># For the moment smesh package doesn't provide
\r
1375 methods to check skew. </p>
\r
1377 <p class="whs1"># In the next SALOME version the scripts will
\r
1378 be updated to use only the commands from smesh package.</p>
\r
1380 <p class="whs3"> </p>
\r
1382 <p class="whs3">import SMESH</p>
\r
1384 <p class="whs3">import SMESH_mechanic</p>
\r
1386 <p class="whs3"> </p>
\r
1388 <p class="whs3">smesh =
\r
1389 SMESH_mechanic.smesh</p>
\r
1391 <p class="whs3">mesh =
\r
1392 SMESH_mechanic.mesh</p>
\r
1394 <p class="whs3">salome = SMESH_mechanic.salome</p>
\r
1396 <p class="whs3"> </p>
\r
1398 <p class="whs4"># Criterion : Skew
\r
1401 <p class="whs3">skew_margin = 38.</p>
\r
1403 <p class="whs3"> </p>
\r
1405 <p class="whs3">aFilterMgr = smesh.CreateFilterManager()</p>
\r
1407 <p class="whs3">aFunctor = aFilterMgr.CreateSkew()</p>
\r
1409 <p class="whs3"> </p>
\r
1411 <p class="whs3">aPredicate = aFilterMgr.CreateMoreThan()</p>
\r
1413 <p class="whs3">aPredicate.SetNumFunctor(aFunctor)</p>
\r
1415 <p class="whs3">aPredicate.SetMargin(skew_margin)</p>
\r
1417 <p class="whs3"> </p>
\r
1419 <p class="whs3">aFilter = aFilterMgr.CreateFilter()</p>
\r
1421 <p class="whs3">aFilter.SetPredicate(aPredicate)</p>
\r
1423 <p class="whs3"> </p>
\r
1425 <p class="whs3">anIds = aFilter.GetElementsId(mesh)</p>
\r
1427 <p class="whs3"> </p>
\r
1429 <p class="whs4"># print the result</p>
\r
1431 <p class="whs3">print "Criterion:
\r
1432 Skew > ", skew_margin, " Nb = ", len(anIds)</p>
\r
1434 <p class="whs3">j = 1</p>
\r
1436 <p class="whs3">for i in range(len(anIds)):</p>
\r
1438 <p class="whs3"> if
\r
1439 j > 20: j = 1; print ""</p>
\r
1441 <p class="whs3"> print
\r
1444 <p class="whs3"> j
\r
1447 <p class="whs3"> pass</p>
\r
1449 <p class="whs3">print ""</p>
\r
1451 <p class="whs3"> </p>
\r
1453 <p class="whs4"># create a group</p>
\r
1455 <p class="whs3">aGroup = mesh.CreateGroup(SMESH.FACE,
\r
1456 "Skew > " + `skew_margin`)</p>
\r
1458 <p class="whs3">aGroup.Add(anIds)</p>
\r
1460 <p class="whs3"> </p>
\r
1462 <p class="whs3">salome.sg.updateObjBrowser(1)
\r
1465 <p class="whs3"> </p>
\r
1467 <h3><a name=bookmark11>Aspect Ratio 3D</a></h3>
\r
1469 <p class="whs1"><span style="font-weight: bold; color: #ff0000;"><font color=red ><B><span
\r
1470 style="font-weight: bold; color: #ff0000;"><font color=red ><B># Attention! This script has
\r
1471 been written using the old approach basing on direct usage of SMESH idl
\r
1472 interface.</B></font></span></B></font></span></p>
\r
1474 <p class="whs1"># For the moment smesh package doesn't provide
\r
1475 methods to check aspect ratio 3D. </p>
\r
1477 <p class="whs1"># In the next SALOME version the scripts will
\r
1478 be updated to use only the commands from smesh package.</p>
\r
1480 <p class="whs3"> </p>
\r
1482 <p class="whs3">import SMESH</p>
\r
1484 <p class="whs3">import SMESH_mechanic_tetra</p>
\r
1486 <p class="whs3"> </p>
\r
1488 <p class="whs3">smesh =
\r
1489 SMESH_mechanic_tetra.smesh</p>
\r
1491 <p class="whs3">mesh =
\r
1492 SMESH_mechanic_tetra.mesh</p>
\r
1494 <p class="whs3">salome = SMESH_mechanic_tetra.salome</p>
\r
1496 <p class="whs3"> </p>
\r
1498 <p class="whs4"># Criterion : ASPECT
\r
1499 RATIO 3D > 4.5</p>
\r
1501 <p class="whs3">ar_margin = 4.5</p>
\r
1503 <p class="whs3"> </p>
\r
1505 <p class="whs3">aFilterMgr = smesh.CreateFilterManager()</p>
\r
1507 <p class="whs3">aFunctor = aFilterMgr.CreateAspectRatio3D()</p>
\r
1509 <p class="whs3"> </p>
\r
1511 <p class="whs3">aPredicate = aFilterMgr.CreateMoreThan()</p>
\r
1513 <p class="whs3">aPredicate.SetNumFunctor(aFunctor)</p>
\r
1515 <p class="whs3">aPredicate.SetMargin(ar_margin)</p>
\r
1517 <p class="whs3"> </p>
\r
1519 <p class="whs3">aFilter = aFilterMgr.CreateFilter()</p>
\r
1521 <p class="whs3">aFilter.SetPredicate(aPredicate)</p>
\r
1523 <p class="whs3"> </p>
\r
1525 <p class="whs3">anIds = aFilter.GetElementsId(mesh)</p>
\r
1527 <p class="whs3"> </p>
\r
1529 <p class="whs4"># print the result</p>
\r
1531 <p class="whs3">print "Criterion:
\r
1532 Aspect Ratio 3D > ", ar_margin, " Nb = ", len(anIds)</p>
\r
1534 <p class="whs3">j = 1</p>
\r
1536 <p class="whs3">for i in range(len(anIds)):</p>
\r
1538 <p class="whs3"> if
\r
1539 j > 20: j = 1; print ""</p>
\r
1541 <p class="whs3"> print
\r
1544 <p class="whs3"> j
\r
1547 <p class="whs3"> pass</p>
\r
1549 <p class="whs3">print ""</p>
\r
1551 <p class="whs3"> </p>
\r
1553 <p class="whs4"># create a group</p>
\r
1555 <p class="whs3">aGroup = mesh.CreateGroup(SMESH.VOLUME,
\r
1556 "Aspect Ratio 3D > " + `ar_margin`)</p>
\r
1558 <p class="whs3">aGroup.Add(anIds)</p>
\r
1560 <p class="whs3"> </p>
\r
1562 <p class="whs3">salome.sg.updateObjBrowser(1)
\r
1565 <h3><a name=Volume>Volume</a></h3>
\r
1567 <p class="whs1"><span style="font-weight: bold; color: #ff0000;"><font color=red ><B><span
\r
1568 style="font-weight: bold; color: #ff0000;"><font color=red ><B># Attention! This script has
\r
1569 been written using the old approach basing on direct usage of SMESH idl
\r
1570 interface.</B></font></span></B></font></span></p>
\r
1572 <p class="whs1"># For the moment smesh package doesn't provide
\r
1573 methods to check volume. </p>
\r
1575 <p class="whs1"># In the next SALOME version the scripts will
\r
1576 be updated to use only the commands from smesh package.</p>
\r
1578 <p class="whs2"> </p>
\r
1580 <p class="whs3">import SMESH</p>
\r
1582 <p class="whs3">import SMESH_mechanic_tetra</p>
\r
1584 <p class="whs3"> </p>
\r
1586 <p class="whs3">smesh =
\r
1587 SMESH_mechanic_tetra.smesh</p>
\r
1589 <p class="whs3">mesh =
\r
1590 SMESH_mechanic_tetra.mesh</p>
\r
1592 <p class="whs3">salome = SMESH_mechanic_tetra.salome</p>
\r
1594 <p class="whs2"> </p>
\r
1596 <p class="whs2"># Criterion : VOLUME <
\r
1599 <p class="whs3">volume_margin =
\r
1602 <p class="whs3"> </p>
\r
1604 <p class="whs3">aFilterMgr = smesh.CreateFilterManager()</p>
\r
1606 <p class="whs3">aFunctor = aFilterMgr.CreateVolume3D()</p>
\r
1608 <p class="whs3"> </p>
\r
1610 <p class="whs3">aPredicate = aFilterMgr.CreateLessThan()</p>
\r
1612 <p class="whs3">aPredicate.SetNumFunctor(aFunctor)</p>
\r
1614 <p class="whs3">aPredicate.SetMargin(volume_margin)</p>
\r
1616 <p class="whs3"> </p>
\r
1618 <p class="whs3">aFilter = aFilterMgr.CreateFilter()</p>
\r
1620 <p class="whs3">aFilter.SetPredicate(aPredicate)</p>
\r
1622 <p class="whs3"> </p>
\r
1624 <p class="whs3">anIds = aFilter.GetElementsId(mesh)</p>
\r
1626 <p class="whs2"> </p>
\r
1628 <p class="whs2"># print the result</p>
\r
1630 <p class="whs3">print ""</p>
\r
1632 <p class="whs3">print "Criterion:
\r
1633 Volume < ", volume_margin, " Nb = ", len(anIds)</p>
\r
1635 <p class="whs3">j = 1</p>
\r
1637 <p class="whs3">for i in range(len(anIds)):</p>
\r
1639 <p class="whs3"> if
\r
1640 j > 20: j = 1; print ""</p>
\r
1642 <p class="whs3"> print
\r
1645 <p class="whs3"> j
\r
1648 <p class="whs3"> pass</p>
\r
1650 <p class="whs3">print ""</p>
\r
1652 <p class="whs2"> </p>
\r
1654 <p class="whs2"># create a group</p>
\r
1656 <p class="whs3">aGroup = mesh.CreateGroup(SMESH.VOLUME,
\r
1657 "Volume < " + `volume_margin`)</p>
\r
1659 <p class="whs3">aGroup.Add(anIds)</p>
\r
1661 <p class="whs3"> </p>
\r
1663 <p class="whs2"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span>
\r
1666 <script type="text/javascript" language="javascript1.2">
\r
1668 if (window.writeIntopicBar)
\r
1669 writeIntopicBar(0);
\r