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