Salome HOME
PAL12557: SMESH Documentation for scripts is not up to date.
[modules/smesh.git] / doc / salome / gui / SMESH / constructing_meshes.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>Constructing Meshes</title>\r
7 <meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
8 <meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com"><style type="text/css">\r
9 <!--\r
10 p.whs1 { margin-top:0pt; margin-bottom:0pt; }\r
11 p.whs2 { margin-top:0pt; margin-bottom:0pt; font-family:'Lucida Console' , monospace; }\r
12 p.whs3 { margin-top:0pt; margin-bottom:0pt; font-family:'Times New Roman' , serif; }\r
13 p.whs4 { font-family:'Lucida Console' , monospace; margin-top:0px; margin-bottom:0px; }\r
14 p.whs5 { margin-top:0px; margin-bottom:0px; font-family:'Times New Roman' , serif; }\r
15 p.whs6 { margin-top:0px; margin-bottom:0px; }\r
16 p.whs7 { margin-top:0px; margin-bottom:0px; font-family:'Lucida Console' , monospace; }\r
17 -->\r
18 </style><script type="text/javascript" language="JavaScript">\r
19 <!--\r
20 if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
21 {\r
22   var strNSS = "<style type='text/css'>";\r
23   strNSS += "p.whs1 {margin-top:1pt;margin-bottom:1pt; }";\r
24   strNSS += "p.whs2 {margin-top:1pt;margin-bottom:1pt; }";\r
25   strNSS += "p.whs3 {margin-top:1pt;margin-bottom:1pt; }";\r
26   strNSS += "p.whs4 {margin-top:1pt;margin-bottom:1pt; }";\r
27   strNSS += "p.whs5 {margin-top:1pt;margin-bottom:1pt; }";\r
28   strNSS += "p.whs6 {margin-top:1pt;margin-bottom:1pt; }";\r
29   strNSS += "p.whs7 {margin-top:1pt;margin-bottom:1pt; }";\r
30   strNSS +="</style>";\r
31   document.write(strNSS);\r
32 }\r
33 //-->\r
34 </script>\r
35 <script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
36 <!--\r
37 function reDo() {\r
38   if (innerWidth != origWidth || innerHeight != origHeight)\r
39      location.reload();\r
40 }\r
41 if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
42         origWidth = innerWidth;\r
43         origHeight = innerHeight;\r
44         onresize = reDo;\r
45 }\r
46 onerror = null; \r
47 //-->\r
48 </script>\r
49 <style type="text/css">\r
50 <!--\r
51 div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
52 p.WebHelpNavBar { text-align:right; }\r
53 -->\r
54 </style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
55 <script type="text/javascript" language="javascript" src="whver.js"></script>\r
56 <script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
57 <script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
58 <script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
59 <script type="text/javascript" language="javascript1.2">\r
60 <!--\r
61 if (window.gbWhTopic)\r
62 {\r
63         if (window.setRelStartPage)\r
64         {\r
65         addTocInfo("MESH module\nTUI Scripts\nCreating Meshes");\r
66 addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
67 addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
68 \r
69         }\r
70 \r
71 \r
72         if (window.setRelStartPage)\r
73         {\r
74         setRelStartPage("index.htm");\r
75 \r
76                 autoSync(1);\r
77                 sendSyncInfo();\r
78                 sendAveInfoOut();\r
79         }\r
80 \r
81 }\r
82 else\r
83         if (window.gbIE4)\r
84                 document.location.reload();\r
85 //-->\r
86 </script>\r
87 </head>\r
88 <body><script type="text/javascript" language="javascript1.2">\r
89 <!--\r
90 if (window.writeIntopicBar)\r
91         writeIntopicBar(4);\r
92 //-->\r
93 </script>\r
94 <h1>Creating Meshes</h1>\r
95 \r
96 <p class="whs1">First of all see <a href="smesh_py_introduction.htm">Example \r
97  of 3d mesh generation</a>, which is an example of good python script style \r
98  for Mesh module. </p>\r
99 \r
100 <p class="whs1">Other examples of python \r
101  scripts will be also updated soon to use smesh package instead of direct \r
102  usage of idl interface. </p>\r
103 \r
104 <h3><a name=bookmark>Construction of a Mesh</a></h3>\r
105 \r
106 <p class="whs2"><span style="font-family: 'Lucida Console', monospace;">import \r
107  geompy</span></p>\r
108 \r
109 <p class="whs2">import smesh</p>\r
110 \r
111 <p class="whs2">&nbsp;</p>\r
112 \r
113 <p class="whs3"># create a box</p>\r
114 \r
115 <p class="whs2">box = geompy.MakeBox(0., \r
116  0., 0., 100., 200., 300.)</p>\r
117 \r
118 <p class="whs2">idbox = geompy.addToStudy(box, \r
119  &quot;box&quot;)</p>\r
120 \r
121 <p class="whs2">&nbsp;</p>\r
122 \r
123 <p class="whs3"># create a mesh</p>\r
124 \r
125 <p class="whs2">tetra = smesh.Mesh(box, \r
126  &quot;MeshBox&quot;)</p>\r
127 \r
128 <p class="whs2">&nbsp;</p>\r
129 \r
130 <p class="whs2">algo1D = tetra.Segment()</p>\r
131 \r
132 <p class="whs2">algo1D.NumberOfSegments(7)</p>\r
133 \r
134 <p class="whs2">&nbsp;</p>\r
135 \r
136 <p class="whs2">algo2D = tetra.Triangle()</p>\r
137 \r
138 <p class="whs2">algo2D.MaxElementArea(800.)</p>\r
139 \r
140 <p class="whs2">&nbsp;</p>\r
141 \r
142 <p class="whs2">algo3D = tetra.Tetrahedron(smesh.NETGEN)</p>\r
143 \r
144 <p class="whs2">algo3D.MaxElementVolume(900.)</p>\r
145 \r
146 <p class="whs2">&nbsp;</p>\r
147 \r
148 <p class="whs3"># compute the mesh</p>\r
149 \r
150 <p class="whs2">ret = tetra.Compute()</p>\r
151 \r
152 <p class="whs2">if ret == 0:</p>\r
153 \r
154 <p class="whs2">&nbsp;&nbsp;&nbsp;&nbsp;print \r
155  &quot;problem when computing the mesh&quot;</p>\r
156 \r
157 <p class="whs2">else:</p>\r
158 \r
159 <p class="whs2">&nbsp;&nbsp;&nbsp;&nbsp;print \r
160  &quot;mesh computed&quot;</p>\r
161 \r
162 <p class="whs2">&nbsp;&nbsp;&nbsp;&nbsp;pass \r
163  </p>\r
164 \r
165 <p class="whs2">&nbsp;</p>\r
166 \r
167 <p class="whs2">&nbsp;</p>\r
168 \r
169 <h3><a name=bookmark1>Construction of a Submesh</a></h3>\r
170 \r
171 <p class="whs4"><span style="font-family: 'Lucida Console', monospace;">from \r
172  geompy import *</span></p>\r
173 \r
174 <p class="whs4">import smesh</p>\r
175 \r
176 <p class="whs4">&nbsp;</p>\r
177 \r
178 <p class="whs5"># create a box</p>\r
179 \r
180 <p class="whs4">box = MakeBoxDXDYDZ(10., 10., 10.)</p>\r
181 \r
182 <p class="whs4">addToStudy(box, &quot;Box&quot;)</p>\r
183 \r
184 <p class="whs4">&nbsp;</p>\r
185 \r
186 <p class="whs5"># select one edge of \r
187  the box for definition of a local hypothesis</p>\r
188 \r
189 <p class="whs4">p5 = MakeVertex(5., 0., 0.)</p>\r
190 \r
191 <p class="whs4">EdgeX = GetEdgeNearPoint(box, p5)</p>\r
192 \r
193 <p class="whs4">addToStudyInFather(box, EdgeX, &quot;Edge \r
194  [0,0,0 - 10,0,0]&quot;)</p>\r
195 \r
196 <p class="whs4">&nbsp;</p>\r
197 \r
198 <p class="whs5"># create a hexahedral \r
199  mesh on the box</p>\r
200 \r
201 <p class="whs4">quadra = smesh.Mesh(box, &quot;Box : quadrangle \r
202  2D mesh&quot;)</p>\r
203 \r
204 <p class="whs4">&nbsp;</p>\r
205 \r
206 <p class="whs5"># create a regular \r
207  1D algorithm for the faces</p>\r
208 \r
209 <p class="whs4">algo1D = quadra.Segment()</p>\r
210 \r
211 <p class="whs4">&nbsp;</p>\r
212 \r
213 <p class="whs5"># define &quot;NumberOfSegments&quot; \r
214  hypothesis to cut</p>\r
215 \r
216 <p class="whs5"># all the edges in \r
217  a fixed number of segments</p>\r
218 \r
219 <p class="whs4">algo1D.NumberOfSegments(4)</p>\r
220 \r
221 <p class="whs4">&nbsp;</p>\r
222 \r
223 <p class="whs5"># create a quadrangle \r
224  2D algorithm for the faces</p>\r
225 \r
226 <p class="whs4">quadra.Quadrangle()</p>\r
227 \r
228 <p class="whs4">&nbsp;</p>\r
229 \r
230 <p class="whs5"># construct a submesh \r
231  on the edge with a local hypothesis</p>\r
232 \r
233 <p class="whs4">algo_local = quadra.Segment(EdgeX)</p>\r
234 \r
235 <p class="whs4">&nbsp;</p>\r
236 \r
237 <p class="whs5"># define &quot;Arithmetic1D&quot; \r
238  hypothesis to cut the edge<span style="margin-top: 0px;\r
239                                                                                 margin-bottom: 0px;\r
240                                                                                 font-family: 'Times New Roman', serif;"> \r
241  in several segments with increasing arithmetic length</span></p>\r
242 \r
243 <p class="whs4">algo_local.Arithmetic1D(1, 4)</p>\r
244 \r
245 <p class="whs4">&nbsp;</p>\r
246 \r
247 <p class="whs5"># define &quot;Propagation&quot; \r
248  hypothesis that propagates all other hypotheses</p>\r
249 \r
250 <p class="whs5"># on all edges of the \r
251  opposite side in case of quadrangular faces</p>\r
252 \r
253 <p class="whs4">algo_local.Propagation()</p>\r
254 \r
255 <p class="whs4">&nbsp;</p>\r
256 \r
257 <p class="whs5"># compute the mesh</p>\r
258 \r
259 <p class="whs4">quadra.Compute() </p>\r
260 \r
261 <p class="whs4">&nbsp;</p>\r
262 \r
263 <h3><a name=bookmark2>Editing of a mesh</a></h3>\r
264 \r
265 <p class="whs4"><span style="font-family: 'Lucida Console', monospace;">import \r
266  geompy</span></p>\r
267 \r
268 <p class="whs4">import smesh</p>\r
269 \r
270 <p class="whs4">&nbsp;</p>\r
271 \r
272 <p class="whs4">def PrintMeshInfo(theMesh):</p>\r
273 \r
274 <p class="whs4">&nbsp;&nbsp;&nbsp;&nbsp;aMesh \r
275  = theMesh.GetMesh()</p>\r
276 \r
277 <p class="whs4">&nbsp;&nbsp;&nbsp;&nbsp;print \r
278  &quot;Information about mesh:&quot;</p>\r
279 \r
280 <p class="whs4">&nbsp;&nbsp;&nbsp;&nbsp;print \r
281  &quot;Number of nodes &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: \r
282  &quot;, aMesh.NbNodes()</p>\r
283 \r
284 <p class="whs4">&nbsp;&nbsp;&nbsp;&nbsp;print \r
285  &quot;Number of edges &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: \r
286  &quot;, aMesh.NbEdges()</p>\r
287 \r
288 <p class="whs4">&nbsp;&nbsp;&nbsp;&nbsp;print \r
289  &quot;Number of faces &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: \r
290  &quot;, aMesh.NbFaces()</p>\r
291 \r
292 <p class="whs4">&nbsp;&nbsp;&nbsp;&nbsp;print \r
293  &quot;Number of volumes &nbsp;&nbsp;&nbsp;&nbsp;: \r
294  &quot;, aMesh.NbVolumes()</p>\r
295 \r
296 <p class="whs4">&nbsp;&nbsp;&nbsp;&nbsp;pass</p>\r
297 \r
298 <p class="whs4">&nbsp;</p>\r
299 \r
300 <p class="whs5"># create a box</p>\r
301 \r
302 <p class="whs4">box = geompy.MakeBox(0., 0., 0., 20., \r
303  20., 20.)</p>\r
304 \r
305 <p class="whs4">geompy.addToStudy(box, &quot;box&quot;)</p>\r
306 \r
307 <p class="whs4">&nbsp;</p>\r
308 \r
309 <p class="whs5"># select one edge of \r
310  the box for definition of a local hypothesis</p>\r
311 \r
312 <p class="whs4">subShapeList = geompy.SubShapeAll(box, \r
313  geompy.ShapeType[&quot;EDGE&quot;])</p>\r
314 \r
315 <p class="whs4">edge = subShapeList[0]</p>\r
316 \r
317 <p class="whs4">name = geompy.SubShapeName(edge, box)</p>\r
318 \r
319 <p class="whs4">geompy.addToStudyInFather(box, edge, name)</p>\r
320 \r
321 <p class="whs4">&nbsp;</p>\r
322 \r
323 <p class="whs5"># create a mesh</p>\r
324 \r
325 <p class="whs4">tria = smesh.Mesh(box, &quot;Mesh 2D&quot;)</p>\r
326 \r
327 <p class="whs4">algo1D = tria.Segment()</p>\r
328 \r
329 <p class="whs4">hyp1 = algo1D.NumberOfSegments(3)</p>\r
330 \r
331 <p class="whs4">algo2D = tria.Triangle()</p>\r
332 \r
333 <p class="whs4">hyp2 = algo2D.MaxElementArea(10.)</p>\r
334 \r
335 <p class="whs4">&nbsp;</p>\r
336 \r
337 <p class="whs5"># create a sub-mesh</p>\r
338 \r
339 <p class="whs4">algo_local = tria.Segment(edge)</p>\r
340 \r
341 <p class="whs4">hyp3 = algo_local.Arithmetic1D(1, 6)</p>\r
342 \r
343 <p class="whs4">hyp4 = algo_local.Propagation()</p>\r
344 \r
345 <p class="whs4">&nbsp;</p>\r
346 \r
347 <p class="whs5"># compute the mesh</p>\r
348 \r
349 <p class="whs4">tria.Compute()</p>\r
350 \r
351 <p class="whs4">PrintMeshInfo(tria)</p>\r
352 \r
353 <p class="whs4">&nbsp;</p>\r
354 \r
355 <p class="whs5"># remove a local hypothesis</p>\r
356 \r
357 <p class="whs4">mesh = tria.GetMesh()</p>\r
358 \r
359 <p class="whs4">mesh.RemoveHypothesis(edge, hyp4)</p>\r
360 \r
361 <p class="whs4">&nbsp;</p>\r
362 \r
363 <p class="whs5"># compute the mesh</p>\r
364 \r
365 <p class="whs4">tria.Compute()</p>\r
366 \r
367 <p class="whs4">PrintMeshInfo(tria)</p>\r
368 \r
369 <p class="whs4">&nbsp;</p>\r
370 \r
371 <p class="whs5"># change the value \r
372  of the 2D hypothesis</p>\r
373 \r
374 <p class="whs4">hyp2.SetMaxElementArea(2.)</p>\r
375 \r
376 <p class="whs4">&nbsp;</p>\r
377 \r
378 <p class="whs5"># compute the mesh</p>\r
379 \r
380 <p class="whs4">tria.Compute()</p>\r
381 \r
382 <p class="whs4">PrintMeshInfo(tria) </p>\r
383 \r
384 <p class="whs6">&nbsp;</p>\r
385 \r
386 <h3><a name=bookmark3>Export of a Mesh</a></h3>\r
387 \r
388 <p class="whs7">import geompy</p>\r
389 \r
390 <p class="whs7">import smesh</p>\r
391 \r
392 <p class="whs6">&nbsp;</p>\r
393 \r
394 <p class="whs6"># create a box</p>\r
395 \r
396 <p class="whs7">box = geompy.MakeBox(0., \r
397  0., 0., 100., 200., 300.)</p>\r
398 \r
399 <p class="whs7">idbox = geompy.addToStudy(box, \r
400  &quot;box&quot;)</p>\r
401 \r
402 <p class="whs6">&nbsp;</p>\r
403 \r
404 <p class="whs6"># create a mesh</p>\r
405 \r
406 <p class="whs7">tetra = smesh.Mesh(box, \r
407  &quot;MeshBox&quot;)</p>\r
408 \r
409 <p class="whs6">&nbsp;</p>\r
410 \r
411 <p class="whs7">algo1D = tetra.Segment()</p>\r
412 \r
413 <p class="whs7">algo1D.NumberOfSegments(7)</p>\r
414 \r
415 <p class="whs7">&nbsp;</p>\r
416 \r
417 <p class="whs7">algo2D = tetra.Triangle()</p>\r
418 \r
419 <p class="whs7">algo2D.MaxElementArea(800.)</p>\r
420 \r
421 <p class="whs7">&nbsp;</p>\r
422 \r
423 <p class="whs7">algo3D = tetra.Tetrahedron(smesh.NETGEN)</p>\r
424 \r
425 <p class="whs7">algo3D.MaxElementVolume(900.)</p>\r
426 \r
427 <p class="whs6">&nbsp;</p>\r
428 \r
429 <p class="whs6"># compute the mesh</p>\r
430 \r
431 <p class="whs7">tetra.Compute()</p>\r
432 \r
433 <p class="whs6">&nbsp;</p>\r
434 \r
435 <p class="whs6"># export the mesh in a \r
436  MED file</p>\r
437 \r
438 <p class="whs7">tetra.ExportMED(&quot;/tmp/meshMED.med&quot;, \r
439  0) </p>\r
440 \r
441 <script type="text/javascript" language="javascript1.2">\r
442 <!--\r
443 if (window.writeIntopicBar)\r
444         writeIntopicBar(0);\r
445 //-->\r
446 </script>\r
447 </body>\r
448 </html>\r