Salome HOME
Merge from OCC_development_generic_2006
[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("GEOM 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 = </p>\r
629 \r
630 <p class="whs1">geompy.MakeBox(100,0,0,250,50,100)</p>\r
631 \r
632 <p class="whs1">&nbsp;</p>\r
633 \r
634 <p class="whs2"># make compound</p>\r
635 \r
636 <p class="whs1">compound = geompy.MakeCompound([box1, \r
637  box2])</p>\r
638 \r
639 <p class="whs1">&nbsp;</p>\r
640 \r
641 <p class="whs2"># glue compound's faces</p>\r
642 \r
643 <p class="whs1">tolerance = 1e-5</p>\r
644 \r
645 <p class="whs1">glue = geompy.MakeGlueFaces(compound, \r
646  tolerance)</p>\r
647 \r
648 <p class="whs1">&nbsp;</p>\r
649 \r
650 <p class="whs2"># add objects in study</p>\r
651 \r
652 <p class="whs1">id_box1 = geompy.addToStudy(box1, \r
653  &quot;Box1&quot;)</p>\r
654 \r
655 <p class="whs1">id_box2 = geompy.addToStudy(box2, \r
656  &quot;Box2&quot;)</p>\r
657 \r
658 <p class="whs1">id_compound = geompy.addToStudy(compound, \r
659  &quot;Compound&quot;)</p>\r
660 \r
661 <p class="whs1">id_glue = geompy.addToStudy(glue, \r
662  &quot;Glue faces&quot;)</p>\r
663 \r
664 <p class="whs1">&nbsp;</p>\r
665 \r
666 <p class="whs2"># display results</p>\r
667 \r
668 <p class="whs1">gg.createAndDisplayGO(id_box1)</p>\r
669 \r
670 <p class="whs1">gg.setDisplayMode(id_box1,1)</p>\r
671 \r
672 <p class="whs1">gg.createAndDisplayGO(id_box2)</p>\r
673 \r
674 <p class="whs1">gg.setDisplayMode(id_box2,1)</p>\r
675 \r
676 <p class="whs1">gg.createAndDisplayGO(id_compound)</p>\r
677 \r
678 <p class="whs1">gg.setDisplayMode(id_compound,1)</p>\r
679 \r
680 <p class="whs1">gg.createAndDisplayGO(id_glue)</p>\r
681 \r
682 <p class="whs1">gg.setDisplayMode(id_glue,1) \r
683  </p>\r
684 \r
685 <p class="whs1">&nbsp;</p>\r
686 \r
687 <h3><a name=bookmark7>Add Point on Edge</a></h3>\r
688 \r
689 <p class="whs1"><span style="font-family: 'Lucida Console', monospace;">import \r
690  geompy</span></p>\r
691 \r
692 <p class="whs1">import salome</p>\r
693 \r
694 <p class="whs1">&nbsp;</p>\r
695 \r
696 <p class="whs2"># create vertices</p>\r
697 \r
698 <p class="whs1">p1 = geompy.MakeVertex(0,0,50)</p>\r
699 \r
700 <p class="whs1">p2 = geompy.MakeVertex(60,0,50)</p>\r
701 \r
702 <p class="whs1">&nbsp;</p>\r
703 \r
704 <p class="whs2"># make an edge</p>\r
705 \r
706 <p class="whs1">edge = geompy.MakeEdge(p1, \r
707  p2) #geompy.GetSubShape(box, edge_ind)</p>\r
708 \r
709 <p class="whs1">&nbsp;</p>\r
710 \r
711 <p class="whs2"># divide an edge</p>\r
712 \r
713 <p class="whs1">divide = geompy.DivideEdge(edge, \r
714  -1, 0.5, 0)</p>\r
715 \r
716 <p class="whs1">&nbsp;</p>\r
717 \r
718 <p class="whs2"># add objects in the \r
719  study</p>\r
720 \r
721 <p class="whs1">id_edge = geompy.addToStudy(edge, \r
722  &quot;Edge&quot;)</p>\r
723 \r
724 <p class="whs1">edge_points = geompy.SubShapeAllSorted(edge, \r
725  geompy.ShapeType[&quot;VERTEX&quot;])</p>\r
726 \r
727 <p class="whs1">for point in edge_points:</p>\r
728 \r
729 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;geompy.addToStudyInFather(edge, \r
730  point, &quot;Edge's point&quot;)</p>\r
731 \r
732 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;</p>\r
733 \r
734 <p class="whs1">id_divide = geompy.addToStudy(divide, \r
735  &quot;Divided edge&quot;)</p>\r
736 \r
737 <p class="whs1">edge_points = geompy.SubShapeAllSorted(divide, \r
738  geompy.ShapeType[&quot;VERTEX&quot;])</p>\r
739 \r
740 <p class="whs1">for point in edge_points:</p>\r
741 \r
742 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;geompy.addToStudyInFather(divide, \r
743  point, &quot;Edge's point after divide&quot;)</p>\r
744 \r
745 <p class="whs1">&nbsp;&nbsp;</p>\r
746 \r
747 <p class="whs1">salome.sg.updateObjBrowser(1) \r
748  </p>\r
749 \r
750 <p class="whs2">&nbsp;</p>\r
751 \r
752 <h3><a name=bookmark8>Check Free Boundaries</a></h3>\r
753 \r
754 <p class="whs1">import os</p>\r
755 \r
756 <p class="whs1">import geompy</p>\r
757 \r
758 <p class="whs1">import salome</p>\r
759 \r
760 <p class="whs1">gg = salome.ImportComponentGUI(&quot;GEOM&quot;)</p>\r
761 \r
762 <p class="whs2">&nbsp;</p>\r
763 \r
764 <p class="whs2"># create boxes</p>\r
765 \r
766 <p class="whs1">box1 = geompy.MakeBox(0,0,0,100,50,100)</p>\r
767 \r
768 <p class="whs1">box2 = geompy.MakeBox(100,0,0,250,50,100)</p>\r
769 \r
770 <p class="whs2">&nbsp;</p>\r
771 \r
772 <p class="whs2"># make a compound</p>\r
773 \r
774 <p class="whs1">compound = geompy.MakeCompound([box1, \r
775  box2])</p>\r
776 \r
777 <p class="whs2">&nbsp;</p>\r
778 \r
779 <p class="whs2"># import from *.brep</p>\r
780 \r
781 <p class="whs1">ImportBREP = geompy.ImportBREP(&quot;ImportBREP \r
782  = <span style="font-family: 'Lucida Console', monospace;">geompy.ImportBREP(os.getenv(&quot;DATA_DIR&quot;)+&quot;/Shapes/Brep/flight_solid.brep&quot;)</span></p>\r
783 \r
784 <p class="whs2">&nbsp;</p>\r
785 \r
786 <p class="whs2"># get a face</p>\r
787 \r
788 <p class="whs1">faces = geompy.SubShapeAllSorted(ImportBREP, \r
789  geompy.ShapeType[&quot;FACE&quot;])</p>\r
790 \r
791 <p class="whs2">&nbsp;</p>\r
792 \r
793 <p class="whs2"># get the free boundary \r
794  for face 32</p>\r
795 \r
796 <p class="whs1">Res = geompy.GetFreeBoundary(faces[32])</p>\r
797 \r
798 <p class="whs1">isSuccess &nbsp;&nbsp;= \r
799  Res[0]</p>\r
800 \r
801 <p class="whs1">ClosedWires = Res[1]</p>\r
802 \r
803 <p class="whs1">OpenWires &nbsp;&nbsp;= \r
804  Res[2]</p>\r
805 \r
806 <p class="whs2">&nbsp;&nbsp;</p>\r
807 \r
808 <p class="whs2">i<span style="font-family: 'Lucida Console', monospace;">f \r
809  isSuccess == 1 :</span></p>\r
810 \r
811 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
812  &quot;Checking free boudaries is OK.&quot;</p>\r
813 \r
814 <p class="whs1">else :</p>\r
815 \r
816 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
817  &quot;Checking free boudaries is KO!&quot;</p>\r
818 \r
819 <p class="whs1">print &quot;len(ClosedWires) \r
820  = &quot;, len(ClosedWires)</p>\r
821 \r
822 <p class="whs1">i = 0</p>\r
823 \r
824 <p class="whs1">for wire in ClosedWires \r
825  :</p>\r
826 \r
827 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;wire_name \r
828  = &quot;Face 32 -&gt; Close wires : WIRE %d&quot;%(i+1)</p>\r
829 \r
830 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;geompy.addToStudy(ClosedWires[i], \r
831  wire_name)</p>\r
832 \r
833 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;if \r
834  i &lt; len(ClosedWires) :</p>\r
835 \r
836 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i \r
837  = i+ 1</p>\r
838 \r
839 <p class="whs1">print &quot;len(OpenWires) \r
840  = &quot;, len(OpenWires)</p>\r
841 \r
842 <p class="whs1">i = 0</p>\r
843 \r
844 <p class="whs1">for wire in OpenWires \r
845  :</p>\r
846 \r
847 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;wire_name \r
848  = &quot;Face 32 -&gt; Open wires : WIRE %d&quot;%(i+1)</p>\r
849 \r
850 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;geompy.addToStudy(OpenWires[i], \r
851  wire_name)</p>\r
852 \r
853 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;if \r
854  i &lt; len(OpenWires) :</p>\r
855 \r
856 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i \r
857  = i+ 1</p>\r
858 \r
859 <p class="whs2">&nbsp;</p>\r
860 \r
861 <p class="whs2"># get the free boundary \r
862  for face 41</p>\r
863 \r
864 <p class="whs1">Res = geompy.GetFreeBoundary(faces[41])</p>\r
865 \r
866 <p class="whs1">isSuccess &nbsp;&nbsp;= \r
867  Res[0]</p>\r
868 \r
869 <p class="whs1">ClosedWires = Res[1]</p>\r
870 \r
871 <p class="whs1">OpenWires &nbsp;&nbsp;= \r
872  Res[2]</p>\r
873 \r
874 <p class="whs1">&nbsp;&nbsp;</p>\r
875 \r
876 <p class="whs1">if isSuccess == 1 \r
877  :</p>\r
878 \r
879 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
880  &quot;Checking free boudaries is OK.&quot;</p>\r
881 \r
882 <p class="whs1">else :</p>\r
883 \r
884 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
885  &quot;Checking free boudaries is KO!&quot;</p>\r
886 \r
887 <p class="whs1">print &quot;len(ClosedWires) \r
888  = &quot;, len(ClosedWires)</p>\r
889 \r
890 <p class="whs1">i = 0</p>\r
891 \r
892 <p class="whs1">for wire in ClosedWires \r
893  :</p>\r
894 \r
895 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;wire_name \r
896  = &quot;Face 41 -&gt; Close wires : WIRE %d&quot;%(i+1)</p>\r
897 \r
898 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;geompy.addToStudy(ClosedWires[i], \r
899  wire_name)</p>\r
900 \r
901 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;if \r
902  i &lt; len(ClosedWires) :</p>\r
903 \r
904 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i \r
905  = i+ 1</p>\r
906 \r
907 <p class="whs1">print &quot;len(OpenWires) \r
908  = &quot;, len(OpenWires)</p>\r
909 \r
910 <p class="whs1">i = 0</p>\r
911 \r
912 <p class="whs1">for wire in OpenWires \r
913  :</p>\r
914 \r
915 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;wire_name \r
916  = &quot;Face 41 -&gt; Open wires : WIRE %d&quot;%(i+1)</p>\r
917 \r
918 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;geompy.addToStudy(OpenWires[i], \r
919  wire_name)</p>\r
920 \r
921 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;if \r
922  i &lt; len(OpenWires) :</p>\r
923 \r
924 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i \r
925  = i+ 1</p>\r
926 \r
927 <p class="whs2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>\r
928 \r
929 <p class="whs2"># add the imported object \r
930  to the study</p>\r
931 \r
932 <p class="whs1">id_ImportBREP = geompy.addToStudy(ImportBREP, \r
933  &quot;ImportBREP&quot;)</p>\r
934 \r
935 <p class="whs2"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
936  </p>\r
937 \r
938 <p class="whs2">&nbsp;</p>\r
939 \r
940 <h3><a name=bookmark9>Check Free Faces</a></h3>\r
941 \r
942 <p class="whs1">import geompy</p>\r
943 \r
944 <p class="whs1">import salome</p>\r
945 \r
946 <p class="whs1">gg = salome.ImportComponentGUI(&quot;GEOM&quot;)</p>\r
947 \r
948 <p>&nbsp;</p>\r
949 \r
950 <p># create a vertex and a vector</p>\r
951 \r
952 <p class="whs1">p1 = geompy.MakeVertex(35, \r
953  35, 0)</p>\r
954 \r
955 <p class="whs1">p2 = geompy.MakeVertex(35, \r
956  35, 50)</p>\r
957 \r
958 <p class="whs1">v = geompy.MakeVector(p1, \r
959  p2)</p>\r
960 \r
961 <p>&nbsp;</p>\r
962 \r
963 <p># create a cylinder</p>\r
964 \r
965 <p class="whs1">cylinder = geompy.MakeCone(p1, \r
966  v, 30, 20, 20)</p>\r
967 \r
968 <p>&nbsp;</p>\r
969 \r
970 <p># create a cone</p>\r
971 \r
972 <p class="whs1">cone = geompy.MakeCone(p1, \r
973  v, 70, 40, 60)</p>\r
974 \r
975 <p>&nbsp;</p>\r
976 \r
977 <p># make cut</p>\r
978 \r
979 <p class="whs1">cut = geompy.MakeCut(cone, \r
980  cylinder)</p>\r
981 \r
982 <p>&nbsp;</p>\r
983 \r
984 <p># get faces as sub-shapes</p>\r
985 \r
986 <p class="whs1">faces = []</p>\r
987 \r
988 <p class="whs1">faces = geompy.SubShapeAllSorted(cut, \r
989  geompy.ShapeType[&quot;FACE&quot;])</p>\r
990 \r
991 <p class="whs1">f_2 = geompy.GetSubShapeID(cut, \r
992  faces[0])</p>\r
993 \r
994 <p>&nbsp;</p>\r
995 \r
996 <p># remove one face from the shape</p>\r
997 \r
998 <p class="whs1">cut_without_f_2 = \r
999  geompy.SuppressFaces(cut, [f_2])</p>\r
1000 \r
1001 <p>&nbsp;</p>\r
1002 \r
1003 <p># suppress the specified wire</p>\r
1004 \r
1005 <p class="whs1">result = geompy.GetFreeFacesIDs(cut_without_f_2)</p>\r
1006 \r
1007 <p class="whs1">print &quot;A number \r
1008  of free faces is &quot;, len(result)</p>\r
1009 \r
1010 <p>&nbsp;</p>\r
1011 \r
1012 <p># add objects in the study</p>\r
1013 \r
1014 <p class="whs1">all_faces = geompy.SubShapeAllSorted(cut_without_f_2, \r
1015  geompy.ShapeType[&quot;FACE&quot;])</p>\r
1016 \r
1017 <p class="whs1">for face in all_faces \r
1018  :</p>\r
1019 \r
1020 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;sub_shape_id \r
1021  = geompy.GetSubShapeID(cut_without_f_2, face)</p>\r
1022 \r
1023 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;if \r
1024  result.count(sub_shape_id) &gt; 0 :</p>\r
1025 \r
1026 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;face_name \r
1027  = &quot;Free face %d&quot;%(sub_shape_id)</p>\r
1028 \r
1029 <p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;geompy.addToStudy(face, \r
1030  face_name)</p>\r
1031 \r
1032 <p>&nbsp;</p>\r
1033 \r
1034 <p># in this example all faces from cut_without_f_2 are free</p>\r
1035 \r
1036 <p class="whs1">id_cut_without_f_2 \r
1037  = geompy.addToStudy(cut_without_f_2, &quot;Cut without f_2&quot;)</p>\r
1038 \r
1039 <p>&nbsp;</p>\r
1040 \r
1041 <p># display the results</p>\r
1042 \r
1043 <p class="whs1">gg.createAndDisplayGO(id_cut_without_f_2)</p>\r
1044 \r
1045 <p><span style="font-family: 'Lucida Console', monospace;">gg.setDisplayMode(id_cut_without_f_2,1)</span> \r
1046  </p>\r
1047 \r
1048 <script type="text/javascript" language="javascript1.2">\r
1049 <!--\r
1050 if (window.writeIntopicBar)\r
1051         writeIntopicBar(0);\r
1052 //-->\r
1053 </script>\r
1054 </body>\r
1055 </html>\r