Salome HOME
PAL12557: SMESH Documentation for scripts is not up to date.
[modules/smesh.git] / doc / salome / gui / SMESH / quality_controls.htm
1 <!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
2 \r
3 <html>\r
4 \r
5 <head>\r
6 <title>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
9 <!--\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
14 -->\r
15 </style><script type="text/javascript" language="JavaScript">\r
16 <!--\r
17 if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
18 {\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
26 }\r
27 //-->\r
28 </script>\r
29 <script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
30 <!--\r
31 function reDo() {\r
32   if (innerWidth != origWidth || innerHeight != origHeight)\r
33      location.reload();\r
34 }\r
35 if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
36         origWidth = innerWidth;\r
37         origHeight = innerHeight;\r
38         onresize = reDo;\r
39 }\r
40 onerror = null; \r
41 //-->\r
42 </script>\r
43 <style type="text/css">\r
44 <!--\r
45 div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
46 p.WebHelpNavBar { text-align:right; }\r
47 -->\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
54 <!--\r
55 if (window.gbWhTopic)\r
56 {\r
57         if (window.setRelStartPage)\r
58         {\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
62 \r
63         }\r
64 \r
65 \r
66         if (window.setRelStartPage)\r
67         {\r
68         setRelStartPage("index.htm");\r
69 \r
70                 autoSync(1);\r
71                 sendSyncInfo();\r
72                 sendAveInfoOut();\r
73         }\r
74 \r
75 }\r
76 else\r
77         if (window.gbIE4)\r
78                 document.location.reload();\r
79 //-->\r
80 </script>\r
81 </head>\r
82 <body><script type="text/javascript" language="javascript1.2">\r
83 <!--\r
84 if (window.writeIntopicBar)\r
85         writeIntopicBar(4);\r
86 //-->\r
87 </script>\r
88 <h1>Quality Controls</h1>\r
89 \r
90 <h3><a name=bookmark>Free Borders</a></h3>\r
91 \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
94 \r
95 <p class="whs1"># For the moment smesh package doesn't provide \r
96  methods to check free borders. </p>\r
97 \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
100 \r
101 <p class="whs2">&nbsp;</p>\r
102 \r
103 <p class="whs3">import salome</p>\r
104 \r
105 <p class="whs3">import geompy</p>\r
106 \r
107 <p class="whs3">&nbsp;</p>\r
108 \r
109 <p class="whs3">import smesh</p>\r
110 \r
111 <p class="whs3">import SMESH</p>\r
112 \r
113 <p class="whs2">&nbsp;</p>\r
114 \r
115 <p class="whs2"># create open shell: a \r
116  box without one plane</p>\r
117 \r
118 <p class="whs3">box = geompy.MakeBox(0., \r
119  0., 0., 20., 20., 15.)</p>\r
120 \r
121 <p class="whs3">FaceList = geompy.SubShapeAll(box, \r
122  geompy.ShapeType[&quot;FACE&quot;])</p>\r
123 \r
124 <p class="whs3">FaceList.remove(FaceList[5])</p>\r
125 \r
126 <p class="whs3">box = geompy.MakeShell(FaceList)</p>\r
127 \r
128 <p class="whs3">idbox = geompy.addToStudy(box, \r
129  &quot;box&quot;)</p>\r
130 \r
131 <p class="whs2">&nbsp;</p>\r
132 \r
133 <p class="whs2"># create a mesh</p>\r
134 \r
135 <p class="whs3">tria = smesh.Mesh(box, \r
136  &quot;Mesh_free_borders&quot;)</p>\r
137 \r
138 <p class="whs3">algo = tria.Segment()</p>\r
139 \r
140 <p class="whs3">algo.NumberOfSegments(5)</p>\r
141 \r
142 <p class="whs3">algo = tria.Triangle()</p>\r
143 \r
144 <p class="whs3">algo.MaxElementArea(20.)</p>\r
145 \r
146 <p class="whs3">tria.Compute()</p>\r
147 \r
148 <p class="whs3">&nbsp;</p>\r
149 \r
150 <p class="whs3">mesh = tria.GetMesh()</p>\r
151 \r
152 <p class="whs3">gen = smesh.smesh</p>\r
153 \r
154 <p class="whs2">&nbsp;</p>\r
155 \r
156 <p class="whs2"># criterion : free borders</p>\r
157 \r
158 <p class="whs3">aFilterMgr = gen.CreateFilterManager()</p>\r
159 \r
160 <p class="whs3">aPredicate = aFilterMgr.CreateFreeBorders()</p>\r
161 \r
162 <p class="whs3">aFilter = aFilterMgr.CreateFilter()</p>\r
163 \r
164 <p class="whs3">aFilter.SetPredicate(aPredicate)</p>\r
165 \r
166 <p class="whs3">anIds = aFilter.GetElementsId(mesh)</p>\r
167 \r
168 <p class="whs2">&nbsp;</p>\r
169 \r
170 <p class="whs2"># print the result</p>\r
171 \r
172 <p class="whs3">print &quot;Criterion: \r
173  Free borders Nb = &quot;, len(anIds)</p>\r
174 \r
175 <p class="whs3">j = 1</p>\r
176 \r
177 <p class="whs3">for i in range(len(anIds)):</p>\r
178 \r
179 <p class="whs3">&nbsp;&nbsp;if \r
180  j &gt; 20: j = 1; print &quot;&quot;</p>\r
181 \r
182 <p class="whs3">&nbsp;&nbsp;print \r
183  anIds[i],</p>\r
184 \r
185 <p class="whs3">&nbsp;&nbsp;j \r
186  = j + 1</p>\r
187 \r
188 <p class="whs3">&nbsp;&nbsp;pass</p>\r
189 \r
190 <p class="whs3">print &quot;&quot;</p>\r
191 \r
192 <p class="whs2">&nbsp;</p>\r
193 \r
194 <p class="whs2"># create a group</p>\r
195 \r
196 <p class="whs3">aGroup = mesh.CreateGroup(SMESH.EDGE, \r
197  &quot;Free borders&quot;)</p>\r
198 \r
199 <p class="whs3">aGroup.Add(anIds)</p>\r
200 \r
201 <p class="whs3">&nbsp;</p>\r
202 \r
203 <p class="whs2"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
204  </p>\r
205 \r
206 <h3><a name=bookmark1>Borders at Multiconnection</a></h3>\r
207 \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
211 \r
212 <p class="whs1"># For the moment smesh package doesn't provide \r
213  methods to check borders at multiconnection. </p>\r
214 \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
217 \r
218 <p class="whs3">&nbsp;</p>\r
219 \r
220 <p class="whs3">import salome</p>\r
221 \r
222 <p class="whs3">import geompy</p>\r
223 \r
224 <p class="whs3">&nbsp;</p>\r
225 \r
226 <p class="whs3">import smesh</p>\r
227 \r
228 <p class="whs3">import SMESH</p>\r
229 \r
230 <p class="whs3">&nbsp;</p>\r
231 \r
232 <p class="whs4"># create open shell: \r
233  a box without one plane</p>\r
234 \r
235 <p class="whs3">box = geompy.MakeBox(0., \r
236  0., 0., 20., 20., 15.)</p>\r
237 \r
238 <p class="whs3">FaceList = geompy.SubShapeAll(box, \r
239  geompy.ShapeType[&quot;FACE&quot;])</p>\r
240 \r
241 <p class="whs3">FaceList.remove(FaceList[5])</p>\r
242 \r
243 <p class="whs3">box = geompy.MakeShell(FaceList)</p>\r
244 \r
245 <p class="whs3">idbox = geompy.addToStudy(box, \r
246  &quot;box&quot;)</p>\r
247 \r
248 <p class="whs3">&nbsp;</p>\r
249 \r
250 <p class="whs4"># create a mesh</p>\r
251 \r
252 <p class="whs3">tria = smesh.Mesh(box, \r
253  &quot;Mesh_borders_at_multi-connections&quot;)</p>\r
254 \r
255 <p class="whs3">algo = tria.Segment()</p>\r
256 \r
257 <p class="whs3">algo.NumberOfSegments(5)</p>\r
258 \r
259 <p class="whs3">algo = tria.Triangle()</p>\r
260 \r
261 <p class="whs3">algo.MaxElementArea(20.)</p>\r
262 \r
263 <p class="whs3">tria.Compute()</p>\r
264 \r
265 <p class="whs3">mesh = tria.GetMesh()</p>\r
266 \r
267 <p class="whs3">gen = smesh.smesh</p>\r
268 \r
269 <p class="whs3">&nbsp;</p>\r
270 \r
271 <p class="whs4"># Criterion : Borders \r
272  at multi-connection</p>\r
273 \r
274 <p class="whs3">nb_conn = 2</p>\r
275 \r
276 <p class="whs3">&nbsp;</p>\r
277 \r
278 <p class="whs3">aFilterMgr = gen.CreateFilterManager()</p>\r
279 \r
280 <p class="whs3">aFunctor = aFilterMgr.CreateMultiConnection()</p>\r
281 \r
282 <p class="whs3">&nbsp;</p>\r
283 \r
284 <p class="whs3">aPredicate = aFilterMgr.CreateEqualTo()</p>\r
285 \r
286 <p class="whs3">aPredicate.SetNumFunctor(aFunctor)</p>\r
287 \r
288 <p class="whs3">aPredicate.SetMargin(nb_conn)</p>\r
289 \r
290 <p class="whs3">&nbsp;</p>\r
291 \r
292 <p class="whs3">aFilter = aFilterMgr.CreateFilter()</p>\r
293 \r
294 <p class="whs3">aFilter.SetPredicate(aPredicate)</p>\r
295 \r
296 <p class="whs3">&nbsp;</p>\r
297 \r
298 <p class="whs3">anIds = aFilter.GetElementsId(mesh)</p>\r
299 \r
300 <p class="whs3">&nbsp;</p>\r
301 \r
302 <p class="whs4"># print the result</p>\r
303 \r
304 <p class="whs3">print &quot;Criterion: \r
305  Borders at multi-connections Nb = &quot;, len(anIds)</p>\r
306 \r
307 <p class="whs3">j = 1</p>\r
308 \r
309 <p class="whs3">for i in range(len(anIds)):</p>\r
310 \r
311 <p class="whs3">&nbsp;&nbsp;if \r
312  j &gt; 20: j = 1; print &quot;&quot;</p>\r
313 \r
314 <p class="whs3">&nbsp;&nbsp;print \r
315  anIds[i],</p>\r
316 \r
317 <p class="whs3">&nbsp;&nbsp;j \r
318  = j + 1</p>\r
319 \r
320 <p class="whs3">&nbsp;&nbsp;pass</p>\r
321 \r
322 <p class="whs3">print &quot;&quot;</p>\r
323 \r
324 <p class="whs3">&nbsp;</p>\r
325 \r
326 <p class="whs4"># create a group</p>\r
327 \r
328 <p class="whs3">aGroup = mesh.CreateGroup(SMESH.EDGE, \r
329  &quot;Borders at multi-connections&quot;)</p>\r
330 \r
331 <p class="whs3">aGroup.Add(anIds)</p>\r
332 \r
333 <p class="whs3">salome.sg.updateObjBrowser(1) \r
334  </p>\r
335 \r
336 <h3><a name=bookmark2>Length 1D</a></h3>\r
337 \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
341 \r
342 <p class="whs1"># For the moment smesh package doesn't provide \r
343  methods to check length 1D. </p>\r
344 \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
347 \r
348 <p class="whs2">&nbsp;</p>\r
349 \r
350 <p class="whs3">import salome</p>\r
351 \r
352 <p class="whs3">import geompy</p>\r
353 \r
354 <p class="whs3">&nbsp;</p>\r
355 \r
356 <p class="whs3">import smesh</p>\r
357 \r
358 <p class="whs3">import SMESH</p>\r
359 \r
360 <p class="whs2">&nbsp;</p>\r
361 \r
362 <p class="whs2"># create open shell: a \r
363  box without one plane</p>\r
364 \r
365 <p class="whs3">box = geompy.MakeBox(0., \r
366  0., 0., 20., 20., 15.)</p>\r
367 \r
368 <p class="whs3">FaceList = geompy.SubShapeAll(box, \r
369  geompy.ShapeType[&quot;FACE&quot;])</p>\r
370 \r
371 <p class="whs3">FaceList.remove(FaceList[5])</p>\r
372 \r
373 <p class="whs3">box = geompy.MakeShell(FaceList)</p>\r
374 \r
375 <p class="whs3">idbox = geompy.addToStudy(box, \r
376  &quot;box&quot;)</p>\r
377 \r
378 <p class="whs2">&nbsp;</p>\r
379 \r
380 <p class="whs2"># create a mesh</p>\r
381 \r
382 <p class="whs3">tria = smesh.Mesh(box, \r
383  &quot;Mesh_Length_1D&quot;)</p>\r
384 \r
385 <p class="whs3">algo = tria.Segment()</p>\r
386 \r
387 <p class="whs3">algo.NumberOfSegments(5)</p>\r
388 \r
389 <p class="whs3">algo = tria.Triangle()</p>\r
390 \r
391 <p class="whs3">algo.MaxElementArea(20.)</p>\r
392 \r
393 <p class="whs3">tria.Compute()</p>\r
394 \r
395 <p class="whs3">mesh = tria.GetMesh()</p>\r
396 \r
397 <p class="whs3">gen = smesh.smesh</p>\r
398 \r
399 <p class="whs2">&nbsp;</p>\r
400 \r
401 <p class="whs2"># Criterion : Length &gt; \r
402  3.</p>\r
403 \r
404 <p class="whs3">length_margin = \r
405  3.</p>\r
406 \r
407 <p class="whs3">&nbsp;</p>\r
408 \r
409 <p class="whs3">aFilterMgr = gen.CreateFilterManager()</p>\r
410 \r
411 <p class="whs3">aFunctor = aFilterMgr.CreateLength()</p>\r
412 \r
413 <p class="whs3">&nbsp;</p>\r
414 \r
415 <p class="whs3">aPredicate = aFilterMgr.CreateMoreThan()</p>\r
416 \r
417 <p class="whs3">aPredicate.SetNumFunctor(aFunctor)</p>\r
418 \r
419 <p class="whs3">aPredicate.SetMargin(length_margin)</p>\r
420 \r
421 <p class="whs3">&nbsp;</p>\r
422 \r
423 <p class="whs3">aFilter = aFilterMgr.CreateFilter()</p>\r
424 \r
425 <p class="whs3">aFilter.SetPredicate(aPredicate)</p>\r
426 \r
427 <p class="whs3">&nbsp;</p>\r
428 \r
429 <p class="whs3">anIds = aFilter.GetElementsId(mesh)</p>\r
430 \r
431 <p class="whs2">&nbsp;</p>\r
432 \r
433 <p class="whs2"># print the result</p>\r
434 \r
435 <p class="whs3">print &quot;Criterion: \r
436  Edges length &gt; &quot;, length_margin, &quot; Nb = &quot;, len(anIds)</p>\r
437 \r
438 <p class="whs3">j = 1</p>\r
439 \r
440 <p class="whs3">for i in range(len(anIds)):</p>\r
441 \r
442 <p class="whs3">&nbsp;&nbsp;if \r
443  j &gt; 20: j = 1; print &quot;&quot;</p>\r
444 \r
445 <p class="whs3">&nbsp;&nbsp;print \r
446  anIds[i],</p>\r
447 \r
448 <p class="whs3">&nbsp;&nbsp;j \r
449  = j + 1</p>\r
450 \r
451 <p class="whs3">&nbsp;&nbsp;pass</p>\r
452 \r
453 <p class="whs3">print &quot;&quot;</p>\r
454 \r
455 <p class="whs2">&nbsp;</p>\r
456 \r
457 <p class="whs2"># create a group</p>\r
458 \r
459 <p class="whs3">aGroup = mesh.CreateGroup(SMESH.EDGE, \r
460  &quot;Edges with length &gt; &quot; + `length_margin`)</p>\r
461 \r
462 <p class="whs3">aGroup.Add(anIds)</p>\r
463 \r
464 <p class="whs3">&nbsp;</p>\r
465 \r
466 <p class="whs2"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
467  </p>\r
468 \r
469 <h3><a name=bookmark3>Free Edges</a></h3>\r
470 \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
474 \r
475 <p class="whs1"># For the moment smesh package doesn't provide \r
476  methods to check free edges. </p>\r
477 \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
480 \r
481 <p class="whs3">&nbsp;</p>\r
482 \r
483 <p class="whs3">import SMESH</p>\r
484 \r
485 <p class="whs3">import SMESH_mechanic</p>\r
486 \r
487 <p class="whs3">&nbsp;</p>\r
488 \r
489 <p class="whs3">smesh &nbsp;= \r
490  SMESH_mechanic.smesh</p>\r
491 \r
492 <p class="whs3">mesh &nbsp;&nbsp;= \r
493  SMESH_mechanic.mesh</p>\r
494 \r
495 <p class="whs3">salome = SMESH_mechanic.salome</p>\r
496 \r
497 <p class="whs3">&nbsp;</p>\r
498 \r
499 <p class="whs3">aFilterMgr = smesh.CreateFilterManager()</p>\r
500 \r
501 <p class="whs3">&nbsp;</p>\r
502 \r
503 <p class="whs4"># Remove some elements \r
504  to obtain free edges</p>\r
505 \r
506 <p class="whs4"># Criterion : AREA \r
507  &gt; 95.</p>\r
508 \r
509 <p class="whs3">area_margin = 95.</p>\r
510 \r
511 <p class="whs3">&nbsp;</p>\r
512 \r
513 <p class="whs3">aFunctor = aFilterMgr.CreateArea()</p>\r
514 \r
515 <p class="whs3">aPredicate = aFilterMgr.CreateMoreThan()</p>\r
516 \r
517 <p class="whs3">aPredicate.SetNumFunctor(aFunctor)</p>\r
518 \r
519 <p class="whs3">aPredicate.SetMargin(area_margin)</p>\r
520 \r
521 <p class="whs3">&nbsp;</p>\r
522 \r
523 <p class="whs3">aFilter = aFilterMgr.CreateFilter()</p>\r
524 \r
525 <p class="whs3">aFilter.SetPredicate(aPredicate)</p>\r
526 \r
527 <p class="whs3">&nbsp;</p>\r
528 \r
529 <p class="whs3">anIds = aFilter.GetElementsId(mesh)</p>\r
530 \r
531 <p class="whs3">anEditor = mesh.GetMeshEditor()</p>\r
532 \r
533 <p class="whs3">anEditor.RemoveElements(anIds)</p>\r
534 \r
535 <p class="whs3">&nbsp;</p>\r
536 \r
537 <p class="whs4"># Criterion : Free \r
538  Edges</p>\r
539 \r
540 <p class="whs3">aPredicate = aFilterMgr.CreateFreeEdges()</p>\r
541 \r
542 <p class="whs3">aPredicate.SetMesh(mesh)</p>\r
543 \r
544 <p class="whs3">aBorders = aPredicate.GetBorders()</p>\r
545 \r
546 <p class="whs3">&nbsp;</p>\r
547 \r
548 <p class="whs4"># create groups</p>\r
549 \r
550 <p class="whs3">aGroupF = mesh.CreateGroup(SMESH.FACE, \r
551  &quot;Faces with free edges&quot;)</p>\r
552 \r
553 <p class="whs3">aGroupN = mesh.CreateGroup(SMESH.NODE, \r
554  &quot;Nodes on free edges&quot;)</p>\r
555 \r
556 <p class="whs3">&nbsp;</p>\r
557 \r
558 <p class="whs4"># fill groups with \r
559  elements, corresponding to the criterion</p>\r
560 \r
561 <p class="whs3">print &quot;&quot;</p>\r
562 \r
563 <p class="whs3">print &quot;Criterion: \r
564  Free edges Nb = &quot;, len(aBorders)</p>\r
565 \r
566 <p class="whs3">for i in range(len(aBorders)):</p>\r
567 \r
568 <p class="whs3">&nbsp;&nbsp;aBorder \r
569  = aBorders[i]</p>\r
570 \r
571 <p class="whs3">&nbsp;&nbsp;print \r
572  &quot;Face # &quot;, aBorder.myElemId, &quot; : Edge between nodes (&quot;,</p>\r
573 \r
574 <p class="whs3">&nbsp;&nbsp;print \r
575  aBorder.myPnt1, &quot;, &quot;, aBorder.myPnt2, &quot;)&quot;</p>\r
576 \r
577 <p class="whs3">&nbsp;</p>\r
578 \r
579 <p class="whs3">&nbsp;&nbsp;<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
583 \r
584 <p class="whs3">&nbsp;&nbsp;aGroupN.Add([aBorder.myPnt1, \r
585  aBorder.myPnt2])</p>\r
586 \r
587 <p class="whs3">&nbsp;</p>\r
588 \r
589 <p class="whs3">salome.sg.updateObjBrowser(1) \r
590  </p>\r
591 \r
592 <p class="whs3">&nbsp;</p>\r
593 \r
594 <h3><a name=bookmark4>Length 2D</a></h3>\r
595 \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
599 \r
600 <p class="whs1"># For the moment smesh package doesn't provide \r
601  methods to check length 2D. </p>\r
602 \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
605 \r
606 <p class="whs3">&nbsp;</p>\r
607 \r
608 <p class="whs3">import salome</p>\r
609 \r
610 <p class="whs3">import geompy</p>\r
611 \r
612 <p class="whs3">&nbsp;</p>\r
613 \r
614 <p class="whs3">import smesh</p>\r
615 \r
616 <p class="whs3">import SMESH</p>\r
617 \r
618 <p class="whs3">&nbsp;</p>\r
619 \r
620 <p class="whs4"># create open shell: \r
621  a box without one plane</p>\r
622 \r
623 <p class="whs3">box = geompy.MakeBox(0., \r
624  0., 0., 20., 20., 15.)</p>\r
625 \r
626 <p class="whs3">FaceList = geompy.SubShapeAll(box, \r
627  geompy.ShapeType[&quot;FACE&quot;])</p>\r
628 \r
629 <p class="whs3">FaceList.remove(FaceList[5])</p>\r
630 \r
631 <p class="whs3">box = geompy.MakeShell(FaceList)</p>\r
632 \r
633 <p class="whs3">idbox = geompy.addToStudy(box, \r
634  &quot;box&quot;)</p>\r
635 \r
636 <p class="whs3">&nbsp;</p>\r
637 \r
638 <p class="whs4"># create a mesh</p>\r
639 \r
640 <p class="whs3">tria = smesh.Mesh(box, \r
641  &quot;Mesh_Length_2D&quot;)</p>\r
642 \r
643 <p class="whs3">algo = tria.Segment()</p>\r
644 \r
645 <p class="whs3">algo.NumberOfSegments(5)</p>\r
646 \r
647 <p class="whs3">algo = tria.Triangle()</p>\r
648 \r
649 <p class="whs3">algo.MaxElementArea(20.)</p>\r
650 \r
651 <p class="whs3">tria.Compute()</p>\r
652 \r
653 <p class="whs3">&nbsp;</p>\r
654 \r
655 <p class="whs3">mesh = tria.GetMesh()</p>\r
656 \r
657 <p class="whs3">gen = smesh.smesh</p>\r
658 \r
659 <p class="whs3">&nbsp;</p>\r
660 \r
661 <p class="whs4"># Criterion : Length \r
662  2D &gt; 5.7</p>\r
663 \r
664 <p class="whs3">length_margin = \r
665  5.7</p>\r
666 \r
667 <p class="whs3">&nbsp;</p>\r
668 \r
669 <p class="whs3">aFilterMgr = gen.CreateFilterManager()</p>\r
670 \r
671 <p class="whs3">aFunctor = aFilterMgr.CreateLength2D()</p>\r
672 \r
673 <p class="whs3">&nbsp;</p>\r
674 \r
675 <p class="whs3">aPredicate = aFilterMgr.CreateMoreThan()</p>\r
676 \r
677 <p class="whs3">aPredicate.SetNumFunctor(aFunctor)</p>\r
678 \r
679 <p class="whs3">aPredicate.SetMargin(length_margin)</p>\r
680 \r
681 <p class="whs3">&nbsp;</p>\r
682 \r
683 <p class="whs3">aFilter = aFilterMgr.CreateFilter()</p>\r
684 \r
685 <p class="whs3">aFilter.SetPredicate(aPredicate)</p>\r
686 \r
687 <p class="whs3">&nbsp;</p>\r
688 \r
689 <p class="whs3">anIds = aFilter.GetElementsId(mesh)</p>\r
690 \r
691 <p class="whs3">&nbsp;</p>\r
692 \r
693 <p class="whs4"># print the result</p>\r
694 \r
695 <p class="whs3">print &quot;Criterion: \r
696  Edges length 2D &gt; &quot;, length_margin, &quot; Nb = &quot;, len(anIds)</p>\r
697 \r
698 <p class="whs3">j = 1</p>\r
699 \r
700 <p class="whs3">for i in range(len(anIds)):</p>\r
701 \r
702 <p class="whs3">&nbsp;&nbsp;if \r
703  j &gt; 20: j = 1; print &quot;&quot;</p>\r
704 \r
705 <p class="whs3">&nbsp;&nbsp;print \r
706  anIds[i],</p>\r
707 \r
708 <p class="whs3">&nbsp;&nbsp;j \r
709  = j + 1</p>\r
710 \r
711 <p class="whs3">&nbsp;&nbsp;pass</p>\r
712 \r
713 <p class="whs3">print &quot;&quot;</p>\r
714 \r
715 <p class="whs3">&nbsp;</p>\r
716 \r
717 <p class="whs4"># create a group</p>\r
718 \r
719 <p class="whs3">aGroup = mesh.CreateGroup(SMESH.FACE, \r
720  &quot;Faces with length 2D &gt; &quot; + `length_margin`)</p>\r
721 \r
722 <p class="whs3">aGroup.Add(anIds)</p>\r
723 \r
724 <p class="whs3">&nbsp;</p>\r
725 \r
726 <p class="whs3">salome.sg.updateObjBrowser(1) \r
727  </p>\r
728 \r
729 <p class="whs2">&nbsp;</p>\r
730 \r
731 <h3><a name=bookmark5>Borders at Multiconnection 2D</a></h3>\r
732 \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
737 \r
738 <p class="whs1"># For the moment smesh package doesn't provide \r
739  methods to check borders at multiconnection 2D. </p>\r
740 \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
743 \r
744 <p class="whs3">&nbsp;</p>\r
745 \r
746 <p class="whs3">import salome</p>\r
747 \r
748 <p class="whs3">import geompy</p>\r
749 \r
750 <p class="whs3">&nbsp;</p>\r
751 \r
752 <p class="whs3">import smesh</p>\r
753 \r
754 <p class="whs3">import SMESH</p>\r
755 \r
756 <p class="whs3">&nbsp;</p>\r
757 \r
758 <p class="whs4"># create a compound \r
759  of two glued boxes</p>\r
760 \r
761 <p class="whs3">box1 = geompy.MakeBox(0., \r
762  0., 0., 20., 20., 15.)</p>\r
763 \r
764 <p class="whs3">box2 = geompy.MakeTranslation(box1, \r
765  0., 20., 0)</p>\r
766 \r
767 <p class="whs3">comp = geompy.MakeCompound([box1, \r
768  box2])</p>\r
769 \r
770 <p class="whs3">box = geompy.MakeGlueFaces(comp, \r
771  0.000001)</p>\r
772 \r
773 <p class="whs3">idbox = geompy.addToStudy(box, \r
774  &quot;box&quot;)</p>\r
775 \r
776 <p class="whs3">&nbsp;</p>\r
777 \r
778 <p class="whs4"># create a mesh</p>\r
779 \r
780 <p class="whs3">tria = smesh.Mesh(box, \r
781  &quot;Box compound : 2D triangle mesh&quot;)</p>\r
782 \r
783 <p class="whs3">algo = tria.Segment()</p>\r
784 \r
785 <p class="whs3">algo.NumberOfSegments(5)</p>\r
786 \r
787 <p class="whs3">algo = tria.Triangle()</p>\r
788 \r
789 <p class="whs3">algo.MaxElementArea(20.)</p>\r
790 \r
791 <p class="whs3">tria.Compute()</p>\r
792 \r
793 <p class="whs3">&nbsp;</p>\r
794 \r
795 <p class="whs3">mesh = tria.GetMesh()</p>\r
796 \r
797 <p class="whs3">gen = smesh.smesh</p>\r
798 \r
799 <p class="whs3">&nbsp;</p>\r
800 \r
801 <p class="whs4"># Criterion : MULTI-CONNECTION \r
802  2D = 3</p>\r
803 \r
804 <p class="whs3">nb_conn = 3</p>\r
805 \r
806 <p class="whs3">&nbsp;</p>\r
807 \r
808 <p class="whs3">aFilterMgr = gen.CreateFilterManager()</p>\r
809 \r
810 <p class="whs3">aFunctor = aFilterMgr.CreateMultiConnection2D()</p>\r
811 \r
812 <p class="whs3">&nbsp;</p>\r
813 \r
814 <p class="whs3">aPredicate = aFilterMgr.CreateEqualTo()</p>\r
815 \r
816 <p class="whs3">aPredicate.SetNumFunctor(aFunctor)</p>\r
817 \r
818 <p class="whs3">aPredicate.SetMargin(nb_conn)</p>\r
819 \r
820 <p class="whs3">&nbsp;</p>\r
821 \r
822 <p class="whs3">aFilter = aFilterMgr.CreateFilter()</p>\r
823 \r
824 <p class="whs3">aFilter.SetPredicate(aPredicate)</p>\r
825 \r
826 <p class="whs3">&nbsp;</p>\r
827 \r
828 <p class="whs3">anIds = aFilter.GetElementsId(mesh)</p>\r
829 \r
830 <p class="whs3">&nbsp;</p>\r
831 \r
832 <p class="whs4"># print the result</p>\r
833 \r
834 <p class="whs3">print &quot;Criterion: \r
835  Borders at multi-connection 2D = &quot;, nb_conn, &quot; Nb = &quot;, \r
836  len(anIds)</p>\r
837 \r
838 <p class="whs3">j = 1</p>\r
839 \r
840 <p class="whs3">for i in range(len(anIds)):</p>\r
841 \r
842 <p class="whs3">&nbsp;&nbsp;if \r
843  j &gt; 20: j = 1; print &quot;&quot;</p>\r
844 \r
845 <p class="whs3">&nbsp;&nbsp;print \r
846  anIds[i],</p>\r
847 \r
848 <p class="whs3">&nbsp;&nbsp;j \r
849  = j + 1</p>\r
850 \r
851 <p class="whs3">&nbsp;&nbsp;pass</p>\r
852 \r
853 <p class="whs3">print &quot;&quot;</p>\r
854 \r
855 <p class="whs3">&nbsp;</p>\r
856 \r
857 <p class="whs4"># create a group</p>\r
858 \r
859 <p class="whs3">aGroup = mesh.CreateGroup(SMESH.FACE, \r
860  &quot;Borders at multi-connection 2D = &quot; + `nb_conn`)</p>\r
861 \r
862 <p class="whs3">aGroup.Add(anIds)</p>\r
863 \r
864 <p class="whs3">&nbsp;</p>\r
865 \r
866 <p class="whs3">salome.sg.updateObjBrowser(1) \r
867  </p>\r
868 \r
869 <p class="whs3">&nbsp;</p>\r
870 \r
871 <h3><a name=bookmark6>Area</a></h3>\r
872 \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
877 \r
878 <p class="whs1"># For the moment smesh package doesn't provide \r
879  methods to check area. </p>\r
880 \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
883 \r
884 <p class="whs2">&nbsp;</p>\r
885 \r
886 <p class="whs3">import SMESH</p>\r
887 \r
888 <p class="whs3">import SMESH_mechanic</p>\r
889 \r
890 <p class="whs3">&nbsp;</p>\r
891 \r
892 <p class="whs3">smesh &nbsp;= \r
893  SMESH_mechanic.smesh</p>\r
894 \r
895 <p class="whs3">mesh &nbsp;&nbsp;= \r
896  SMESH_mechanic.mesh</p>\r
897 \r
898 <p class="whs3">salome = SMESH_mechanic.salome</p>\r
899 \r
900 <p class="whs2">&nbsp;</p>\r
901 \r
902 <p class="whs2"># Criterion : AREA &gt; \r
903  100.</p>\r
904 \r
905 <p class="whs3">area_margin = 100.</p>\r
906 \r
907 <p class="whs3">&nbsp;</p>\r
908 \r
909 <p class="whs3">aFilterMgr = smesh.CreateFilterManager()</p>\r
910 \r
911 <p class="whs3">aFunctor = aFilterMgr.CreateArea()</p>\r
912 \r
913 <p class="whs3">&nbsp;</p>\r
914 \r
915 <p class="whs3">aPredicate = aFilterMgr.CreateMoreThan()</p>\r
916 \r
917 <p class="whs3">aPredicate.SetNumFunctor(aFunctor)</p>\r
918 \r
919 <p class="whs3">aPredicate.SetMargin(area_margin)</p>\r
920 \r
921 <p class="whs3">&nbsp;</p>\r
922 \r
923 <p class="whs3">aFilter = aFilterMgr.CreateFilter()</p>\r
924 \r
925 <p class="whs3">aFilter.SetPredicate(aPredicate)</p>\r
926 \r
927 <p class="whs3">&nbsp;</p>\r
928 \r
929 <p class="whs3">anIds = aFilter.GetElementsId(mesh)</p>\r
930 \r
931 <p class="whs2">&nbsp;</p>\r
932 \r
933 <p class="whs2"># print the result</p>\r
934 \r
935 <p class="whs3">print &quot;Criterion: \r
936  Area &gt; &quot;, area_margin, &quot; Nb = &quot;, len(anIds)</p>\r
937 \r
938 <p class="whs3">j = 1</p>\r
939 \r
940 <p class="whs3">for i in range(len(anIds)):</p>\r
941 \r
942 <p class="whs3">&nbsp;&nbsp;if \r
943  j &gt; 20: j = 1; print &quot;&quot;</p>\r
944 \r
945 <p class="whs3">&nbsp;&nbsp;print \r
946  anIds[i],</p>\r
947 \r
948 <p class="whs3">&nbsp;&nbsp;j \r
949  = j + 1</p>\r
950 \r
951 <p class="whs3">&nbsp;&nbsp;pass</p>\r
952 \r
953 <p class="whs3">print &quot;&quot;</p>\r
954 \r
955 <p class="whs3">&nbsp;</p>\r
956 \r
957 <p class="whs2"># create a group</p>\r
958 \r
959 <p class="whs3">aGroup = mesh.CreateGroup(SMESH.FACE, \r
960  &quot;Area &gt; &quot; + `area_margin`)</p>\r
961 \r
962 <p class="whs3">aGroup.Add(anIds)</p>\r
963 \r
964 <p class="whs3">&nbsp;</p>\r
965 \r
966 <p class="whs2"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
967  </p>\r
968 \r
969 <h3><a name=bookmark7>Taper</a></h3>\r
970 \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
975 \r
976 <p class="whs1"># For the moment smesh package doesn't provide \r
977  methods to check taper. </p>\r
978 \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
981 \r
982 <p class="whs3">&nbsp;</p>\r
983 \r
984 <p class="whs3">import SMESH</p>\r
985 \r
986 <p class="whs3">import SMESH_mechanic</p>\r
987 \r
988 <p class="whs3">&nbsp;</p>\r
989 \r
990 <p class="whs3">smesh &nbsp;= \r
991  SMESH_mechanic.smesh</p>\r
992 \r
993 <p class="whs3">mesh &nbsp;&nbsp;= \r
994  SMESH_mechanic.mesh</p>\r
995 \r
996 <p class="whs3">salome = SMESH_mechanic.salome</p>\r
997 \r
998 <p class="whs3">&nbsp;</p>\r
999 \r
1000 <p class="whs4"># Criterion : Taper \r
1001  &gt; 3e-20</p>\r
1002 \r
1003 <p class="whs3">taper_margin = 3e-20</p>\r
1004 \r
1005 <p class="whs3">&nbsp;</p>\r
1006 \r
1007 <p class="whs3">aFilterMgr = smesh.CreateFilterManager()</p>\r
1008 \r
1009 <p class="whs3">aFunctor = aFilterMgr.CreateTaper()</p>\r
1010 \r
1011 <p class="whs3">&nbsp;</p>\r
1012 \r
1013 <p class="whs3">aPredicate = aFilterMgr.CreateMoreThan()</p>\r
1014 \r
1015 <p class="whs3">aPredicate.SetNumFunctor(aFunctor)</p>\r
1016 \r
1017 <p class="whs3">aPredicate.SetMargin(taper_margin)</p>\r
1018 \r
1019 <p class="whs3">&nbsp;</p>\r
1020 \r
1021 <p class="whs3">aFilter = aFilterMgr.CreateFilter()</p>\r
1022 \r
1023 <p class="whs3">aFilter.SetPredicate(aPredicate)</p>\r
1024 \r
1025 <p class="whs3">&nbsp;</p>\r
1026 \r
1027 <p class="whs3">anIds = aFilter.GetElementsId(mesh)</p>\r
1028 \r
1029 <p class="whs3">&nbsp;</p>\r
1030 \r
1031 <p class="whs4"># print the result</p>\r
1032 \r
1033 <p class="whs3">print &quot;Criterion: \r
1034  Taper &gt; &quot;, taper_margin, &quot; Nb = &quot;, len(anIds)</p>\r
1035 \r
1036 <p class="whs3">j = 1</p>\r
1037 \r
1038 <p class="whs3">for i in range(len(anIds)):</p>\r
1039 \r
1040 <p class="whs3">&nbsp;&nbsp;if \r
1041  j &gt; 20: j = 1; print &quot;&quot;</p>\r
1042 \r
1043 <p class="whs3">&nbsp;&nbsp;print \r
1044  anIds[i],</p>\r
1045 \r
1046 <p class="whs3">&nbsp;&nbsp;j \r
1047  = j + 1</p>\r
1048 \r
1049 <p class="whs3">&nbsp;&nbsp;pass</p>\r
1050 \r
1051 <p class="whs3">print &quot;&quot;</p>\r
1052 \r
1053 <p class="whs3">&nbsp;</p>\r
1054 \r
1055 <p class="whs4"># create a group</p>\r
1056 \r
1057 <p class="whs3">aGroup = mesh.CreateGroup(SMESH.FACE, \r
1058  &quot;Taper &gt; &quot; + `taper_margin`)</p>\r
1059 \r
1060 <p class="whs3">aGroup.Add(anIds)</p>\r
1061 \r
1062 <p class="whs3">&nbsp;</p>\r
1063 \r
1064 <p class="whs3">salome.sg.updateObjBrowser(1) \r
1065  </p>\r
1066 \r
1067 <h3><a name=bookmark8>Aspect Ratio</a></h3>\r
1068 \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
1073 \r
1074 <p class="whs1"># For the moment smesh package doesn't provide \r
1075  methods to check aspect ratio. </p>\r
1076 \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
1079 \r
1080 <p class="whs3">&nbsp;</p>\r
1081 \r
1082 <p class="whs3">import SMESH</p>\r
1083 \r
1084 <p class="whs3">import SMESH_mechanic</p>\r
1085 \r
1086 <p class="whs3">&nbsp;</p>\r
1087 \r
1088 <p class="whs3">smesh &nbsp;= \r
1089  SMESH_mechanic.smesh</p>\r
1090 \r
1091 <p class="whs3">mesh &nbsp;&nbsp;= \r
1092  SMESH_mechanic.mesh</p>\r
1093 \r
1094 <p class="whs3">salome = SMESH_mechanic.salome</p>\r
1095 \r
1096 <p class="whs3">&nbsp;</p>\r
1097 \r
1098 <p class="whs4"># Criterion : ASPECT \r
1099  RATIO &gt; 1.8</p>\r
1100 \r
1101 <p class="whs3">ar_margin = 1.8</p>\r
1102 \r
1103 <p class="whs3">&nbsp;</p>\r
1104 \r
1105 <p class="whs3">aFilterMgr = smesh.CreateFilterManager()</p>\r
1106 \r
1107 <p class="whs3">aFunctor = aFilterMgr.CreateAspectRatio()</p>\r
1108 \r
1109 <p class="whs3">&nbsp;</p>\r
1110 \r
1111 <p class="whs3">aPredicate = aFilterMgr.CreateMoreThan()</p>\r
1112 \r
1113 <p class="whs3">aPredicate.SetNumFunctor(aFunctor)</p>\r
1114 \r
1115 <p class="whs3">aPredicate.SetMargin(ar_margin)</p>\r
1116 \r
1117 <p class="whs3">&nbsp;</p>\r
1118 \r
1119 <p class="whs3">aFilter = aFilterMgr.CreateFilter()</p>\r
1120 \r
1121 <p class="whs3">aFilter.SetPredicate(aPredicate)</p>\r
1122 \r
1123 <p class="whs3">&nbsp;</p>\r
1124 \r
1125 <p class="whs3">anIds = aFilter.GetElementsId(mesh)</p>\r
1126 \r
1127 <p class="whs3">&nbsp;</p>\r
1128 \r
1129 <p class="whs4"># print the result</p>\r
1130 \r
1131 <p class="whs3">print &quot;Criterion: \r
1132  Aspect Ratio &gt; &quot;, ar_margin, &quot; Nb = &quot;, len(anIds)</p>\r
1133 \r
1134 <p class="whs3">j = 1</p>\r
1135 \r
1136 <p class="whs3">for i in range(len(anIds)):</p>\r
1137 \r
1138 <p class="whs3">&nbsp;&nbsp;if \r
1139  j &gt; 20: j = 1; print &quot;&quot;</p>\r
1140 \r
1141 <p class="whs3">&nbsp;&nbsp;print \r
1142  anIds[i],</p>\r
1143 \r
1144 <p class="whs3">&nbsp;&nbsp;j \r
1145  = j + 1</p>\r
1146 \r
1147 <p class="whs3">&nbsp;&nbsp;pass</p>\r
1148 \r
1149 <p class="whs3">print &quot;&quot;</p>\r
1150 \r
1151 <p class="whs3">&nbsp;</p>\r
1152 \r
1153 <p class="whs4"># create a group</p>\r
1154 \r
1155 <p class="whs3">aGroup = mesh.CreateGroup(SMESH.FACE, \r
1156  &quot;Aspect Ratio &gt; &quot; + `ar_margin`)</p>\r
1157 \r
1158 <p class="whs3">aGroup.Add(anIds)</p>\r
1159 \r
1160 <p class="whs3">&nbsp;</p>\r
1161 \r
1162 <p class="whs3">salome.sg.updateObjBrowser(1) \r
1163  </p>\r
1164 \r
1165 <p class="whs3">&nbsp;</p>\r
1166 \r
1167 <h3><a name=bookmark9>Minimum Angle</a></h3>\r
1168 \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
1173 \r
1174 <p class="whs1"># For the moment smesh package doesn't provide \r
1175  methods to check minimum angle. </p>\r
1176 \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
1179 \r
1180 <p class="whs3">&nbsp;</p>\r
1181 \r
1182 <p class="whs3">import SMESH</p>\r
1183 \r
1184 <p class="whs3">import SMESH_mechanic</p>\r
1185 \r
1186 <p class="whs3">&nbsp;</p>\r
1187 \r
1188 <p class="whs3">smesh &nbsp;= \r
1189  SMESH_mechanic.smesh</p>\r
1190 \r
1191 <p class="whs3">mesh &nbsp;&nbsp;= \r
1192  SMESH_mechanic.mesh</p>\r
1193 \r
1194 <p class="whs3">salome = SMESH_mechanic.salome</p>\r
1195 \r
1196 <p class="whs3">&nbsp;</p>\r
1197 \r
1198 <p class="whs4"># Criterion : MINIMUM \r
1199  ANGLE &lt; 35.</p>\r
1200 \r
1201 <p class="whs3">min_angle = 35.</p>\r
1202 \r
1203 <p class="whs3">&nbsp;</p>\r
1204 \r
1205 <p class="whs3">aFilterMgr = smesh.CreateFilterManager()</p>\r
1206 \r
1207 <p class="whs3">aFunctor = aFilterMgr.CreateMinimumAngle()</p>\r
1208 \r
1209 <p class="whs3">&nbsp;</p>\r
1210 \r
1211 <p class="whs3">aPredicate = aFilterMgr.CreateLessThan()</p>\r
1212 \r
1213 <p class="whs3">aPredicate.SetNumFunctor(aFunctor)</p>\r
1214 \r
1215 <p class="whs3">aPredicate.SetMargin(min_angle)</p>\r
1216 \r
1217 <p class="whs3">&nbsp;</p>\r
1218 \r
1219 <p class="whs3">aFilter = aFilterMgr.CreateFilter()</p>\r
1220 \r
1221 <p class="whs3">aFilter.SetPredicate(aPredicate)</p>\r
1222 \r
1223 <p class="whs3">&nbsp;</p>\r
1224 \r
1225 <p class="whs3">anIds = aFilter.GetElementsId(mesh)</p>\r
1226 \r
1227 <p class="whs3">&nbsp;</p>\r
1228 \r
1229 <p class="whs4"># print the result</p>\r
1230 \r
1231 <p class="whs3">print &quot;Criterion: \r
1232  Minimum Angle &lt; &quot;, min_angle, &quot; Nb = &quot;, len(anIds)</p>\r
1233 \r
1234 <p class="whs3">j = 1</p>\r
1235 \r
1236 <p class="whs3">for i in range(len(anIds)):</p>\r
1237 \r
1238 <p class="whs3">&nbsp;&nbsp;if \r
1239  j &gt; 20: j = 1; print &quot;&quot;</p>\r
1240 \r
1241 <p class="whs3">&nbsp;&nbsp;print \r
1242  anIds[i],</p>\r
1243 \r
1244 <p class="whs3">&nbsp;&nbsp;j \r
1245  = j + 1</p>\r
1246 \r
1247 <p class="whs3">&nbsp;&nbsp;pass</p>\r
1248 \r
1249 <p class="whs3">print &quot;&quot;</p>\r
1250 \r
1251 <p class="whs3">&nbsp;</p>\r
1252 \r
1253 <p class="whs4"># create a group</p>\r
1254 \r
1255 <p class="whs3">aGroup = mesh.CreateGroup(SMESH.FACE, \r
1256  &quot;Minimum Angle &lt; &quot; + `min_angle`)</p>\r
1257 \r
1258 <p class="whs3">aGroup.Add(anIds)</p>\r
1259 \r
1260 <p class="whs3">&nbsp;</p>\r
1261 \r
1262 <p class="whs3">salome.sg.updateObjBrowser(1) \r
1263  </p>\r
1264 \r
1265 <p class="whs3">&nbsp;</p>\r
1266 \r
1267 <h3><a name=bookmark10>Warping</a></h3>\r
1268 \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
1273 \r
1274 <p class="whs1"># For the moment smesh package doesn't provide \r
1275  methods to check warping. </p>\r
1276 \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
1279 \r
1280 <p class="whs3">&nbsp;</p>\r
1281 \r
1282 <p class="whs3">import SMESH</p>\r
1283 \r
1284 <p class="whs3">import SMESH_mechanic</p>\r
1285 \r
1286 <p class="whs3">&nbsp;</p>\r
1287 \r
1288 <p class="whs3">smesh &nbsp;= \r
1289  SMESH_mechanic.smesh</p>\r
1290 \r
1291 <p class="whs3">mesh &nbsp;&nbsp;= \r
1292  SMESH_mechanic.mesh</p>\r
1293 \r
1294 <p class="whs3">salome = SMESH_mechanic.salome</p>\r
1295 \r
1296 <p class="whs3">&nbsp;</p>\r
1297 \r
1298 <p class="whs4"># Criterion : WARP \r
1299  ANGLE &gt; 1e-15</p>\r
1300 \r
1301 <p class="whs3">wa_margin = 1e-15</p>\r
1302 \r
1303 <p class="whs3">&nbsp;</p>\r
1304 \r
1305 <p class="whs3">aFilterMgr = smesh.CreateFilterManager()</p>\r
1306 \r
1307 <p class="whs3">aFunctor = aFilterMgr.CreateWarping()</p>\r
1308 \r
1309 <p class="whs3">&nbsp;</p>\r
1310 \r
1311 <p class="whs3">aPredicate = aFilterMgr.CreateMoreThan()</p>\r
1312 \r
1313 <p class="whs3">aPredicate.SetNumFunctor(aFunctor)</p>\r
1314 \r
1315 <p class="whs3">aPredicate.SetMargin(wa_margin)</p>\r
1316 \r
1317 <p class="whs3">&nbsp;</p>\r
1318 \r
1319 <p class="whs3">aFilter = aFilterMgr.CreateFilter()</p>\r
1320 \r
1321 <p class="whs3">aFilter.SetPredicate(aPredicate)</p>\r
1322 \r
1323 <p class="whs3">&nbsp;</p>\r
1324 \r
1325 <p class="whs3">anIds = aFilter.GetElementsId(mesh)</p>\r
1326 \r
1327 <p class="whs3">&nbsp;</p>\r
1328 \r
1329 <p class="whs4"># print the result</p>\r
1330 \r
1331 <p class="whs3">print &quot;Criterion: \r
1332  Warp &gt; &quot;, wa_margin, &quot; Nb = &quot;, len(anIds)</p>\r
1333 \r
1334 <p class="whs3">j = 1</p>\r
1335 \r
1336 <p class="whs3">for i in range(len(anIds)):</p>\r
1337 \r
1338 <p class="whs3">&nbsp;&nbsp;if \r
1339  j &gt; 20: j = 1; print &quot;&quot;</p>\r
1340 \r
1341 <p class="whs3">&nbsp;&nbsp;print \r
1342  anIds[i],</p>\r
1343 \r
1344 <p class="whs3">&nbsp;&nbsp;j \r
1345  = j + 1</p>\r
1346 \r
1347 <p class="whs3">&nbsp;&nbsp;pass</p>\r
1348 \r
1349 <p class="whs3">print &quot;&quot;</p>\r
1350 \r
1351 <p class="whs3">&nbsp;</p>\r
1352 \r
1353 <p class="whs4"># create a group</p>\r
1354 \r
1355 <p class="whs3">aGroup = mesh.CreateGroup(SMESH.FACE, \r
1356  &quot;Warp &gt; &quot; + `wa_margin`)</p>\r
1357 \r
1358 <p class="whs3">aGroup.Add(anIds)</p>\r
1359 \r
1360 <p class="whs3">&nbsp;</p>\r
1361 \r
1362 <p class="whs3">salome.sg.updateObjBrowser(1) \r
1363  </p>\r
1364 \r
1365 <p class="whs3">&nbsp;</p>\r
1366 \r
1367 <h3><a name=bookmark12>Skew</a></h3>\r
1368 \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
1373 \r
1374 <p class="whs1"># For the moment smesh package doesn't provide \r
1375  methods to check skew. </p>\r
1376 \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
1379 \r
1380 <p class="whs3">&nbsp;</p>\r
1381 \r
1382 <p class="whs3">import SMESH</p>\r
1383 \r
1384 <p class="whs3">import SMESH_mechanic</p>\r
1385 \r
1386 <p class="whs3">&nbsp;</p>\r
1387 \r
1388 <p class="whs3">smesh &nbsp;= \r
1389  SMESH_mechanic.smesh</p>\r
1390 \r
1391 <p class="whs3">mesh &nbsp;&nbsp;= \r
1392  SMESH_mechanic.mesh</p>\r
1393 \r
1394 <p class="whs3">salome = SMESH_mechanic.salome</p>\r
1395 \r
1396 <p class="whs3">&nbsp;</p>\r
1397 \r
1398 <p class="whs4"># Criterion : Skew \r
1399  &gt; 38.</p>\r
1400 \r
1401 <p class="whs3">skew_margin = 38.</p>\r
1402 \r
1403 <p class="whs3">&nbsp;</p>\r
1404 \r
1405 <p class="whs3">aFilterMgr = smesh.CreateFilterManager()</p>\r
1406 \r
1407 <p class="whs3">aFunctor = aFilterMgr.CreateSkew()</p>\r
1408 \r
1409 <p class="whs3">&nbsp;</p>\r
1410 \r
1411 <p class="whs3">aPredicate = aFilterMgr.CreateMoreThan()</p>\r
1412 \r
1413 <p class="whs3">aPredicate.SetNumFunctor(aFunctor)</p>\r
1414 \r
1415 <p class="whs3">aPredicate.SetMargin(skew_margin)</p>\r
1416 \r
1417 <p class="whs3">&nbsp;</p>\r
1418 \r
1419 <p class="whs3">aFilter = aFilterMgr.CreateFilter()</p>\r
1420 \r
1421 <p class="whs3">aFilter.SetPredicate(aPredicate)</p>\r
1422 \r
1423 <p class="whs3">&nbsp;</p>\r
1424 \r
1425 <p class="whs3">anIds = aFilter.GetElementsId(mesh)</p>\r
1426 \r
1427 <p class="whs3">&nbsp;</p>\r
1428 \r
1429 <p class="whs4"># print the result</p>\r
1430 \r
1431 <p class="whs3">print &quot;Criterion: \r
1432  Skew &gt; &quot;, skew_margin, &quot; Nb = &quot;, len(anIds)</p>\r
1433 \r
1434 <p class="whs3">j = 1</p>\r
1435 \r
1436 <p class="whs3">for i in range(len(anIds)):</p>\r
1437 \r
1438 <p class="whs3">&nbsp;&nbsp;if \r
1439  j &gt; 20: j = 1; print &quot;&quot;</p>\r
1440 \r
1441 <p class="whs3">&nbsp;&nbsp;print \r
1442  anIds[i],</p>\r
1443 \r
1444 <p class="whs3">&nbsp;&nbsp;j \r
1445  = j + 1</p>\r
1446 \r
1447 <p class="whs3">&nbsp;&nbsp;pass</p>\r
1448 \r
1449 <p class="whs3">print &quot;&quot;</p>\r
1450 \r
1451 <p class="whs3">&nbsp;</p>\r
1452 \r
1453 <p class="whs4"># create a group</p>\r
1454 \r
1455 <p class="whs3">aGroup = mesh.CreateGroup(SMESH.FACE, \r
1456  &quot;Skew &gt; &quot; + `skew_margin`)</p>\r
1457 \r
1458 <p class="whs3">aGroup.Add(anIds)</p>\r
1459 \r
1460 <p class="whs3">&nbsp;</p>\r
1461 \r
1462 <p class="whs3">salome.sg.updateObjBrowser(1) \r
1463  </p>\r
1464 \r
1465 <p class="whs3">&nbsp;</p>\r
1466 \r
1467 <h3><a name=bookmark11>Aspect Ratio 3D</a></h3>\r
1468 \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
1473 \r
1474 <p class="whs1"># For the moment smesh package doesn't provide \r
1475  methods to check aspect ratio 3D. </p>\r
1476 \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
1479 \r
1480 <p class="whs3">&nbsp;</p>\r
1481 \r
1482 <p class="whs3">import SMESH</p>\r
1483 \r
1484 <p class="whs3">import SMESH_mechanic_tetra</p>\r
1485 \r
1486 <p class="whs3">&nbsp;</p>\r
1487 \r
1488 <p class="whs3">smesh &nbsp;= \r
1489  SMESH_mechanic_tetra.smesh</p>\r
1490 \r
1491 <p class="whs3">mesh &nbsp;&nbsp;= \r
1492  SMESH_mechanic_tetra.mesh</p>\r
1493 \r
1494 <p class="whs3">salome = SMESH_mechanic_tetra.salome</p>\r
1495 \r
1496 <p class="whs3">&nbsp;</p>\r
1497 \r
1498 <p class="whs4"># Criterion : ASPECT \r
1499  RATIO 3D &gt; 4.5</p>\r
1500 \r
1501 <p class="whs3">ar_margin = 4.5</p>\r
1502 \r
1503 <p class="whs3">&nbsp;</p>\r
1504 \r
1505 <p class="whs3">aFilterMgr = smesh.CreateFilterManager()</p>\r
1506 \r
1507 <p class="whs3">aFunctor = aFilterMgr.CreateAspectRatio3D()</p>\r
1508 \r
1509 <p class="whs3">&nbsp;</p>\r
1510 \r
1511 <p class="whs3">aPredicate = aFilterMgr.CreateMoreThan()</p>\r
1512 \r
1513 <p class="whs3">aPredicate.SetNumFunctor(aFunctor)</p>\r
1514 \r
1515 <p class="whs3">aPredicate.SetMargin(ar_margin)</p>\r
1516 \r
1517 <p class="whs3">&nbsp;</p>\r
1518 \r
1519 <p class="whs3">aFilter = aFilterMgr.CreateFilter()</p>\r
1520 \r
1521 <p class="whs3">aFilter.SetPredicate(aPredicate)</p>\r
1522 \r
1523 <p class="whs3">&nbsp;</p>\r
1524 \r
1525 <p class="whs3">anIds = aFilter.GetElementsId(mesh)</p>\r
1526 \r
1527 <p class="whs3">&nbsp;</p>\r
1528 \r
1529 <p class="whs4"># print the result</p>\r
1530 \r
1531 <p class="whs3">print &quot;Criterion: \r
1532  Aspect Ratio 3D &gt; &quot;, ar_margin, &quot; Nb = &quot;, len(anIds)</p>\r
1533 \r
1534 <p class="whs3">j = 1</p>\r
1535 \r
1536 <p class="whs3">for i in range(len(anIds)):</p>\r
1537 \r
1538 <p class="whs3">&nbsp;&nbsp;if \r
1539  j &gt; 20: j = 1; print &quot;&quot;</p>\r
1540 \r
1541 <p class="whs3">&nbsp;&nbsp;print \r
1542  anIds[i],</p>\r
1543 \r
1544 <p class="whs3">&nbsp;&nbsp;j \r
1545  = j + 1</p>\r
1546 \r
1547 <p class="whs3">&nbsp;&nbsp;pass</p>\r
1548 \r
1549 <p class="whs3">print &quot;&quot;</p>\r
1550 \r
1551 <p class="whs3">&nbsp;</p>\r
1552 \r
1553 <p class="whs4"># create a group</p>\r
1554 \r
1555 <p class="whs3">aGroup = mesh.CreateGroup(SMESH.VOLUME, \r
1556  &quot;Aspect Ratio 3D &gt; &quot; + `ar_margin`)</p>\r
1557 \r
1558 <p class="whs3">aGroup.Add(anIds)</p>\r
1559 \r
1560 <p class="whs3">&nbsp;</p>\r
1561 \r
1562 <p class="whs3">salome.sg.updateObjBrowser(1) \r
1563  </p>\r
1564 \r
1565 <h3><a name=Volume>Volume</a></h3>\r
1566 \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
1571 \r
1572 <p class="whs1"># For the moment smesh package doesn't provide \r
1573  methods to check volume. </p>\r
1574 \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
1577 \r
1578 <p class="whs2">&nbsp;</p>\r
1579 \r
1580 <p class="whs3">import SMESH</p>\r
1581 \r
1582 <p class="whs3">import SMESH_mechanic_tetra</p>\r
1583 \r
1584 <p class="whs3">&nbsp;</p>\r
1585 \r
1586 <p class="whs3">smesh &nbsp;= \r
1587  SMESH_mechanic_tetra.smesh</p>\r
1588 \r
1589 <p class="whs3">mesh &nbsp;&nbsp;= \r
1590  SMESH_mechanic_tetra.mesh</p>\r
1591 \r
1592 <p class="whs3">salome = SMESH_mechanic_tetra.salome</p>\r
1593 \r
1594 <p class="whs2">&nbsp;</p>\r
1595 \r
1596 <p class="whs2"># Criterion : VOLUME &lt; \r
1597  7.</p>\r
1598 \r
1599 <p class="whs3">volume_margin = \r
1600  7.</p>\r
1601 \r
1602 <p class="whs3">&nbsp;</p>\r
1603 \r
1604 <p class="whs3">aFilterMgr = smesh.CreateFilterManager()</p>\r
1605 \r
1606 <p class="whs3">aFunctor = aFilterMgr.CreateVolume3D()</p>\r
1607 \r
1608 <p class="whs3">&nbsp;</p>\r
1609 \r
1610 <p class="whs3">aPredicate = aFilterMgr.CreateLessThan()</p>\r
1611 \r
1612 <p class="whs3">aPredicate.SetNumFunctor(aFunctor)</p>\r
1613 \r
1614 <p class="whs3">aPredicate.SetMargin(volume_margin)</p>\r
1615 \r
1616 <p class="whs3">&nbsp;</p>\r
1617 \r
1618 <p class="whs3">aFilter = aFilterMgr.CreateFilter()</p>\r
1619 \r
1620 <p class="whs3">aFilter.SetPredicate(aPredicate)</p>\r
1621 \r
1622 <p class="whs3">&nbsp;</p>\r
1623 \r
1624 <p class="whs3">anIds = aFilter.GetElementsId(mesh)</p>\r
1625 \r
1626 <p class="whs2">&nbsp;</p>\r
1627 \r
1628 <p class="whs2"># print the result</p>\r
1629 \r
1630 <p class="whs3">print &quot;&quot;</p>\r
1631 \r
1632 <p class="whs3">print &quot;Criterion: \r
1633  Volume &lt; &quot;, volume_margin, &quot; Nb = &quot;, len(anIds)</p>\r
1634 \r
1635 <p class="whs3">j = 1</p>\r
1636 \r
1637 <p class="whs3">for i in range(len(anIds)):</p>\r
1638 \r
1639 <p class="whs3">&nbsp;&nbsp;if \r
1640  j &gt; 20: j = 1; print &quot;&quot;</p>\r
1641 \r
1642 <p class="whs3">&nbsp;&nbsp;print \r
1643  anIds[i],</p>\r
1644 \r
1645 <p class="whs3">&nbsp;&nbsp;j \r
1646  = j + 1</p>\r
1647 \r
1648 <p class="whs3">&nbsp;&nbsp;pass</p>\r
1649 \r
1650 <p class="whs3">print &quot;&quot;</p>\r
1651 \r
1652 <p class="whs2">&nbsp;</p>\r
1653 \r
1654 <p class="whs2"># create a group</p>\r
1655 \r
1656 <p class="whs3">aGroup = mesh.CreateGroup(SMESH.VOLUME, \r
1657  &quot;Volume &lt; &quot; + `volume_margin`)</p>\r
1658 \r
1659 <p class="whs3">aGroup.Add(anIds)</p>\r
1660 \r
1661 <p class="whs3">&nbsp;</p>\r
1662 \r
1663 <p class="whs2"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
1664  </p>\r
1665 \r
1666 <script type="text/javascript" language="javascript1.2">\r
1667 <!--\r
1668 if (window.writeIntopicBar)\r
1669         writeIntopicBar(0);\r
1670 //-->\r
1671 </script>\r
1672 </body>\r
1673 </html>\r