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