Salome HOME
Porting GUI documentation on Doxygen tool.
[modules/smesh.git] / doc / salome / gui / SMESH / quality_controls.htm
1 <!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">
2
3 <html>
4
5 <head>
6 <title>Quality Controls</title>
7 <meta http-equiv="content-type" content="text/html; charset=windows-1252">
8 <meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com"><style type="text/css">
9 <!--
10 p.whs1 { margin-top:0pt; margin-bottom:0pt; font-family:'Lucida Console' , monospace; }
11 p.whs2 { margin-top:0pt; margin-bottom:0pt; }
12 p.whs3 { margin-top:0pt; margin-bottom:0pt; font-family:'Times New Roman' , serif; }
13 -->
14 </style><script type="text/javascript" language="JavaScript">
15 <!--
16 if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))
17 {
18   var strNSS = "<style type='text/css'>";
19   strNSS += "p.whs1 {margin-top:1pt;margin-bottom:1pt; }";
20   strNSS += "p.whs2 {margin-top:1pt;margin-bottom:1pt; }";
21   strNSS += "p.whs3 {margin-top:1pt;margin-bottom:1pt; }";
22   strNSS +="</style>";
23   document.write(strNSS);
24 }
25 //-->
26 </script>
27 <script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">
28 <!--
29 function reDo() {
30   if (innerWidth != origWidth || innerHeight != origHeight)
31      location.reload();
32 }
33 if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {
34         origWidth = innerWidth;
35         origHeight = innerHeight;
36         onresize = reDo;
37 }
38 onerror = null; 
39 //-->
40 </script>
41 <style type="text/css">
42 <!--
43 div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }
44 p.WebHelpNavBar { text-align:right; }
45 -->
46 </style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>
47 <script type="text/javascript" language="javascript" src="whver.js"></script>
48 <script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>
49 <script type="text/javascript" language="javascript1.2" src="whutils.js"></script>
50 <script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>
51 <script type="text/javascript" language="javascript1.2">
52 <!--
53 if (window.gbWhTopic)
54 {
55         if (window.setRelStartPage)
56         {
57         addTocInfo("MESH module\nTUI Scripts\nQuality Controls");
58 addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");
59 addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");
60
61         }
62
63
64         if (window.setRelStartPage)
65         {
66         setRelStartPage("index.htm");
67
68                 autoSync(1);
69                 sendSyncInfo();
70                 sendAveInfoOut();
71         }
72
73 }
74 else
75         if (window.gbIE4)
76                 document.location.reload();
77 //-->
78 </script>
79 </head>
80 <body><script type="text/javascript" language="javascript1.2">
81 <!--
82 if (window.writeIntopicBar)
83         writeIntopicBar(4);
84 //-->
85 </script>
86 <h1>Quality Controls</h1>
87
88 <h3><a name=bookmark>Free Borders</a></h3>
89
90 <p class="whs1">import salome</p>
91
92 <p class="whs1">import geompy</p>
93
94 <p class="whs1">&nbsp;</p>
95
96 <p class="whs1">import smesh</p>
97
98 <p class="whs2">&nbsp;</p>
99
100 <p class="whs2"># create open shell: a 
101  box without one plane</p>
102
103 <p class="whs1"><span style="font-family: 'Lucida Console', monospace;">box 
104  = geompy.MakeBox(0., 0., 0., 20., 20., 15.)</span></p>
105
106 <p class="whs1">FaceList = geompy.SubShapeAll(box, 
107  geompy.ShapeType[&quot;FACE&quot;])</p>
108
109 <p class="whs1">FaceList.remove(FaceList[5])</p>
110
111 <p class="whs1">box = geompy.MakeShell(FaceList)</p>
112
113 <p class="whs1">idbox = geompy.addToStudy(box, 
114  &quot;box&quot;)</p>
115
116 <p class="whs1">&nbsp;</p>
117
118 <p class="whs2"># create a mesh</p>
119
120 <p class="whs1"><span style="font-family: 'Lucida Console', monospace;">mesh 
121  = smesh.Mesh(box, &quot;Mesh_free_borders&quot;)</span></p>
122
123 <p class="whs1">algo = mesh.Segment()</p>
124
125 <p class="whs1">algo.NumberOfSegments(5)</p>
126
127 <p class="whs1">algo = mesh.Triangle()</p>
128
129 <p class="whs1">algo.MaxElementArea(20.)</p>
130
131 <p class="whs1">mesh.Compute() </p>
132
133 <p class="whs1">&nbsp;</p>
134
135 <p class="whs2"># criterion : free borders</p>
136
137 <p class="whs1"><span style="font-family: 'Lucida Console', monospace;">aFilter 
138  = smesh.GetFilter(smesh.EDGE, smesh.FT_FreeBorders)</span><span style="margin-top: 0pt;
139         margin-bottom: 0pt;
140         font-family: 'Lucida Console', monospace;"> </span></p>
141
142 <p class="whs1">anIds = mesh.GetIdsFromFilter(aFilter)</p>
143
144 <p class="whs1">&nbsp;</p>
145
146 <p class="whs2">&nbsp;</p>
147
148 <p class="whs2"># print the result</p>
149
150 <p class="whs1">print &quot;Criterion: 
151  Free borders Nb = &quot;, len(anIds)</p>
152
153 <p class="whs1">j = 1</p>
154
155 <p class="whs1">for i in range(len(anIds)):</p>
156
157 <p class="whs1">&nbsp;&nbsp;if 
158  j &gt; 20: j = 1; print &quot;&quot;</p>
159
160 <p class="whs1">&nbsp;&nbsp;print 
161  anIds[i],</p>
162
163 <p class="whs1">&nbsp;&nbsp;j 
164  = j + 1</p>
165
166 <p class="whs1">&nbsp;&nbsp;pass</p>
167
168 <p class="whs1">print &quot;&quot;</p>
169
170 <p class="whs2">&nbsp;</p>
171
172 <p class="whs2"># create a group</p>
173
174 <p class="whs1">aGroup = mesh.CreateGroup(SMESH.EDGE, 
175  &quot;Free borders&quot;)</p>
176
177 <p class="whs1">aGroup.Add(anIds)</p>
178
179 <p class="whs1">&nbsp;</p>
180
181 <p class="whs2"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> 
182  </p>
183
184 <h3><a name=bookmark1>Borders at Multiconnection</a></h3>
185
186 <p class="whs1">import salome</p>
187
188 <p class="whs1">import geompy</p>
189
190 <p class="whs1">&nbsp;</p>
191
192 <p class="whs1">import smesh</p>
193
194 <p class="whs1">import SMESH</p>
195
196 <p class="whs1">&nbsp;</p>
197
198 <p class="whs3"># create open shell: 
199  a box without one plane</p>
200
201 <p class="whs1">box = geompy.MakeBox(0., 
202  0., 0., 20., 20., 15.)</p>
203
204 <p class="whs1">FaceList = geompy.SubShapeAll(box, 
205  geompy.ShapeType[&quot;FACE&quot;])</p>
206
207 <p class="whs1">FaceList.remove(FaceList[5])</p>
208
209 <p class="whs1">box = geompy.MakeShell(FaceList)</p>
210
211 <p class="whs1">idbox = geompy.addToStudy(box, 
212  &quot;box&quot;)</p>
213
214 <p class="whs1">&nbsp;</p>
215
216 <p class="whs3"># create a mesh</p>
217
218 <p class="whs1"><span style="font-family: 'Lucida Console', monospace;">mesh 
219  = smesh.Mesh(box, &quot;Mesh_borders_at_multi-connections&quot;)</span></p>
220
221 <p class="whs1">algo = mesh.Segment()</p>
222
223 <p class="whs1">algo.NumberOfSegments(5)</p>
224
225 <p class="whs1">algo = mesh.Triangle()</p>
226
227 <p class="whs1">algo.MaxElementArea(20.)</p>
228
229 <p class="whs1">mesh.Compute() </p>
230
231 <p class="whs1">&nbsp;</p>
232
233 <p class="whs3"># Criterion : Borders 
234  at multi-connection</p>
235
236 <p class="whs1">nb_conn = 2</p>
237
238 <p class="whs1">&nbsp;</p>
239
240 <p class="whs1"><span style="font-family: 'Lucida Console', monospace;">aFilter 
241  = smesh.GetFilter(smesh.EDGE, smesh.FT_MultiConnection, smesh.FT_EqualTo, 
242  nb_conn)</span></p>
243
244 <p class="whs1">anIds = mesh.GetIdsFromFilter(aFilter)</p>
245
246 <p class="whs1">&nbsp;</p>
247
248 <p class="whs1">&nbsp;</p>
249
250 <p class="whs3"># print the result</p>
251
252 <p class="whs1">print &quot;Criterion: 
253  Borders at multi-connections Nb = &quot;, len(anIds)</p>
254
255 <p class="whs1">j = 1</p>
256
257 <p class="whs1">for i in range(len(anIds)):</p>
258
259 <p class="whs1">&nbsp;&nbsp;if 
260  j &gt; 20: j = 1; print &quot;&quot;</p>
261
262 <p class="whs1">&nbsp;&nbsp;print 
263  anIds[i],</p>
264
265 <p class="whs1">&nbsp;&nbsp;j 
266  = j + 1</p>
267
268 <p class="whs1">&nbsp;&nbsp;pass</p>
269
270 <p class="whs1">print &quot;&quot;</p>
271
272 <p class="whs1">&nbsp;</p>
273
274 <p class="whs3"># create a group</p>
275
276 <p class="whs1">aGroup = mesh.CreateGroup(SMESH.EDGE, 
277  &quot;Borders at multi-connections&quot;)</p>
278
279 <p class="whs1">aGroup.Add(anIds)</p>
280
281 <p class="whs1">salome.sg.updateObjBrowser(1) 
282  </p>
283
284 <h3><a name=bookmark2>Length 1D</a></h3>
285
286 <p class="whs1">import salome</p>
287
288 <p class="whs1">import geompy</p>
289
290 <p class="whs1">&nbsp;</p>
291
292 <p class="whs1">import smesh</p>
293
294 <p class="whs2">&nbsp;</p>
295
296 <p class="whs2"># create open shell: a 
297  box without one plane</p>
298
299 <p class="whs1">box = geompy.MakeBox(0., 
300  0., 0., 20., 20., 15.)</p>
301
302 <p class="whs1">FaceList = geompy.SubShapeAll(box, 
303  geompy.ShapeType[&quot;FACE&quot;])</p>
304
305 <p class="whs1">FaceList.remove(FaceList[5])</p>
306
307 <p class="whs1">box = geompy.MakeShell(FaceList)</p>
308
309 <p class="whs1">idbox = geompy.addToStudy(box, 
310  &quot;box&quot;)</p>
311
312 <p class="whs2">&nbsp;</p>
313
314 <p class="whs2"># create a mesh</p>
315
316 <p class="whs1"><span style="font-family: 'Lucida Console', monospace;">mesh 
317  = smesh.Mesh(box, &quot;Mesh_Length_1D&quot;)</span></p>
318
319 <p class="whs1">algo = mesh.Segment()</p>
320
321 <p class="whs1">algo.NumberOfSegments(5)</p>
322
323 <p class="whs1">algo = mesh.Triangle()</p>
324
325 <p class="whs1">algo.MaxElementArea(20.)</p>
326
327 <p class="whs1">mesh.Compute() </p>
328
329 <p class="whs2">&nbsp;</p>
330
331 <p class="whs2"># Criterion : Length &gt; 
332  3.</p>
333
334 <p class="whs1">length_margin = 
335  3.</p>
336
337 <p class="whs1">&nbsp;</p>
338
339 <p class="whs1"><span style="font-family: 'Lucida Console', monospace;">aFilter 
340  = smesh.GetFilter(smesh.EDGE, smesh.FT_Length, smesh.FT_MoreThan, length_margin)</span></p>
341
342 <p class="whs1">anIds = mesh.GetIdsFromFilter(aFilter) 
343  </p>
344
345 <p class="whs2">&nbsp;</p>
346
347 <p class="whs2"># print the result</p>
348
349 <p class="whs1">print &quot;Criterion: 
350  Edges length &gt; &quot;, length_margin, &quot; Nb = &quot;, len(anIds)</p>
351
352 <p class="whs1">j = 1</p>
353
354 <p class="whs1">for i in range(len(anIds)):</p>
355
356 <p class="whs1">&nbsp;&nbsp;if 
357  j &gt; 20: j = 1; print &quot;&quot;</p>
358
359 <p class="whs1">&nbsp;&nbsp;print 
360  anIds[i],</p>
361
362 <p class="whs1">&nbsp;&nbsp;j 
363  = j + 1</p>
364
365 <p class="whs1">&nbsp;&nbsp;pass</p>
366
367 <p class="whs1">print &quot;&quot;</p>
368
369 <p class="whs2">&nbsp;</p>
370
371 <p class="whs2"># create a group</p>
372
373 <p class="whs1">aGroup = mesh.CreateGroup(SMESH.EDGE, 
374  &quot;Edges with length &gt; &quot; + `length_margin`)</p>
375
376 <p class="whs1">aGroup.Add(anIds)</p>
377
378 <p class="whs1">&nbsp;</p>
379
380 <p class="whs2"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> 
381  </p>
382
383 <h3><a name=bookmark3>Free Edges</a></h3>
384
385 <p class="whs1">import SMESH_mechanic</p>
386
387 <p class="whs1">&nbsp;</p>
388
389 <p class="whs1">smesh &nbsp;= 
390  SMESH_mechanic.smesh</p>
391
392 <p class="whs1">mesh &nbsp;&nbsp;= 
393  SMESH_mechanic.mesh</p>
394
395 <p class="whs1">salome = SMESH_mechanic.salome</p>
396
397 <p class="whs1">&nbsp;</p>
398
399 <p class="whs1">aFilterMgr = smesh.CreateFilterManager()</p>
400
401 <p class="whs1">&nbsp;</p>
402
403 <p class="whs3"># Remove some elements 
404  to obtain free edges</p>
405
406 <p class="whs3"># Criterion : AREA 
407  &gt; 95.</p>
408
409 <p class="whs1">area_margin = 95.</p>
410
411 <p class="whs1">&nbsp;</p>
412
413 <p class="whs1"><span style="font-family: 'Lucida Console', monospace;">aFilter 
414  = smesh.GetFilter(smesh.FACE, smesh.FT_Area, smesh.FT_MoreThan, area_margin)</span></p>
415
416 <p class="whs1">&nbsp;</p>
417
418 <p class="whs1">anIds = mesh.GetIdsFromFilter(aFilter)</p>
419
420 <p class="whs1">&nbsp;</p>
421
422 <p class="whs1">mesh.RemoveElements(anIds)</p>
423
424 <p class="whs1">&nbsp;</p>
425
426 <p class="whs3"># Criterion : Free 
427  Edges</p>
428
429 <p class="whs1">aBorders = mesh.GetFreeBorders() 
430  </p>
431
432 <p class="whs1">&nbsp;</p>
433
434 <p class="whs3"># create groups</p>
435
436 <p class="whs1">aGroupF = mesh.CreateGroup(SMESH.FACE, 
437  &quot;Faces with free edges&quot;)</p>
438
439 <p class="whs1">aGroupN = mesh.CreateGroup(SMESH.NODE, 
440  &quot;Nodes on free edges&quot;)</p>
441
442 <p class="whs1">&nbsp;</p>
443
444 <p class="whs3"># fill groups with 
445  elements, corresponding to the criterion</p>
446
447 <p class="whs1">print &quot;&quot;</p>
448
449 <p class="whs1">print &quot;Criterion: 
450  Free edges Nb = &quot;, len(aBorders)</p>
451
452 <p class="whs1">for i in range(len(aBorders)):</p>
453
454 <p class="whs1">&nbsp;&nbsp;aBorder 
455  = aBorders[i]</p>
456
457 <p class="whs1">&nbsp;&nbsp;print 
458  &quot;Face # &quot;, aBorder.myElemId, &quot; : Edge between nodes (&quot;,</p>
459
460 <p class="whs1">&nbsp;&nbsp;print 
461  aBorder.myPnt1, &quot;, &quot;, aBorder.myPnt2, &quot;)&quot;</p>
462
463 <p class="whs1">&nbsp;</p>
464
465 <p class="whs1">&nbsp;&nbsp;<span 
466  style="margin-top: 0pt;
467                 margin-bottom: 0pt;
468                 font-family: 'Lucida Console', monospace;">aGroupF.Add([aBorder.myElemId])</span></p>
469
470 <p class="whs1">&nbsp;&nbsp;aGroupN.Add([aBorder.myPnt1, 
471  aBorder.myPnt2])</p>
472
473 <p class="whs1">&nbsp;</p>
474
475 <p class="whs1">salome.sg.updateObjBrowser(1) 
476  </p>
477
478 <p class="whs1">&nbsp;</p>
479
480 <h3><a name=bookmark4>Length 2D</a></h3>
481
482 <p class="whs1">import salome</p>
483
484 <p class="whs1">import geompy</p>
485
486 <p class="whs1">&nbsp;</p>
487
488 <p class="whs1">import smesh</p>
489
490 <p class="whs1">&nbsp;</p>
491
492 <p class="whs3"># create open shell: 
493  a box without one plane</p>
494
495 <p class="whs1">box = geompy.MakeBox(0., 
496  0., 0., 20., 20., 15.)</p>
497
498 <p class="whs1">FaceList = geompy.SubShapeAll(box, 
499  geompy.ShapeType[&quot;FACE&quot;])</p>
500
501 <p class="whs1">FaceList.remove(FaceList[5])</p>
502
503 <p class="whs1">box = geompy.MakeShell(FaceList)</p>
504
505 <p class="whs1">idbox = geompy.addToStudy(box, 
506  &quot;box&quot;)</p>
507
508 <p class="whs1">&nbsp;</p>
509
510 <p class="whs3"># create a mesh</p>
511
512 <p class="whs1"><span style="font-family: 'Lucida Console', monospace;">mesh 
513  = smesh.Mesh(box, &quot;Mesh_Length_2D&quot;)</span></p>
514
515 <p class="whs1">algo = mesh.Segment()</p>
516
517 <p class="whs1">algo.NumberOfSegments(5)</p>
518
519 <p class="whs1">algo = mesh.Triangle()</p>
520
521 <p class="whs1">algo.MaxElementArea(20.)</p>
522
523 <p class="whs1">mesh.Compute()</p>
524
525 <p class="whs1">&nbsp;</p>
526
527 <p class="whs3"># Criterion : Length 
528  2D &gt; 5.7</p>
529
530 <p class="whs1">length_margin = 
531  5.7</p>
532
533 <p class="whs1">&nbsp;</p>
534
535 <p class="whs1"><span style="font-family: 'Lucida Console', monospace;">aFilter 
536  = smesh.GetFilter(smesh.FACE, smesh.FT_Length2D, smesh.FT_MoreThan, length_margin)</span></p>
537
538 <p class="whs1">&nbsp;</p>
539
540 <p class="whs1">anIds = mesh.GetIdsFromFilter(aFilter)</p>
541
542 <p class="whs1">&nbsp;</p>
543
544 <p class="whs3"># print the result</p>
545
546 <p class="whs1">print &quot;Criterion: 
547  Edges length 2D &gt; &quot;, length_margin, &quot; Nb = &quot;, len(anIds)</p>
548
549 <p class="whs1">j = 1</p>
550
551 <p class="whs1">for i in range(len(anIds)):</p>
552
553 <p class="whs1">&nbsp;&nbsp;if 
554  j &gt; 20: j = 1; print &quot;&quot;</p>
555
556 <p class="whs1">&nbsp;&nbsp;print 
557  anIds[i],</p>
558
559 <p class="whs1">&nbsp;&nbsp;j 
560  = j + 1</p>
561
562 <p class="whs1">&nbsp;&nbsp;pass</p>
563
564 <p class="whs1">print &quot;&quot;</p>
565
566 <p class="whs1">&nbsp;</p>
567
568 <p class="whs3"># create a group</p>
569
570 <p class="whs1"><span style="font-family: 'Lucida Console', monospace;">aGroup 
571  = mesh.CreateEmptyGroup(smesh.FACE, &quot;Faces with length 2D &gt; &quot; 
572  + `length_margin`)</span></p>
573
574 <p class="whs1">aGroup.Add(anIds)</p>
575
576 <p class="whs1">&nbsp;</p>
577
578 <p class="whs1">salome.sg.updateObjBrowser(1) 
579  </p>
580
581 <p class="whs2">&nbsp;</p>
582
583 <h3><a name=bookmark5>Borders at Multiconnection 2D</a></h3>
584
585 <p class="whs1">import salome</p>
586
587 <p class="whs1">import geompy</p>
588
589 <p class="whs1">&nbsp;</p>
590
591 <p class="whs1">import smesh</p>
592
593 <p class="whs3">&nbsp;</p>
594
595 <p class="whs3"># create a compound 
596  of two glued boxes</p>
597
598 <p class="whs1">box1 = geompy.MakeBox(0., 
599  0., 0., 20., 20., 15.)</p>
600
601 <p class="whs1">box2 = geompy.MakeTranslation(box1, 
602  0., 20., 0)</p>
603
604 <p class="whs1">comp = geompy.MakeCompound([box1, 
605  box2])</p>
606
607 <p class="whs1">box = geompy.MakeGlueFaces(comp, 
608  0.000001)</p>
609
610 <p class="whs1">idbox = geompy.addToStudy(box, 
611  &quot;box&quot;)</p>
612
613 <p class="whs1">&nbsp;</p>
614
615 <p class="whs3"># create a mesh</p>
616
617 <p class="whs1"><span style="font-family: 'Lucida Console', monospace;">mesh 
618  = smesh.Mesh(box, &quot;Box compound : 2D triangle mesh&quot;)</span></p>
619
620 <p class="whs1">algo = mesh.Segment()</p>
621
622 <p class="whs1">algo.NumberOfSegments(5)</p>
623
624 <p class="whs1">algo = mesh.Triangle()</p>
625
626 <p class="whs1">algo.MaxElementArea(20.)</p>
627
628 <p class="whs1">mesh.Compute() </p>
629
630 <p class="whs1">&nbsp;</p>
631
632 <p class="whs3"># Criterion : MULTI-CONNECTION 
633  2D = 3</p>
634
635 <p class="whs1">nb_conn = 3</p>
636
637 <p class="whs1">&nbsp;</p>
638
639 <p class="whs1"><span style="font-family: 'Lucida Console', monospace;">aFilter 
640  = smesh.GetFilter(smesh.FACE, smesh.FT_MultiConnection2D, smesh.FT_EqualTo, 
641  nb_conn)</span></p>
642
643 <p class="whs1">&nbsp;</p>
644
645 <p class="whs1">anIds = mesh.GetIdsFromFilter(aFilter) 
646  </p>
647
648 <p class="whs1">&nbsp;</p>
649
650 <p class="whs3"># print the result</p>
651
652 <p class="whs1">print &quot;Criterion: 
653  Borders at multi-connection 2D = &quot;, nb_conn, &quot; Nb = &quot;, 
654  len(anIds)</p>
655
656 <p class="whs1">j = 1</p>
657
658 <p class="whs1">for i in range(len(anIds)):</p>
659
660 <p class="whs1">&nbsp;&nbsp;if 
661  j &gt; 20: j = 1; print &quot;&quot;</p>
662
663 <p class="whs1">&nbsp;&nbsp;print 
664  anIds[i],</p>
665
666 <p class="whs1">&nbsp;&nbsp;j 
667  = j + 1</p>
668
669 <p class="whs1">&nbsp;&nbsp;pass</p>
670
671 <p class="whs1">print &quot;&quot;</p>
672
673 <p class="whs1">&nbsp;</p>
674
675 <p class="whs3"># create a group</p>
676
677 <p class="whs1"><span style="font-family: 'Lucida Console', monospace;">aGroup 
678  = mesh.CreateEmptyGroup(smesh.FACE, &quot;Borders at multi-connection 
679  2D = &quot; + `nb_conn`)</span></p>
680
681 <p class="whs1">aGroup.Add(anIds)</p>
682
683 <p class="whs1">&nbsp;</p>
684
685 <p class="whs1">salome.sg.updateObjBrowser(1) 
686  </p>
687
688 <p class="whs1">&nbsp;</p>
689
690 <h3><a name=bookmark6>Area</a></h3>
691
692 <p class="whs1">import SMESH_mechanic</p>
693
694 <p class="whs1">&nbsp;</p>
695
696 <p class="whs1">smesh &nbsp;= 
697  SMESH_mechanic.smesh</p>
698
699 <p class="whs1">mesh &nbsp;&nbsp;= 
700  SMESH_mechanic.mesh</p>
701
702 <p class="whs1">salome = SMESH_mechanic.salome</p>
703
704 <p class="whs2">&nbsp;</p>
705
706 <p class="whs2"># Criterion : AREA &gt; 
707  100.</p>
708
709 <p class="whs1">area_margin = 100.</p>
710
711 <p class="whs1">&nbsp;</p>
712
713 <p class="whs1">aFilter = smesh.GetFilter(smesh.FACE, 
714  smesh.FT_Area, smesh.FT_MoreThan, area_margin)</p>
715
716 <p class="whs1">&nbsp;</p>
717
718 <p class="whs1">anIds = mesh.GetIdsFromFilter(aFilter) 
719  </p>
720
721 <p class="whs2">&nbsp;</p>
722
723 <p class="whs2"># print the result</p>
724
725 <p class="whs1">print &quot;Criterion: 
726  Area &gt; &quot;, area_margin, &quot; Nb = &quot;, len(anIds)</p>
727
728 <p class="whs1">j = 1</p>
729
730 <p class="whs1">for i in range(len(anIds)):</p>
731
732 <p class="whs1">&nbsp;&nbsp;if 
733  j &gt; 20: j = 1; print &quot;&quot;</p>
734
735 <p class="whs1">&nbsp;&nbsp;print 
736  anIds[i],</p>
737
738 <p class="whs1">&nbsp;&nbsp;j 
739  = j + 1</p>
740
741 <p class="whs1">&nbsp;&nbsp;pass</p>
742
743 <p class="whs1">print &quot;&quot;</p>
744
745 <p class="whs1">&nbsp;</p>
746
747 <p class="whs2"># create a group</p>
748
749 <p class="whs1">aGroup = mesh.CreateEmptyGroup(smesh.FACE, 
750  &quot;Area &gt; &quot; + `area_margin`)</p>
751
752 <p class="whs1">aGroup.Add(anIds)</p>
753
754 <p class="whs1">&nbsp;</p>
755
756 <p class="whs2"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> 
757  &nbsp;</p>
758
759 <h3><a name=bookmark7>Taper</a></h3>
760
761 <p class="whs1">import SMESH_mechanic</p>
762
763 <p class="whs1">&nbsp;</p>
764
765 <p class="whs1">smesh &nbsp;= 
766  SMESH_mechanic.smesh</p>
767
768 <p class="whs1">mesh &nbsp;&nbsp;= 
769  SMESH_mechanic.mesh</p>
770
771 <p class="whs1">salome = SMESH_mechanic.salome</p>
772
773 <p class="whs1">&nbsp;</p>
774
775 <p class="whs3"># Criterion : Taper 
776  &gt; 3e-20</p>
777
778 <p class="whs1">taper_margin = 3e-20</p>
779
780 <p class="whs1">&nbsp;</p>
781
782 <p class="whs1">aFilter = smesh.GetFilter(smesh.FACE, 
783  smesh.FT_Taper, smesh.FT_MoreThan, taper_margin)</p>
784
785 <p class="whs1">&nbsp;</p>
786
787 <p class="whs1">anIds = mesh.GetIdsFromFilter(aFilter) 
788  </p>
789
790 <p class="whs1">&nbsp;</p>
791
792 <p class="whs3"># print the result</p>
793
794 <p class="whs1">print &quot;Criterion: 
795  Taper &gt; &quot;, taper_margin, &quot; Nb = &quot;, len(anIds)</p>
796
797 <p class="whs1">j = 1</p>
798
799 <p class="whs1">for i in range(len(anIds)):</p>
800
801 <p class="whs1">&nbsp;&nbsp;if 
802  j &gt; 20: j = 1; print &quot;&quot;</p>
803
804 <p class="whs1">&nbsp;&nbsp;print 
805  anIds[i],</p>
806
807 <p class="whs1">&nbsp;&nbsp;j 
808  = j + 1</p>
809
810 <p class="whs1">&nbsp;&nbsp;pass</p>
811
812 <p class="whs1">print &quot;&quot;</p>
813
814 <p class="whs1">&nbsp;</p>
815
816 <p class="whs3"># create a group</p>
817
818 <p class="whs1"><span style="font-family: 'Lucida Console', monospace;">aGroup 
819  = mesh.CreateEmptyGroup(smesh.FACE, &quot;Taper &gt; &quot; + `taper_margin`)</span></p>
820
821 <p class="whs1">aGroup.Add(anIds)</p>
822
823 <p class="whs1">&nbsp;</p>
824
825 <p class="whs1">salome.sg.updateObjBrowser(1) 
826  &nbsp;</p>
827
828 <h3><a name=bookmark8>Aspect Ratio</a></h3>
829
830 <p class="whs1">import SMESH_mechanic</p>
831
832 <p class="whs1">&nbsp;</p>
833
834 <p class="whs1">smesh &nbsp;= 
835  SMESH_mechanic.smesh</p>
836
837 <p class="whs1">mesh &nbsp;&nbsp;= 
838  SMESH_mechanic.mesh</p>
839
840 <p class="whs1">salome = SMESH_mechanic.salome</p>
841
842 <p class="whs1">&nbsp;</p>
843
844 <p class="whs3"># Criterion : ASPECT 
845  RATIO &gt; 1.8</p>
846
847 <p class="whs1">ar_margin = 1.8</p>
848
849 <p class="whs1">&nbsp;</p>
850
851 <p class="whs1"><span style="font-family: 'Lucida Console', monospace;">aFilter 
852  = smesh.GetFilter(smesh.FACE, smesh.FT_AspectRatio, smesh.FT_MoreThan, 
853  ar_margin)</span></p>
854
855 <p class="whs1">&nbsp;</p>
856
857 <p class="whs1">anIds = mesh.GetIdsFromFilter(aFilter) 
858  </p>
859
860 <p class="whs1">&nbsp;</p>
861
862 <p class="whs3"># print the result</p>
863
864 <p class="whs1">print &quot;Criterion: 
865  Aspect Ratio &gt; &quot;, ar_margin, &quot; Nb = &quot;, len(anIds)</p>
866
867 <p class="whs1">j = 1</p>
868
869 <p class="whs1">for i in range(len(anIds)):</p>
870
871 <p class="whs1">&nbsp;&nbsp;if 
872  j &gt; 20: j = 1; print &quot;&quot;</p>
873
874 <p class="whs1">&nbsp;&nbsp;print 
875  anIds[i],</p>
876
877 <p class="whs1">&nbsp;&nbsp;j 
878  = j + 1</p>
879
880 <p class="whs1">&nbsp;&nbsp;pass</p>
881
882 <p class="whs1">print &quot;&quot;</p>
883
884 <p class="whs1">&nbsp;</p>
885
886 <p class="whs3"># create a group</p>
887
888 <p class="whs1"><span style="font-family: 'Lucida Console', monospace;">aGroup 
889  = mesh.CreateEmptyGroup(smesh.FACE, &quot;Aspect Ratio &gt; &quot; + `ar_margin`)</span></p>
890
891 <p class="whs1">aGroup.Add(anIds)</p>
892
893 <p class="whs1">&nbsp;</p>
894
895 <p class="whs1">salome.sg.updateObjBrowser(1) 
896  </p>
897
898 <p class="whs1">&nbsp;</p>
899
900 <h3><a name=bookmark9>Minimum Angle</a></h3>
901
902 <p class="whs1">import SMESH_mechanic</p>
903
904 <p class="whs1">&nbsp;</p>
905
906 <p class="whs1">smesh &nbsp;= 
907  SMESH_mechanic.smesh</p>
908
909 <p class="whs1">mesh &nbsp;&nbsp;= 
910  SMESH_mechanic.mesh</p>
911
912 <p class="whs1">salome = SMESH_mechanic.salome</p>
913
914 <p class="whs1">&nbsp;</p>
915
916 <p class="whs3"># Criterion : MINIMUM 
917  ANGLE &lt; 35.</p>
918
919 <p class="whs1">min_angle = 35.</p>
920
921 <p class="whs1">&nbsp;</p>
922
923 <p class="whs1">aFilter = smesh.GetFilter(smesh.FACE, 
924  smesh.FT_MinimumAngle, smesh.FT_LessThan, min_angle)</p>
925
926 <p class="whs1">&nbsp;</p>
927
928 <p class="whs1">anIds = mesh.GetIdsFromFilter(aFilter) 
929  </p>
930
931 <p class="whs1">&nbsp;</p>
932
933 <p class="whs3"># print the result</p>
934
935 <p class="whs1">print &quot;Criterion: 
936  Minimum Angle &lt; &quot;, min_angle, &quot; Nb = &quot;, len(anIds)</p>
937
938 <p class="whs1">j = 1</p>
939
940 <p class="whs1">for i in range(len(anIds)):</p>
941
942 <p class="whs1">&nbsp;&nbsp;if 
943  j &gt; 20: j = 1; print &quot;&quot;</p>
944
945 <p class="whs1">&nbsp;&nbsp;print 
946  anIds[i],</p>
947
948 <p class="whs1">&nbsp;&nbsp;j 
949  = j + 1</p>
950
951 <p class="whs1">&nbsp;&nbsp;pass</p>
952
953 <p class="whs1">print &quot;&quot;</p>
954
955 <p class="whs1">&nbsp;</p>
956
957 <p class="whs3"># create a group</p>
958
959 <p class="whs1"><span style="font-family: 'Lucida Console', monospace;">aGroup 
960  = mesh.CreateEmptyGroup(smesh.FACE, &quot;Minimum Angle &lt; &quot; + 
961  `min_angle`)</span></p>
962
963 <p class="whs1">&nbsp;</p>
964
965 <p class="whs1">aGroup.Add(anIds)</p>
966
967 <p class="whs1">&nbsp;</p>
968
969 <p class="whs1">salome.sg.updateObjBrowser(1) 
970  </p>
971
972 <p class="whs1">&nbsp;</p>
973
974 <h3><a name=bookmark10>Warping</a></h3>
975
976 <p class="whs1">import SMESH_mechanic</p>
977
978 <p class="whs1">&nbsp;</p>
979
980 <p class="whs1">smesh &nbsp;= 
981  SMESH_mechanic.smesh</p>
982
983 <p class="whs1">mesh &nbsp;&nbsp;= 
984  SMESH_mechanic.mesh</p>
985
986 <p class="whs1">salome = SMESH_mechanic.salome</p>
987
988 <p class="whs1">&nbsp;</p>
989
990 <p class="whs3"># Criterion : WARP 
991  ANGLE &gt; 1e-15</p>
992
993 <p class="whs1">wa_margin = 1e-15</p>
994
995 <p class="whs1">&nbsp;</p>
996
997 <p class="whs1">aFilter = smesh.GetFilter(smesh.FACE, 
998  smesh.FT_Warping, smesh.FT_MoreThan, wa_margin)</p>
999
1000 <p class="whs1">&nbsp;</p>
1001
1002 <p class="whs1">anIds = mesh.GetIdsFromFilter(aFilter) 
1003  </p>
1004
1005 <p class="whs1">&nbsp;</p>
1006
1007 <p class="whs3"># print the result</p>
1008
1009 <p class="whs1">print &quot;Criterion: 
1010  Warp &gt; &quot;, wa_margin, &quot; Nb = &quot;, len(anIds)</p>
1011
1012 <p class="whs1">j = 1</p>
1013
1014 <p class="whs1">for i in range(len(anIds)):</p>
1015
1016 <p class="whs1">&nbsp;&nbsp;if 
1017  j &gt; 20: j = 1; print &quot;&quot;</p>
1018
1019 <p class="whs1">&nbsp;&nbsp;print 
1020  anIds[i],</p>
1021
1022 <p class="whs1">&nbsp;&nbsp;j 
1023  = j + 1</p>
1024
1025 <p class="whs1">&nbsp;&nbsp;pass</p>
1026
1027 <p class="whs1">print &quot;&quot;</p>
1028
1029 <p class="whs1">&nbsp;</p>
1030
1031 <p class="whs3"># create a group</p>
1032
1033 <p class="whs1">aGroup = mesh.CreateEmptyGroup(smesh.FACE, 
1034  &quot;Warp &gt; &quot; + `wa_margin`)</p>
1035
1036 <p class="whs1">&nbsp;</p>
1037
1038 <p class="whs1">aGroup.Add(anIds)</p>
1039
1040 <p class="whs1">&nbsp;</p>
1041
1042 <p class="whs1">salome.sg.updateObjBrowser(1) 
1043  </p>
1044
1045 <p class="whs1">&nbsp;</p>
1046
1047 <h3><a name=bookmark12>Skew</a></h3>
1048
1049 <p class="whs1">import SMESH_mechanic</p>
1050
1051 <p class="whs1">&nbsp;</p>
1052
1053 <p class="whs1">smesh &nbsp;= 
1054  SMESH_mechanic.smesh</p>
1055
1056 <p class="whs1">mesh &nbsp;&nbsp;= 
1057  SMESH_mechanic.mesh</p>
1058
1059 <p class="whs1">salome = SMESH_mechanic.salome</p>
1060
1061 <p class="whs1">&nbsp;</p>
1062
1063 <p class="whs3"># Criterion : Skew 
1064  &gt; 38.</p>
1065
1066 <p class="whs1">skew_margin = 38.</p>
1067
1068 <p class="whs1">&nbsp;</p>
1069
1070 <p class="whs1">aFilter = smesh.GetFilter(smesh.FACE, 
1071  smesh.FT_Skew, smesh.FT_MoreThan, skew_margin)</p>
1072
1073 <p class="whs1">&nbsp;</p>
1074
1075 <p class="whs1">anIds = mesh.GetIdsFromFilter(aFilter)</p>
1076
1077 <p class="whs1">&nbsp;</p>
1078
1079 <p class="whs3"># print the result</p>
1080
1081 <p class="whs1">print &quot;Criterion: 
1082  Skew &gt; &quot;, skew_margin, &quot; Nb = &quot;, len(anIds)</p>
1083
1084 <p class="whs1">j = 1</p>
1085
1086 <p class="whs1">for i in range(len(anIds)):</p>
1087
1088 <p class="whs1">&nbsp;&nbsp;if 
1089  j &gt; 20: j = 1; print &quot;&quot;</p>
1090
1091 <p class="whs1">&nbsp;&nbsp;print 
1092  anIds[i],</p>
1093
1094 <p class="whs1">&nbsp;&nbsp;j 
1095  = j + 1</p>
1096
1097 <p class="whs1">&nbsp;&nbsp;pass</p>
1098
1099 <p class="whs1">print &quot;&quot;</p>
1100
1101 <p class="whs1">&nbsp;</p>
1102
1103 <p class="whs3"># create a group</p>
1104
1105 <p class="whs1"><span style="font-family: 'Lucida Console', monospace;">aGroup 
1106  = mesh.CreateEmptyGroup(smesh.FACE, &quot;Skew &gt; &quot; + `skew_margin`)</span></p>
1107
1108 <p class="whs1">aGroup.Add(anIds)</p>
1109
1110 <p class="whs1">&nbsp;</p>
1111
1112 <p class="whs1">salome.sg.updateObjBrowser(1) 
1113  </p>
1114
1115 <p class="whs1">&nbsp;</p>
1116
1117 <h3><a name=bookmark11>Aspect Ratio 3D</a></h3>
1118
1119 <p class="whs1">import SMESH_mechanic_tetra 
1120  </p>
1121
1122 <p class="whs1">&nbsp;</p>
1123
1124 <p class="whs1">smesh &nbsp;= 
1125  SMESH_mechanic_tetra.smesh</p>
1126
1127 <p class="whs1">mesh &nbsp;&nbsp;= 
1128  SMESH_mechanic_tetra.mesh</p>
1129
1130 <p class="whs1">salome = SMESH_mechanic_tetra.salome</p>
1131
1132 <p class="whs1">&nbsp;</p>
1133
1134 <p class="whs3"># Criterion : ASPECT 
1135  RATIO 3D &gt; 4.5</p>
1136
1137 <p class="whs1">ar_margin = 4.5</p>
1138
1139 <p class="whs1">&nbsp;</p>
1140
1141 <p class="whs1">aFilter = smesh.GetFilter(smesh.VOLUME, 
1142  smesh.FT_AspectRatio3D, smesh.FT_MoreThan, ar_margin)</p>
1143
1144 <p class="whs1">&nbsp;</p>
1145
1146 <p class="whs1">anIds = mesh.GetIdsFromFilter(aFilter) 
1147  </p>
1148
1149 <p class="whs1">&nbsp;</p>
1150
1151 <p class="whs3"># print the result</p>
1152
1153 <p class="whs1">print &quot;Criterion: 
1154  Aspect Ratio 3D &gt; &quot;, ar_margin, &quot; Nb = &quot;, len(anIds)</p>
1155
1156 <p class="whs1">j = 1</p>
1157
1158 <p class="whs1">for i in range(len(anIds)):</p>
1159
1160 <p class="whs1">&nbsp;&nbsp;if 
1161  j &gt; 20: j = 1; print &quot;&quot;</p>
1162
1163 <p class="whs1">&nbsp;&nbsp;print 
1164  anIds[i],</p>
1165
1166 <p class="whs1">&nbsp;&nbsp;j 
1167  = j + 1</p>
1168
1169 <p class="whs1">&nbsp;&nbsp;pass</p>
1170
1171 <p class="whs1">print &quot;&quot;</p>
1172
1173 <p class="whs1">&nbsp;</p>
1174
1175 <p class="whs3"># create a group</p>
1176
1177 <p class="whs1">aGroup = mesh.CreateEmptyGroup(smesh.VOLUME, 
1178  &quot;Aspect Ratio 3D &gt; &quot; + `ar_margin`)</p>
1179
1180 <p class="whs1">&nbsp;</p>
1181
1182 <p class="whs1">aGroup.Add(anIds)</p>
1183
1184 <p class="whs1">&nbsp;</p>
1185
1186 <p class="whs1">salome.sg.updateObjBrowser(1) 
1187  </p>
1188
1189 <h3><a name=Volume>Volume</a></h3>
1190
1191 <p class="whs1">import SMESH_mechanic_tetra</p>
1192
1193 <p class="whs1">&nbsp;</p>
1194
1195 <p class="whs1">smesh &nbsp;= 
1196  SMESH_mechanic_tetra.smesh</p>
1197
1198 <p class="whs1">mesh &nbsp;&nbsp;= 
1199  SMESH_mechanic_tetra.mesh</p>
1200
1201 <p class="whs1">salome = SMESH_mechanic_tetra.salome</p>
1202
1203 <p class="whs2">&nbsp;</p>
1204
1205 <p class="whs2"># Criterion : VOLUME &lt; 
1206  7.</p>
1207
1208 <p class="whs1">volume_margin = 
1209  7.</p>
1210
1211 <p class="whs1">&nbsp;</p>
1212
1213 <p class="whs1">aFilter = smesh.GetFilter(smesh.VOLUME, 
1214  smesh.FT_Volume3D, smesh.FT_LessThan, volume_margin)</p>
1215
1216 <p class="whs1">&nbsp;</p>
1217
1218 <p class="whs1">anIds = mesh.GetIdsFromFilter(aFilter) 
1219  </p>
1220
1221 <p class="whs2">&nbsp;</p>
1222
1223 <p class="whs2"># print the result</p>
1224
1225 <p class="whs1">print &quot;&quot;</p>
1226
1227 <p class="whs1">print &quot;Criterion: 
1228  Volume &lt; &quot;, volume_margin, &quot; Nb = &quot;, len(anIds)</p>
1229
1230 <p class="whs1">j = 1</p>
1231
1232 <p class="whs1">for i in range(len(anIds)):</p>
1233
1234 <p class="whs1">&nbsp;&nbsp;if 
1235  j &gt; 20: j = 1; print &quot;&quot;</p>
1236
1237 <p class="whs1">&nbsp;&nbsp;print 
1238  anIds[i],</p>
1239
1240 <p class="whs1">&nbsp;&nbsp;j 
1241  = j + 1</p>
1242
1243 <p class="whs1">&nbsp;&nbsp;pass</p>
1244
1245 <p class="whs1">print &quot;&quot;</p>
1246
1247 <p class="whs2">&nbsp;</p>
1248
1249 <p class="whs2"># create a group</p>
1250
1251 <p class="whs1">aGroup = mesh.CreateEmptyGroup(smesh.VOLUME, 
1252  &quot;Volume &lt; &quot; + `volume_margin`)</p>
1253
1254 <p class="whs1">&nbsp;</p>
1255
1256 <p class="whs1">aGroup.Add(anIds)</p>
1257
1258 <p class="whs2">&nbsp;</p>
1259
1260 <p class="whs2"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1) 
1261  </span>&nbsp;</p>
1262
1263 <script type="text/javascript" language="javascript1.2">
1264 <!--
1265 if (window.writeIntopicBar)
1266         writeIntopicBar(0);
1267 //-->
1268 </script>
1269 </body>
1270 </html>