Salome HOME
PAL12557: Documentation for scripts is not up to date.
[modules/geom.git] / doc / salome / gui / GEOM / repairing_operations.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>Repairing Operations</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\nTransformation\nRepairing Operations");\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>Repairing Operations</h1>\r
80 \r
81 <h3><a name=bookmark>Shape Processing</a></h3>\r
82 \r
83 <p class="whs1">import geompy</p>\r
84 \r
85 <p class="whs1">import salome</p>\r
86 \r
87 <p class="whs1">gg = salome.ImportComponentGUI(&quot;GEOM&quot;)</p>\r
88 \r
89 <p>&nbsp;</p>\r
90 \r
91 <p># create vertices, an edge, an arc, a wire, a face and a prism</p>\r
92 \r
93 <p class="whs1">p1 = geompy.MakeVertex(0,0,0)</p>\r
94 \r
95 <p class="whs1">p2 = geompy.MakeVertex(200,0,0)</p>\r
96 \r
97 <p class="whs1">p3 = geompy.MakeVertex(100,150,0)</p>\r
98 \r
99 <p class="whs1">edge = geompy.MakeEdge(p1,p2)</p>\r
100 \r
101 <p class="whs1">arc &nbsp;= \r
102  geompy.MakeArc(p1,p3,p2)</p>\r
103 \r
104 <p class="whs1">wire = geompy.MakeWire([edge,arc])</p>\r
105 \r
106 <p class="whs1">face = geompy.MakeFace(wire, \r
107  1)</p>\r
108 \r
109 <p class="whs1">theShape = geompy.MakePrismVecH(face, \r
110  edge, 130)</p>\r
111 \r
112 <p>&nbsp;</p>\r
113 \r
114 <p># check the shape at the beginning</p>\r
115 \r
116 <p class="whs1">print &quot;Before \r
117  ProcessShape:&quot;</p>\r
118 \r
119 <p class="whs1">isValid = geompy.CheckShape(theShape)</p>\r
120 \r
121 <p class="whs1">if isValid == 0:</p>\r
122 \r
123 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
124  &quot;The shape is not valid&quot;</p>\r
125 \r
126 <p class="whs1">else:</p>\r
127 \r
128 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
129  &quot;The shape seems to be valid&quot;</p>\r
130 \r
131 <p class="whs1">&nbsp;</p>\r
132 \r
133 <p># process the Shape</p>\r
134 \r
135 <p class="whs1">Operators = [&quot;FixShape&quot;]</p>\r
136 \r
137 <p class="whs1">Parameters = [&quot;FixShape.Tolerance3d&quot;]</p>\r
138 \r
139 <p class="whs1">Values = [&quot;1e-7&quot;]</p>\r
140 \r
141 <p class="whs1">PS = geompy.ProcessShape(theShape, \r
142  Operators, Parameters, Values)</p>\r
143 \r
144 <p>&nbsp;</p>\r
145 \r
146 <p># check the shape at the end</p>\r
147 \r
148 <p class="whs1">print &quot;After \r
149  ProcessShape:&quot;</p>\r
150 \r
151 <p class="whs1">isValid = geompy.CheckShape(PS)</p>\r
152 \r
153 <p class="whs1">if isValid == 0:</p>\r
154 \r
155 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
156  &quot;The shape is not valid&quot;</p>\r
157 \r
158 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;raise \r
159  RuntimeError, &quot;It seems, that the ProcessShape() has failed&quot;</p>\r
160 \r
161 <p class="whs1">else:</p>\r
162 \r
163 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
164  &quot;The shape seems to be valid&quot;</p>\r
165 \r
166 <p>&nbsp;</p>\r
167 \r
168 <p># add in the study and display</p>\r
169 \r
170 <p class="whs1">Id_Shape = geompy.addToStudy(theShape, \r
171  &quot;Invalid Shape&quot;)</p>\r
172 \r
173 <p class="whs1">Id_PS &nbsp;&nbsp;&nbsp;= \r
174  geompy.addToStudy(PS, &quot;Processed Shape&quot;)</p>\r
175 \r
176 <p class="whs1">gg.createAndDisplayGO(Id_Shape)</p>\r
177 \r
178 <p class="whs1">gg.setDisplayMode(Id_Shape,1)</p>\r
179 \r
180 <p class="whs1">gg.createAndDisplayGO(Id_PS)</p>\r
181 \r
182 <p><span style="font-family: 'Lucida Console', monospace;">gg.setDisplayMode(Id_PS,1)</span> \r
183  </p>\r
184 \r
185 <p>&nbsp;</p>\r
186 \r
187 <h3><a name=bookmark1>Suppress Faces</a></h3>\r
188 \r
189 <p class="whs1">import geompy</p>\r
190 \r
191 <p class="whs1">import salome</p>\r
192 \r
193 <p class="whs1">gg = salome.ImportComponentGUI(&quot;GEOM&quot;)</p>\r
194 \r
195 <p>&nbsp;</p>\r
196 \r
197 <p># create a box</p>\r
198 \r
199 <p class="whs1">box = geompy.MakeBoxDXDYDZ(200, \r
200  200, 200)</p>\r
201 \r
202 <p>&nbsp;</p>\r
203 \r
204 <p># The list of IDs (IDList) for suppress faces</p>\r
205 \r
206 <p class="whs1">sup_faces = []</p>\r
207 \r
208 <p class="whs1">sup_faces = geompy.SubShapeAllSorted(box, \r
209  geompy.ShapeType[&quot;FACE&quot;])</p>\r
210 \r
211 <p>&nbsp;</p>\r
212 \r
213 <p># get indices of the sub-shape </p>\r
214 \r
215 <p class="whs1">f1_id = geompy.GetSubShapeID(box, \r
216  sup_faces[3])</p>\r
217 \r
218 <p>&nbsp;</p>\r
219 \r
220 <p># remove faces from the given object (shape)</p>\r
221 \r
222 <p class="whs1">result = geompy.SuppressFaces(box, \r
223  [f1_id])</p>\r
224 \r
225 <p>&nbsp;</p>\r
226 \r
227 <p># add objects in the study</p>\r
228 \r
229 <p class="whs1">id_box = geompy.addToStudy(box, \r
230  &quot;Box&quot;)</p>\r
231 \r
232 <p class="whs1">id_result = geompy.addToStudy(result, \r
233  &quot;Result&quot;)</p>\r
234 \r
235 <p>&nbsp;</p>\r
236 \r
237 <p># display the results</p>\r
238 \r
239 <p class="whs1">gg.createAndDisplayGO(id_box)</p>\r
240 \r
241 <p class="whs1">gg.setDisplayMode(id_box,1)</p>\r
242 \r
243 <p class="whs1">gg.createAndDisplayGO(id_result)</p>\r
244 \r
245 <p><span style="font-family: 'Lucida Console', monospace;">gg.setDisplayMode(id_result,1)</span> \r
246  </p>\r
247 \r
248 <p>&nbsp;</p>\r
249 \r
250 <h3><a name=bookmark2>Close Contour</a></h3>\r
251 \r
252 <p class="whs1">import geompy</p>\r
253 \r
254 <p class="whs1">import salome</p>\r
255 \r
256 <p class="whs1">gg = salome.ImportComponentGUI(&quot;GEOM&quot;)</p>\r
257 \r
258 <p>&nbsp;</p>\r
259 \r
260 <p># create vertices and vectors</p>\r
261 \r
262 <p class="whs1">p0 &nbsp;= \r
263  geompy.MakeVertex( &nbsp;0., \r
264  &nbsp;&nbsp;0., \r
265  &nbsp;&nbsp;0.)</p>\r
266 \r
267 <p class="whs1">px &nbsp;= \r
268  geompy.MakeVertex(100., &nbsp;&nbsp;0., \r
269  &nbsp;&nbsp;0.)</p>\r
270 \r
271 <p class="whs1">py &nbsp;= \r
272  geompy.MakeVertex( &nbsp;0., \r
273  100., &nbsp;&nbsp;0.)</p>\r
274 \r
275 <p class="whs1">py1 = geompy.MakeVertex( \r
276  &nbsp;0., 140., \r
277  &nbsp;&nbsp;0.)</p>\r
278 \r
279 <p class="whs1">pz &nbsp;= \r
280  geompy.MakeVertex( &nbsp;0., \r
281  &nbsp;&nbsp;0., \r
282  100.)</p>\r
283 \r
284 <p class="whs1">vxy = geompy.MakeVector(px, \r
285  py)</p>\r
286 \r
287 <p>&nbsp;&nbsp;</p>\r
288 \r
289 <p># create an arc</p>\r
290 \r
291 <p class="whs1">arc = geompy.MakeArc(py1, \r
292  pz, px)</p>\r
293 \r
294 <p>&nbsp;</p>\r
295 \r
296 <p># create a wire</p>\r
297 \r
298 <p class="whs1">wire = geompy.MakeWire([vxy, \r
299  arc])</p>\r
300 \r
301 <p>&nbsp;</p>\r
302 \r
303 <p># close an open wire by creation of an edge between ends</p>\r
304 \r
305 <p class="whs1">wire_close = geompy.CloseContour(wire, \r
306  [1], 0)</p>\r
307 \r
308 <p>&nbsp;</p>\r
309 \r
310 <p># add objects in the study</p>\r
311 \r
312 <p class="whs1">id_wire = geompy.addToStudy(wire, \r
313  &quot;Wire&quot;)</p>\r
314 \r
315 <p class="whs1">id_wire_close = geompy.addToStudy(wire_close, \r
316  &quot;Wire close&quot;)</p>\r
317 \r
318 <p>&nbsp;</p>\r
319 \r
320 <p># display the results</p>\r
321 \r
322 <p class="whs1">gg.createAndDisplayGO(id_wire)</p>\r
323 \r
324 <p><span style="font-family: 'Lucida Console', monospace;">gg.createAndDisplayGO(id_wire_close)</span> \r
325  </p>\r
326 \r
327 <p>&nbsp;</p>\r
328 \r
329 <h3><a name=bookmark3>Suppress Internal Wires</a></h3>\r
330 \r
331 <p class="whs1">import geompy</p>\r
332 \r
333 <p class="whs1">import salome</p>\r
334 \r
335 <p class="whs1">gg = salome.ImportComponentGUI(&quot;GEOM&quot;)</p>\r
336 \r
337 <p>&nbsp;</p>\r
338 \r
339 <p># create a vertex and a vector</p>\r
340 \r
341 <p class="whs1">p1 = geompy.MakeVertex(55, \r
342  65, 50)</p>\r
343 \r
344 <p class="whs1">p2 = geompy.MakeVertex(55, \r
345  &nbsp;0, 50)</p>\r
346 \r
347 <p class="whs1">v = geompy.MakeVector(p1, \r
348  p2)</p>\r
349 \r
350 <p>&nbsp;</p>\r
351 \r
352 <p># create a cylinder</p>\r
353 \r
354 <p class="whs1">height = 100</p>\r
355 \r
356 <p class="whs1">radius1 = 40</p>\r
357 \r
358 <p class="whs1">cylinder = geompy.MakeCylinder(p1, \r
359  v, radius1, height)</p>\r
360 \r
361 <p>&nbsp;</p>\r
362 \r
363 <p># create a box</p>\r
364 \r
365 <p class="whs1">box = geompy.MakeBoxDXDYDZ(100, \r
366  100, 100)</p>\r
367 \r
368 <p>&nbsp;</p>\r
369 \r
370 <p># make a cut</p>\r
371 \r
372 <p class="whs1">cut = geompy.MakeCut(box, \r
373  cylinder)</p>\r
374 \r
375 <p>&nbsp;</p>\r
376 \r
377 <p># suppress all internal wires</p>\r
378 \r
379 <p class="whs1">result = geompy.SuppressInternalWires(cut, \r
380  [])</p>\r
381 \r
382 <p>&nbsp;</p>\r
383 \r
384 <p># add objects in the study</p>\r
385 \r
386 <p class="whs1">id_cut = geompy.addToStudy(cut, \r
387  &quot;Cut&quot;)</p>\r
388 \r
389 <p class="whs1">id_result = geompy.addToStudy(result, \r
390  &quot;Result&quot;)</p>\r
391 \r
392 <p>&nbsp;</p>\r
393 \r
394 <p># display the results</p>\r
395 \r
396 <p class="whs1">gg.createAndDisplayGO(id_cut)</p>\r
397 \r
398 <p class="whs1">gg.setDisplayMode(id_cut,1)</p>\r
399 \r
400 <p class="whs1">gg.createAndDisplayGO(id_result)</p>\r
401 \r
402 <p><span style="font-family: 'Lucida Console', monospace;">gg.setDisplayMode(id_result,1)</span> \r
403  </p>\r
404 \r
405 <p>&nbsp;</p>\r
406 \r
407 <h3><a name=bookmark4>Suppress Holes</a></h3>\r
408 \r
409 <p class="whs1">import geompy</p>\r
410 \r
411 <p class="whs1">import salome</p>\r
412 \r
413 <p class="whs1">gg = salome.ImportComponentGUI(&quot;GEOM&quot;)</p>\r
414 \r
415 <p>&nbsp;</p>\r
416 \r
417 <p># create a vertex and a vector</p>\r
418 \r
419 <p class="whs1">p1 = geompy.MakeVertex(35, \r
420  35, 0)</p>\r
421 \r
422 <p class="whs1">p2 = geompy.MakeVertex(35, \r
423  35, 50)</p>\r
424 \r
425 <p class="whs1">v = geompy.MakeVector(p1, \r
426  p2)</p>\r
427 \r
428 <p>&nbsp;</p>\r
429 \r
430 <p># create a cylinder</p>\r
431 \r
432 <p class="whs1">height = 20</p>\r
433 \r
434 <p class="whs1">radius1 = 20</p>\r
435 \r
436 <p class="whs1">cylinder = geompy.MakeCylinder(p1, \r
437  v, radius1, height)</p>\r
438 \r
439 <p>&nbsp;</p>\r
440 \r
441 <p># create a cone</p>\r
442 \r
443 <p class="whs1">cone = geompy.MakeCone(p1, \r
444  v, 70, 0, 80)</p>\r
445 \r
446 <p>&nbsp;</p>\r
447 \r
448 <p># make a cut</p>\r
449 \r
450 <p class="whs1">cut = geompy.MakeCut(cone, \r
451  cylinder)</p>\r
452 \r
453 <p>&nbsp;</p>\r
454 \r
455 <p># get faces as sub-shapes</p>\r
456 \r
457 <p class="whs1">faces = []</p>\r
458 \r
459 <p class="whs1">faces = geompy.SubShapeAllSorted(cut, \r
460  geompy.ShapeType[&quot;FACE&quot;])</p>\r
461 \r
462 <p class="whs1">f_2 = geompy.GetSubShapeID(cut, \r
463  faces[2])</p>\r
464 \r
465 <p>&nbsp;</p>\r
466 \r
467 <p># remove one face from the shape</p>\r
468 \r
469 <p class="whs1">cut_without_f_2 = \r
470  geompy.SuppressFaces(cut, [f_2])</p>\r
471 \r
472 <p>&nbsp;</p>\r
473 \r
474 <p># get wires as sub-shapes</p>\r
475 \r
476 <p class="whs1">wires = []</p>\r
477 \r
478 <p class="whs1">wires = geompy.SubShapeAllSorted(cut_without_f_2, \r
479  geompy.ShapeType[&quot;WIRE&quot;])</p>\r
480 \r
481 <p class="whs1">w_0 = geompy.GetSubShapeID(cut_without_f_2, \r
482  wires[0])</p>\r
483 \r
484 <p>&nbsp;</p>\r
485 \r
486 <p># suppress the selected wire</p>\r
487 \r
488 <p class="whs1">result = geompy.SuppressHoles(cut_without_f_2, \r
489  [w_0])</p>\r
490 \r
491 <p>&nbsp;</p>\r
492 \r
493 <p># add objects in the study</p>\r
494 \r
495 <p class="whs1">id_cut = geompy.addToStudy(cut, \r
496  &quot;Cut&quot;)</p>\r
497 \r
498 <p class="whs1">id_cut_without_f_2 \r
499  = geompy.addToStudy(cut_without_f_2, &quot;Cut without f_2&quot;)</p>\r
500 \r
501 <p class="whs1">id_result = geompy.addToStudy(result, \r
502  &quot;Result&quot;)</p>\r
503 \r
504 <p>&nbsp;</p>\r
505 \r
506 <p># display the results</p>\r
507 \r
508 <p class="whs1">gg.createAndDisplayGO(id_cut)</p>\r
509 \r
510 <p class="whs1">gg.setDisplayMode(id_cut,1)</p>\r
511 \r
512 <p class="whs1">gg.createAndDisplayGO(id_cut_without_f_2)</p>\r
513 \r
514 <p class="whs1">gg.setDisplayMode(id_cut_without_f_2,1)</p>\r
515 \r
516 <p class="whs1">gg.createAndDisplayGO(id_result)</p>\r
517 \r
518 <p><span style="font-family: 'Lucida Console', monospace;">gg.setDisplayMode(id_result,1)</span> \r
519  </p>\r
520 \r
521 <p>&nbsp;</p>\r
522 \r
523 <h3><a name=bookmark5>Sewing</a></h3>\r
524 \r
525 <p class="whs1">import geompy</p>\r
526 \r
527 <p class="whs1">import salome</p>\r
528 \r
529 <p class="whs1">import math</p>\r
530 \r
531 <p class="whs1">gg = salome.ImportComponentGUI(&quot;GEOM&quot;)</p>\r
532 \r
533 <p>&nbsp;</p>\r
534 \r
535 <p># create base points</p>\r
536 \r
537 <p class="whs1">px = geompy.MakeVertex(100., \r
538  0., 0.)</p>\r
539 \r
540 <p class="whs1">py = geompy.MakeVertex(0., \r
541  100., 0.)</p>\r
542 \r
543 <p class="whs1">pz = geompy.MakeVertex(0., \r
544  0., 100.)</p>\r
545 \r
546 <p>&nbsp;</p>\r
547 \r
548 <p># create base geometry 2D &amp; 3D</p>\r
549 \r
550 <p class="whs1">vector = geompy.MakeVector(px, \r
551  py)</p>\r
552 \r
553 <p class="whs1">arc = geompy.MakeArc(py, \r
554  pz, px)</p>\r
555 \r
556 <p>&nbsp;</p>\r
557 \r
558 <p># create base objects</p>\r
559 \r
560 <p class="whs1">angle = 45. * math.pi \r
561  / 180</p>\r
562 \r
563 <p class="whs1">WantPlanarFace = 1 \r
564  #True</p>\r
565 \r
566 <p class="whs1">wire = geompy.MakeWire([vector, \r
567  arc])</p>\r
568 \r
569 <p class="whs1">face = geompy.MakeFace(wire, \r
570  WantPlanarFace)</p>\r
571 \r
572 <p class="whs1">face_rot = geompy.MakeRotation(face, \r
573  vector, angle)</p>\r
574 \r
575 <p>&nbsp;</p>\r
576 \r
577 <p># make sewing</p>\r
578 \r
579 <p class="whs1">precision = 0.00001</p>\r
580 \r
581 <p class="whs1">sewing = geompy.MakeSewing([face, \r
582  face_rot], precision)</p>\r
583 \r
584 <p>&nbsp;</p>\r
585 \r
586 <p># add objects in the study</p>\r
587 \r
588 <p class="whs1">id_face = geompy.addToStudy(face, \r
589  &quot;Face&quot;)</p>\r
590 \r
591 <p class="whs1">id_face_rot = geompy.addToStudy(face_rot, \r
592  &quot;Face rotation&quot;)</p>\r
593 \r
594 <p class="whs1">id_sewing = geompy.addToStudy(sewing, \r
595  &quot;Sewing&quot;)</p>\r
596 \r
597 <p>&nbsp;</p>\r
598 \r
599 <p># display the results</p>\r
600 \r
601 <p class="whs1">gg.createAndDisplayGO(id_face)</p>\r
602 \r
603 <p class="whs1">gg.setDisplayMode(id_face,1)</p>\r
604 \r
605 <p class="whs1">gg.createAndDisplayGO(id_face_rot)</p>\r
606 \r
607 <p class="whs1">gg.setDisplayMode(id_face_rot,1)</p>\r
608 \r
609 <p class="whs1">gg.createAndDisplayGO(id_sewing)</p>\r
610 \r
611 <p class="whs1">gg.setDisplayMode(id_sewing,1) \r
612  </p>\r
613 \r
614 <p class="whs1">&nbsp;</p>\r
615 \r
616 <h3><a name=bookmark6>Glue Faces</a></h3>\r
617 \r
618 <p class="whs1"><span style="font-family: 'Lucida Console', monospace;">import \r
619  geompy</span></p>\r
620 \r
621 <p class="whs1">import salome</p>\r
622 \r
623 <p class="whs1">&nbsp;</p>\r
624 \r
625 <p class="whs1">gg = salome.ImportComponentGUI(&quot;GEOM&quot;)</p>\r
626 \r
627 <p class="whs1">&nbsp;</p>\r
628 \r
629 <p class="whs2"># create boxes</p>\r
630 \r
631 <p class="whs1">box1 = geompy.MakeBox(0,0,0,100,50,100)</p>\r
632 \r
633 <p class="whs1">box2 = <span style="font-family: 'Lucida Console', monospace;">geompy.MakeBox(100,0,0,250,50,100)</span></p>\r
634 \r
635 <p class="whs1">&nbsp;</p>\r
636 \r
637 <p class="whs2"># make compound</p>\r
638 \r
639 <p class="whs1">compound = geompy.MakeCompound([box1, \r
640  box2])</p>\r
641 \r
642 <p class="whs1">&nbsp;</p>\r
643 \r
644 <p class="whs2"># glue compound's faces</p>\r
645 \r
646 <p class="whs1">tolerance = 1e-5</p>\r
647 \r
648 <p class="whs1">glue = geompy.MakeGlueFaces(compound, \r
649  tolerance)</p>\r
650 \r
651 <p class="whs1">&nbsp;</p>\r
652 \r
653 <p class="whs2"># add objects in study</p>\r
654 \r
655 <p class="whs1">id_box1 = geompy.addToStudy(box1, \r
656  &quot;Box1&quot;)</p>\r
657 \r
658 <p class="whs1">id_box2 = geompy.addToStudy(box2, \r
659  &quot;Box2&quot;)</p>\r
660 \r
661 <p class="whs1">id_compound = geompy.addToStudy(compound, \r
662  &quot;Compound&quot;)</p>\r
663 \r
664 <p class="whs1">id_glue = geompy.addToStudy(glue, \r
665  &quot;Glue faces&quot;)</p>\r
666 \r
667 <p class="whs1">&nbsp;</p>\r
668 \r
669 <p class="whs2"># display results</p>\r
670 \r
671 <p class="whs1">gg.createAndDisplayGO(id_box1)</p>\r
672 \r
673 <p class="whs1">gg.setDisplayMode(id_box1,1)</p>\r
674 \r
675 <p class="whs1">gg.createAndDisplayGO(id_box2)</p>\r
676 \r
677 <p class="whs1">gg.setDisplayMode(id_box2,1)</p>\r
678 \r
679 <p class="whs1">gg.createAndDisplayGO(id_compound)</p>\r
680 \r
681 <p class="whs1">gg.setDisplayMode(id_compound,1)</p>\r
682 \r
683 <p class="whs1">gg.createAndDisplayGO(id_glue)</p>\r
684 \r
685 <p class="whs1">gg.setDisplayMode(id_glue,1) \r
686  </p>\r
687 \r
688 <p class="whs1">&nbsp;</p>\r
689 \r
690 <h3><a name=bookmark7>Add Point on Edge</a></h3>\r
691 \r
692 <p class="whs1"><span style="font-family: 'Lucida Console', monospace;">import \r
693  geompy</span></p>\r
694 \r
695 <p class="whs1">import salome</p>\r
696 \r
697 <p class="whs1">&nbsp;</p>\r
698 \r
699 <p class="whs2"># create vertices</p>\r
700 \r
701 <p class="whs1">p1 = geompy.MakeVertex(0,0,50)</p>\r
702 \r
703 <p class="whs1">p2 = geompy.MakeVertex(60,0,50)</p>\r
704 \r
705 <p class="whs1">&nbsp;</p>\r
706 \r
707 <p class="whs2"># make an edge</p>\r
708 \r
709 <p class="whs1">edge = geompy.MakeEdge(p1, \r
710  p2) #geompy.GetSubShape(box, edge_ind)</p>\r
711 \r
712 <p class="whs1">&nbsp;</p>\r
713 \r
714 <p class="whs2"># divide an edge</p>\r
715 \r
716 <p class="whs1">divide = geompy.DivideEdge(edge, \r
717  -1, 0.5, 0)</p>\r
718 \r
719 <p class="whs1">&nbsp;</p>\r
720 \r
721 <p class="whs2"># add objects in the \r
722  study</p>\r
723 \r
724 <p class="whs1">id_edge = geompy.addToStudy(edge, \r
725  &quot;Edge&quot;)</p>\r
726 \r
727 <p class="whs1">edge_points = geompy.SubShapeAllSorted(edge, \r
728  geompy.ShapeType[&quot;VERTEX&quot;])</p>\r
729 \r
730 <p class="whs1">for point in edge_points:</p>\r
731 \r
732 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;geompy.addToStudyInFather(edge, \r
733  point, &quot;Edge's point&quot;)</p>\r
734 \r
735 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;</p>\r
736 \r
737 <p class="whs1">id_divide = geompy.addToStudy(divide, \r
738  &quot;Divided edge&quot;)</p>\r
739 \r
740 <p class="whs1">edge_points = geompy.SubShapeAllSorted(divide, \r
741  geompy.ShapeType[&quot;VERTEX&quot;])</p>\r
742 \r
743 <p class="whs1">for point in edge_points:</p>\r
744 \r
745 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;geompy.addToStudyInFather(divide, \r
746  point, &quot;Edge's point after divide&quot;)</p>\r
747 \r
748 <p class="whs1">&nbsp;&nbsp;</p>\r
749 \r
750 <p class="whs1">salome.sg.updateObjBrowser(1) \r
751  </p>\r
752 \r
753 <p class="whs2">&nbsp;</p>\r
754 \r
755 <h3><a name=bookmark8>Check Free Boundaries</a></h3>\r
756 \r
757 <p class="whs1">import os</p>\r
758 \r
759 <p class="whs1">import geompy</p>\r
760 \r
761 <p class="whs1">import salome</p>\r
762 \r
763 <p class="whs1">gg = salome.ImportComponentGUI(&quot;GEOM&quot;)</p>\r
764 \r
765 <p class="whs2">&nbsp;</p>\r
766 \r
767 <p class="whs2"># create boxes</p>\r
768 \r
769 <p class="whs1">box1 = geompy.MakeBox(0,0,0,100,50,100)</p>\r
770 \r
771 <p class="whs1">box2 = geompy.MakeBox(100,0,0,250,50,100)</p>\r
772 \r
773 <p class="whs2">&nbsp;</p>\r
774 \r
775 <p class="whs2"># make a compound</p>\r
776 \r
777 <p class="whs1">compound = geompy.MakeCompound([box1, \r
778  box2])</p>\r
779 \r
780 <p class="whs2">&nbsp;</p>\r
781 \r
782 <p class="whs2"># import from *.brep</p>\r
783 \r
784 <p class="whs1">ImportBREP = geompy.ImportBREP(&quot;<span \r
785  style="font-family: 'Lucida Console', monospace;">os.getenv(&quot;DATA_DIR&quot;)+&quot;/Shapes/Brep/flight_solid.brep&quot;)</span></p>\r
786 \r
787 <p class="whs2">&nbsp;</p>\r
788 \r
789 <p class="whs2"># get a face</p>\r
790 \r
791 <p class="whs1">faces = geompy.SubShapeAllSorted(ImportBREP, \r
792  geompy.ShapeType[&quot;FACE&quot;])</p>\r
793 \r
794 <p class="whs2">&nbsp;</p>\r
795 \r
796 <p class="whs2"># get the free boundary \r
797  for face 32</p>\r
798 \r
799 <p class="whs1">Res = geompy.GetFreeBoundary(faces[32])</p>\r
800 \r
801 <p class="whs1">isSuccess &nbsp;&nbsp;= \r
802  Res[0]</p>\r
803 \r
804 <p class="whs1">ClosedWires = Res[1]</p>\r
805 \r
806 <p class="whs1">OpenWires &nbsp;&nbsp;= \r
807  Res[2]</p>\r
808 \r
809 <p class="whs2">&nbsp;&nbsp;</p>\r
810 \r
811 <p class="whs2">i<span style="font-family: 'Lucida Console', monospace;">f \r
812  isSuccess == 1 :</span></p>\r
813 \r
814 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
815  &quot;Checking free boudaries is OK.&quot;</p>\r
816 \r
817 <p class="whs1">else :</p>\r
818 \r
819 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
820  &quot;Checking free boudaries is KO!&quot;</p>\r
821 \r
822 <p class="whs1">print &quot;len(ClosedWires) \r
823  = &quot;, len(ClosedWires)</p>\r
824 \r
825 <p class="whs1">i = 0</p>\r
826 \r
827 <p class="whs1">for wire in ClosedWires \r
828  :</p>\r
829 \r
830 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;wire_name \r
831  = &quot;Face 32 -&gt; Close wires : WIRE %d&quot;%(i+1)</p>\r
832 \r
833 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;geompy.addToStudy(ClosedWires[i], \r
834  wire_name)</p>\r
835 \r
836 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;if \r
837  i &lt; len(ClosedWires) :</p>\r
838 \r
839 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i \r
840  = i+ 1</p>\r
841 \r
842 <p class="whs1">print &quot;len(OpenWires) \r
843  = &quot;, len(OpenWires)</p>\r
844 \r
845 <p class="whs1">i = 0</p>\r
846 \r
847 <p class="whs1">for wire in OpenWires \r
848  :</p>\r
849 \r
850 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;wire_name \r
851  = &quot;Face 32 -&gt; Open wires : WIRE %d&quot;%(i+1)</p>\r
852 \r
853 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;geompy.addToStudy(OpenWires[i], \r
854  wire_name)</p>\r
855 \r
856 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;if \r
857  i &lt; len(OpenWires) :</p>\r
858 \r
859 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i \r
860  = i+ 1</p>\r
861 \r
862 <p class="whs2">&nbsp;</p>\r
863 \r
864 <p class="whs2"># get the free boundary \r
865  for face 41</p>\r
866 \r
867 <p class="whs1">Res = geompy.GetFreeBoundary(faces[41])</p>\r
868 \r
869 <p class="whs1">isSuccess &nbsp;&nbsp;= \r
870  Res[0]</p>\r
871 \r
872 <p class="whs1">ClosedWires = Res[1]</p>\r
873 \r
874 <p class="whs1">OpenWires &nbsp;&nbsp;= \r
875  Res[2]</p>\r
876 \r
877 <p class="whs1">&nbsp;&nbsp;</p>\r
878 \r
879 <p class="whs1">if isSuccess == 1 \r
880  :</p>\r
881 \r
882 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
883  &quot;Checking free boudaries is OK.&quot;</p>\r
884 \r
885 <p class="whs1">else :</p>\r
886 \r
887 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
888  &quot;Checking free boudaries is KO!&quot;</p>\r
889 \r
890 <p class="whs1">print &quot;len(ClosedWires) \r
891  = &quot;, len(ClosedWires)</p>\r
892 \r
893 <p class="whs1">i = 0</p>\r
894 \r
895 <p class="whs1">for wire in ClosedWires \r
896  :</p>\r
897 \r
898 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;wire_name \r
899  = &quot;Face 41 -&gt; Close wires : WIRE %d&quot;%(i+1)</p>\r
900 \r
901 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;geompy.addToStudy(ClosedWires[i], \r
902  wire_name)</p>\r
903 \r
904 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;if \r
905  i &lt; len(ClosedWires) :</p>\r
906 \r
907 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i \r
908  = i+ 1</p>\r
909 \r
910 <p class="whs1">print &quot;len(OpenWires) \r
911  = &quot;, len(OpenWires)</p>\r
912 \r
913 <p class="whs1">i = 0</p>\r
914 \r
915 <p class="whs1">for wire in OpenWires \r
916  :</p>\r
917 \r
918 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;wire_name \r
919  = &quot;Face 41 -&gt; Open wires : WIRE %d&quot;%(i+1)</p>\r
920 \r
921 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;geompy.addToStudy(OpenWires[i], \r
922  wire_name)</p>\r
923 \r
924 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;if \r
925  i &lt; len(OpenWires) :</p>\r
926 \r
927 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i \r
928  = i+ 1</p>\r
929 \r
930 <p class="whs2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>\r
931 \r
932 <p class="whs2"># add the imported object \r
933  to the study</p>\r
934 \r
935 <p class="whs1">id_ImportBREP = geompy.addToStudy(ImportBREP, \r
936  &quot;ImportBREP&quot;)</p>\r
937 \r
938 <p class="whs2"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
939  </p>\r
940 \r
941 <p class="whs2">&nbsp;</p>\r
942 \r
943 <h3><a name=bookmark9>Check Free Faces</a></h3>\r
944 \r
945 <p class="whs1">import geompy</p>\r
946 \r
947 <p class="whs1">import salome</p>\r
948 \r
949 <p class="whs1">gg = salome.ImportComponentGUI(&quot;GEOM&quot;)</p>\r
950 \r
951 <p>&nbsp;</p>\r
952 \r
953 <p># create a vertex and a vector</p>\r
954 \r
955 <p class="whs1">p1 = geompy.MakeVertex(35, \r
956  35, 0)</p>\r
957 \r
958 <p class="whs1">p2 = geompy.MakeVertex(35, \r
959  35, 50)</p>\r
960 \r
961 <p class="whs1">v = geompy.MakeVector(p1, \r
962  p2)</p>\r
963 \r
964 <p>&nbsp;</p>\r
965 \r
966 <p># create a cylinder</p>\r
967 \r
968 <p class="whs1">cylinder = geompy.MakeCone(p1, \r
969  v, 30, 20, 20)</p>\r
970 \r
971 <p>&nbsp;</p>\r
972 \r
973 <p># create a cone</p>\r
974 \r
975 <p class="whs1">cone = geompy.MakeCone(p1, \r
976  v, 70, 40, 60)</p>\r
977 \r
978 <p>&nbsp;</p>\r
979 \r
980 <p># make cut</p>\r
981 \r
982 <p class="whs1">cut = geompy.MakeCut(cone, \r
983  cylinder)</p>\r
984 \r
985 <p>&nbsp;</p>\r
986 \r
987 <p># get faces as sub-shapes</p>\r
988 \r
989 <p class="whs1">faces = []</p>\r
990 \r
991 <p class="whs1">faces = geompy.SubShapeAllSorted(cut, \r
992  geompy.ShapeType[&quot;FACE&quot;])</p>\r
993 \r
994 <p class="whs1">f_2 = geompy.GetSubShapeID(cut, \r
995  faces[0])</p>\r
996 \r
997 <p>&nbsp;</p>\r
998 \r
999 <p># remove one face from the shape</p>\r
1000 \r
1001 <p class="whs1">cut_without_f_2 = \r
1002  geompy.SuppressFaces(cut, [f_2])</p>\r
1003 \r
1004 <p>&nbsp;</p>\r
1005 \r
1006 <p># suppress the specified wire</p>\r
1007 \r
1008 <p class="whs1">result = geompy.GetFreeFacesIDs(cut_without_f_2)</p>\r
1009 \r
1010 <p class="whs1">print &quot;A number \r
1011  of free faces is &quot;, len(result)</p>\r
1012 \r
1013 <p>&nbsp;</p>\r
1014 \r
1015 <p># add objects in the study</p>\r
1016 \r
1017 <p class="whs1">all_faces = geompy.SubShapeAllSorted(cut_without_f_2, \r
1018  geompy.ShapeType[&quot;FACE&quot;])</p>\r
1019 \r
1020 <p class="whs1">for face in all_faces \r
1021  :</p>\r
1022 \r
1023 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;sub_shape_id \r
1024  = geompy.GetSubShapeID(cut_without_f_2, face)</p>\r
1025 \r
1026 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;if \r
1027  result.count(sub_shape_id) &gt; 0 :</p>\r
1028 \r
1029 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;face_name \r
1030  = &quot;Free face %d&quot;%(sub_shape_id)</p>\r
1031 \r
1032 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;geompy.addToStudy(face, \r
1033  face_name)</p>\r
1034 \r
1035 <p>&nbsp;</p>\r
1036 \r
1037 <p># in this example all faces from cut_without_f_2 are free</p>\r
1038 \r
1039 <p class="whs1">id_cut_without_f_2 \r
1040  = geompy.addToStudy(cut_without_f_2, &quot;Cut without f_2&quot;)</p>\r
1041 \r
1042 <p>&nbsp;</p>\r
1043 \r
1044 <p># display the results</p>\r
1045 \r
1046 <p class="whs1">gg.createAndDisplayGO(id_cut_without_f_2)</p>\r
1047 \r
1048 <p><span style="font-family: 'Lucida Console', monospace;">gg.setDisplayMode(id_cut_without_f_2,1)</span> \r
1049  </p>\r
1050 \r
1051 <script type="text/javascript" language="javascript1.2">\r
1052 <!--\r
1053 if (window.writeIntopicBar)\r
1054         writeIntopicBar(0);\r
1055 //-->\r
1056 </script>\r
1057 </body>\r
1058 </html>\r