Salome HOME
PAL12557: Documentation for scripts is not up to date.
[modules/geom.git] / doc / salome / gui / GEOM / measurement_tools.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>Measurement Tools</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">\r
9 <link rel="stylesheet" href="default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
10 <!--\r
11 if (navigator.appName !="Netscape")\r
12 {   document.write("<link rel='stylesheet' href='default.css'>");}\r
13 //-->\r
14 </script>\r
15 <style type="text/css">\r
16 <!--\r
17 p.whs1 { font-family:'Lucida Console' , monospace; }\r
18 p.whs2 { font-family:'Times New Roman' , serif; }\r
19 -->\r
20 </style><script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
21 <!--\r
22 function reDo() {\r
23   if (innerWidth != origWidth || innerHeight != origHeight)\r
24      location.reload();\r
25 }\r
26 if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
27         origWidth = innerWidth;\r
28         origHeight = innerHeight;\r
29         onresize = reDo;\r
30 }\r
31 onerror = null; \r
32 //-->\r
33 </script>\r
34 <style type="text/css">\r
35 <!--\r
36 div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
37 p.WebHelpNavBar { text-align:right; }\r
38 -->\r
39 </style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
40 <script type="text/javascript" language="javascript" src="whver.js"></script>\r
41 <script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
42 <script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
43 <script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
44 <script type="text/javascript" language="javascript1.2">\r
45 <!--\r
46 if (window.gbWhTopic)\r
47 {\r
48         if (window.setRelStartPage)\r
49         {\r
50         addTocInfo("Geometry module\nTUI Scripts\nMeasurement Tools");\r
51 addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
52 addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
53 \r
54         }\r
55 \r
56 \r
57         if (window.setRelStartPage)\r
58         {\r
59         setRelStartPage("index.htm");\r
60 \r
61                 autoSync(1);\r
62                 sendSyncInfo();\r
63                 sendAveInfoOut();\r
64         }\r
65 \r
66 }\r
67 else\r
68         if (window.gbIE4)\r
69                 document.location.reload();\r
70 //-->\r
71 </script>\r
72 </head>\r
73 <body><script type="text/javascript" language="javascript1.2">\r
74 <!--\r
75 if (window.writeIntopicBar)\r
76         writeIntopicBar(4);\r
77 //-->\r
78 </script>\r
79 <h1>Measurement Tools</h1>\r
80 \r
81 <h3>Point Coordinates</h3>\r
82 \r
83 <p class="whs1">import math</p>\r
84 \r
85 <p class="whs1">import geompy</p>\r
86 \r
87 <p class="whs1">&nbsp;</p>\r
88 \r
89 <p class="whs2"># create a point</p>\r
90 \r
91 <p class="whs1">point = geompy.MakeVertex(15., \r
92  23., 80.)</p>\r
93 \r
94 <p class="whs1">&nbsp;</p>\r
95 \r
96 <p class="whs2"># get the coordinates \r
97  of the point and check its values</p>\r
98 \r
99 <p class="whs1">coords = geompy.PointCoordinates(point)</p>\r
100 \r
101 <p class="whs1">&nbsp;</p>\r
102 \r
103 <p class="whs2"># check the obtained \r
104  coordinate values </p>\r
105 \r
106 <p class="whs1">tolerance = 1.e-07</p>\r
107 \r
108 <p class="whs1">def IsEqual(val1, \r
109  val2): return (math.fabs(val1 - val2) &lt; tolerance)</p>\r
110 \r
111 <p class="whs1">&nbsp;</p>\r
112 \r
113 <p class="whs1">if IsEqual(coords[0], \r
114  15.) and IsEqual(coords[1], 23.) and IsEqual(coords[2], 80.):</p>\r
115 \r
116 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
117  &quot;All values are OK.&quot;</p>\r
118 \r
119 <p class="whs1">else :</p>\r
120 \r
121 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
122  &quot;Coordinates of point must be (15, 23, 80), but returned (&quot;,</p>\r
123 \r
124 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
125  coords[0], &quot;, &quot;, coords[1], &quot;, &quot;, coords[2], &quot;)&quot;</p>\r
126 \r
127 <p><span style="font-family: 'Lucida Console', monospace;">&nbsp;&nbsp;&nbsp;&nbsp;pass</span> \r
128  </p>\r
129 \r
130 <h3>Basic Properties</h3>\r
131 \r
132 <p class="whs1">import geompy</p>\r
133 \r
134 <p class="whs1">import math</p>\r
135 \r
136 <p>&nbsp;</p>\r
137 \r
138 <p># create a box</p>\r
139 \r
140 <p class="whs1">box = geompy.MakeBoxDXDYDZ(100,30,100)</p>\r
141 \r
142 <p class="whs1">props = geompy.BasicProperties(box)</p>\r
143 \r
144 <p class="whs1">print &quot;\nBox \r
145  100x30x100 Basic Properties:&quot;</p>\r
146 \r
147 <p class="whs1">print &quot; Wires \r
148  length: &quot;, props[0]</p>\r
149 \r
150 <p class="whs1">print &quot; Surface \r
151  area: &quot;, props[1]</p>\r
152 \r
153 <p class="whs1">print &quot; Volume \r
154  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: \r
155  &quot;, props[2]</p>\r
156 \r
157 <p class="whs1">length = math.sqrt((props[0] \r
158  - 1840)*(props[0] - 1840))</p>\r
159 \r
160 <p class="whs1">area = math.sqrt((props[1] \r
161  - 32000)*(props[1] - 32000))</p>\r
162 \r
163 <p class="whs1">volume = math.sqrt((props[2] \r
164  - 300000)*(props[2] - 300000))</p>\r
165 \r
166 <p class="whs1">if length &gt; 1e-7 \r
167  or area &gt; 1e-7 or volume &gt; 1e-7:</p>\r
168 \r
169 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
170  &quot;While must be:&quot;</p>\r
171 \r
172 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
173  &quot; Wires length: &quot;, 1840</p>\r
174 \r
175 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
176  &quot; Surface area: &quot;, 32000</p>\r
177 \r
178 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
179  &quot; Volume &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: \r
180  &quot;, 300000.</p>\r
181 \r
182 <h3>Center of masses</h3>\r
183 \r
184 <p class="whs1">import geompy</p>\r
185 \r
186 <p class="whs1">import math</p>\r
187 \r
188 <p class="whs1">&nbsp;</p>\r
189 \r
190 <p class="whs2"># create a box</p>\r
191 \r
192 <p class="whs1">box = geompy.MakeBoxDXDYDZ(100,30,100)</p>\r
193 \r
194 <p class="whs1">cm = geompy.MakeCDG(box)</p>\r
195 \r
196 <p class="whs1">if cm is None:</p>\r
197 \r
198 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;raise \r
199  RuntimeError, &quot;MakeCDG(box) failed&quot;</p>\r
200 \r
201 <p class="whs1">else:</p>\r
202 \r
203 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
204  &quot;\nCentre of gravity of box has been successfully obtained:&quot;</p>\r
205 \r
206 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;coords \r
207  = geompy.PointCoordinates(cm)</p>\r
208 \r
209 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
210  &quot;(&quot;, coords[0], &quot;, &quot;, coords[1], &quot;, &quot;, coords[2], \r
211  &quot;)&quot;</p>\r
212 \r
213 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;dx \r
214  = math.sqrt((coords[0] - 50)*(coords[0] - 50))</p>\r
215 \r
216 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;dy \r
217  = math.sqrt((coords[1] - 15)*(coords[1] - 15))</p>\r
218 \r
219 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;dz \r
220  = math.sqrt((coords[2] - 50)*(coords[2] - 50))</p>\r
221 \r
222 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;if \r
223  dx &gt; 1e-7 or dy &gt; 1e-7 or dz &gt; 1e-7:</p>\r
224 \r
225 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print \r
226  &quot;But must be (50, 15, 50)&quot; </p>\r
227 \r
228 <h3>Inertia</h3>\r
229 \r
230 <p class="whs1">import geompy</p>\r
231 \r
232 <p class="whs1">import math</p>\r
233 \r
234 <p class="whs1">&nbsp;</p>\r
235 \r
236 <p class="whs2"># create a box</p>\r
237 \r
238 <p class="whs1">box = geompy.MakeBoxDXDYDZ(100,30,100)</p>\r
239 \r
240 <p class="whs1">In = geompy.Inertia(box)</p>\r
241 \r
242 <p class="whs1">print &quot;\nInertia \r
243  matrix of box 100x30x100:&quot;</p>\r
244 \r
245 <p class="whs1">print &quot; (&quot;, \r
246  In[0], &quot;, &quot;, In[1], &quot;, &quot;, In[2], &quot;)&quot;</p>\r
247 \r
248 <p class="whs1">print &quot; (&quot;, \r
249  In[3], &quot;, &quot;, In[4], &quot;, &quot;, In[5], &quot;)&quot;</p>\r
250 \r
251 <p class="whs1">print &quot; (&quot;, \r
252  In[6], &quot;, &quot;, In[7], &quot;, &quot;, In[8], &quot;)&quot;</p>\r
253 \r
254 <p class="whs1">print &quot;Main moments \r
255  of inertia of box 100x30x100:&quot;</p>\r
256 \r
257 <p class="whs1">print &quot; Ix = \r
258  &quot;, In[9], &quot;, Iy = &quot;, In[10], &quot;, Iz = &quot;, In[11] \r
259  </p>\r
260 \r
261 <p class="whs1">&nbsp;</p>\r
262 \r
263 <h3>Bounding Box</h3>\r
264 \r
265 <p class="whs1">import geompy</p>\r
266 \r
267 <p class="whs1">&nbsp;</p>\r
268 \r
269 <p class="whs2"># create a box</p>\r
270 \r
271 <p class="whs1">box = geompy.MakeBoxDXDYDZ(100,30,100)</p>\r
272 \r
273 <p class="whs1">bb = geompy.BoundingBox(box)</p>\r
274 \r
275 <p class="whs1">print &quot;\nBounding \r
276  Box of box 100x30x100:&quot;</p>\r
277 \r
278 <p class="whs1">print &quot; Xmin \r
279  = &quot;, bb[0], &quot;, Xmax = &quot;, bb[1]</p>\r
280 \r
281 <p class="whs1">print &quot; Ymin \r
282  = &quot;, bb[2], &quot;, Ymax = &quot;, bb[3]</p>\r
283 \r
284 <p class="whs1">print &quot; Zmin \r
285  = &quot;, bb[4], &quot;, Zmax = &quot;, bb[5] </p>\r
286 \r
287 <p class="whs1">&nbsp;</p>\r
288 \r
289 <p class="whs1">&nbsp;</p>\r
290 \r
291 <h3>Minimal Distance </h3>\r
292 \r
293 <p class="whs1"><span style="font-family: 'Lucida Console', monospace;">import \r
294  geompy</span></p>\r
295 \r
296 <p class="whs1">&nbsp;</p>\r
297 \r
298 <p class="whs2"># create boxes</p>\r
299 \r
300 <p class="whs1">box1 = geompy.MakeBoxDXDYDZ(100,30,100)</p>\r
301 \r
302 <p class="whs1">box2 = geompy.MakeBox(105,0,0,200,30,100)</p>\r
303 \r
304 <p class="whs1">min_dist = geompy.MinDistance(box1,box2)</p>\r
305 \r
306 <p class="whs1">print &quot;\nMinimal \r
307  distance between box1 and box2 = &quot;, min_dist </p>\r
308 \r
309 <p class="whs1">&nbsp;</p>\r
310 \r
311 <h3>Tolerance</h3>\r
312 \r
313 <p class="whs1"><span style="font-family: 'Lucida Console', monospace;">import \r
314  geompy</span></p>\r
315 \r
316 <p class="whs1">&nbsp;</p>\r
317 \r
318 <p class="whs2"># create a box</p>\r
319 \r
320 <p class="whs1">box = geompy.MakeBoxDXDYDZ(100,30,100)</p>\r
321 \r
322 <p class="whs1">Toler = geompy.Tolerance(box)</p>\r
323 \r
324 <p class="whs1">print &quot;\nBox \r
325  100x30x100 tolerance:&quot;</p>\r
326 \r
327 <p class="whs1">print &quot; Face \r
328  min. tolerance: &quot;, Toler[0]</p>\r
329 \r
330 <p class="whs1">print &quot; Face \r
331  max. tolerance: &quot;, Toler[1]</p>\r
332 \r
333 <p class="whs1">print &quot; Edge \r
334  min. tolerance: &quot;, Toler[2]</p>\r
335 \r
336 <p class="whs1">print &quot; Edge \r
337  max. tolerance: &quot;, Toler[3]</p>\r
338 \r
339 <p class="whs1">print &quot; Vertex \r
340  min. tolerance: &quot;, Toler[4]</p>\r
341 \r
342 <p class="whs1">print &quot; Vertex \r
343  max. tolerance: &quot;, Toler[5] </p>\r
344 \r
345 <p class="whs1">&nbsp;</p>\r
346 \r
347 <h3>What Is</h3>\r
348 \r
349 <p class="whs1"><span style="font-family: 'Lucida Console', monospace;">import \r
350  geompy</span></p>\r
351 \r
352 <p class="whs1">&nbsp;</p>\r
353 \r
354 <p class="whs2"># create a box</p>\r
355 \r
356 <p class="whs1">box = geompy.MakeBoxDXDYDZ(100,30,100)</p>\r
357 \r
358 <p class="whs1">Descr = geompy.WhatIs(box)</p>\r
359 \r
360 <p class="whs1">print &quot;\nBox \r
361  100x30x100 description:&quot;</p>\r
362 \r
363 <p class="whs1">print Descr </p>\r
364 \r
365 <p class="whs1">&nbsp;</p>\r
366 \r
367 <h3>Check Shape</h3>\r
368 \r
369 <p class="whs1">import geompy</p>\r
370 \r
371 <p class="whs1">&nbsp;</p>\r
372 \r
373 <p class="whs2"># create a box</p>\r
374 \r
375 <p class="whs1">box = geompy.MakeBoxDXDYDZ(100,30,100)</p>\r
376 \r
377 <p class="whs1">IsValid = geompy.CheckShape(box)</p>\r
378 \r
379 <p class="whs1">if IsValid == 0:</p>\r
380 \r
381 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;raise \r
382  RuntimeError, &quot;Invalid box created&quot;</p>\r
383 \r
384 <p class="whs1">else:</p>\r
385 \r
386 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
387  &quot;\nBox is valid&quot; </p>\r
388 \r
389 <p class="whs1">&nbsp;</p>\r
390 \r
391 <p class="whs1">&nbsp;</p>\r
392 \r
393 <h3>Check Compound of Blocks</h3>\r
394 \r
395 <p class="whs1"><span style="font-family: 'Lucida Console', monospace;">import \r
396  geompy</span></p>\r
397 \r
398 <p class="whs1">import salome</p>\r
399 \r
400 <p class="whs1">gg = salome.ImportComponentGUI(&quot;GEOM&quot;)</p>\r
401 \r
402 <p class="whs1">&nbsp;</p>\r
403 \r
404 <p class="whs2"># create boxes</p>\r
405 \r
406 <p class="whs1">box1 = geompy.MakeBox(0,0,0,100,50,100)</p>\r
407 \r
408 <p class="whs1">box2 = geompy.MakeBox(100,0,0,250,50,100)</p>\r
409 \r
410 <p class="whs1">&nbsp;</p>\r
411 \r
412 <p class="whs2"># make a compound</p>\r
413 \r
414 <p class="whs1">compound = geompy.MakeCompound([box1, \r
415  box2])</p>\r
416 \r
417 <p class="whs1">&nbsp;</p>\r
418 \r
419 <p class="whs2"># glue the faces of the \r
420  compound</p>\r
421 \r
422 <p class="whs1">tolerance = 1e-5</p>\r
423 \r
424 <p class="whs1">glue = geompy.MakeGlueFaces(compound, \r
425  tolerance)</p>\r
426 \r
427 <p class="whs1">IsValid = geompy.CheckCompoundOfBlocks(glue)</p>\r
428 \r
429 <p class="whs1">if IsValid == 0:</p>\r
430 \r
431 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;raise \r
432  RuntimeError, &quot;Invalid compound created&quot;</p>\r
433 \r
434 <p class="whs1">else:</p>\r
435 \r
436 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
437  &quot;\nCompound is valid&quot; </p>\r
438 \r
439 <p class="whs1">&nbsp;</p>\r
440 \r
441 <p class="whs1">&nbsp;</p>\r
442 \r
443 <p class="whs1">&nbsp;</p>\r
444 \r
445 <script type="text/javascript" language="javascript1.2">\r
446 <!--\r
447 if (window.writeIntopicBar)\r
448         writeIntopicBar(0);\r
449 //-->\r
450 </script>\r
451 </body>\r
452 </html>\r