<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">

<html>

<head>
<title>Repairing Operations</title>
<meta http-equiv="content-type" content="text/html; charset=windows-1252">
<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">
<link rel="stylesheet" href="default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">
<!--
if (navigator.appName !="Netscape")
{   document.write("<link rel='stylesheet' href='default.css'>");}
//-->
</script>
<style type="text/css">
<!--
p.whs1 { font-family:'Lucida Console' , monospace; }
p.whs2 { font-family:'Times New Roman' , serif; }
-->
</style><script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">
<!--
function reDo() {
  if (innerWidth != origWidth || innerHeight != origHeight)
     location.reload();
}
if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {
	origWidth = innerWidth;
	origHeight = innerHeight;
	onresize = reDo;
}
onerror = null; 
//-->
</script>
<style type="text/css">
<!--
div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }
p.WebHelpNavBar { text-align:right; }
-->
</style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>
<script type="text/javascript" language="javascript" src="whver.js"></script>
<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>
<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>
<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>
<script type="text/javascript" language="javascript1.2">
<!--
if (window.gbWhTopic)
{
	if (window.setRelStartPage)
	{
	addTocInfo("Geometry module\nTUI Scripts\nTransformation\nRepairing Operations");
addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");
addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");

	}


	if (window.setRelStartPage)
	{
	setRelStartPage("index.htm");

		autoSync(1);
		sendSyncInfo();
		sendAveInfoOut();
	}

}
else
	if (window.gbIE4)
		document.location.reload();
//-->
</script>
</head>
<body><script type="text/javascript" language="javascript1.2">
<!--
if (window.writeIntopicBar)
	writeIntopicBar(4);
//-->
</script>
<h1>Repairing Operations</h1>

<h3><a name=bookmark>Shape Processing</a></h3>

<p class="whs1">import geompy</p>

<p class="whs1">import salome</p>

<p class="whs1">gg = salome.ImportComponentGUI(&quot;GEOM&quot;)</p>

<p>&nbsp;</p>

<p># create vertices, an edge, an arc, a wire, a face and a prism</p>

<p class="whs1">p1 = geompy.MakeVertex(0,0,0)</p>

<p class="whs1">p2 = geompy.MakeVertex(200,0,0)</p>

<p class="whs1">p3 = geompy.MakeVertex(100,150,0)</p>

<p class="whs1">edge = geompy.MakeEdge(p1,p2)</p>

<p class="whs1">arc &nbsp;= 
 geompy.MakeArc(p1,p3,p2)</p>

<p class="whs1">wire = geompy.MakeWire([edge,arc])</p>

<p class="whs1">face = geompy.MakeFace(wire, 
 1)</p>

<p class="whs1">theShape = geompy.MakePrismVecH(face, 
 edge, 130)</p>

<p>&nbsp;</p>

<p># check the shape at the beginning</p>

<p class="whs1">print &quot;Before 
 ProcessShape:&quot;</p>

<p class="whs1">isValid = geompy.CheckShape(theShape)</p>

<p class="whs1">if isValid == 0:</p>

<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print 
 &quot;The shape is not valid&quot;</p>

<p class="whs1">else:</p>

<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print 
 &quot;The shape seems to be valid&quot;</p>

<p class="whs1">&nbsp;</p>

<p># process the Shape</p>

<p class="whs1">Operators = [&quot;FixShape&quot;]</p>

<p class="whs1">Parameters = [&quot;FixShape.Tolerance3d&quot;]</p>

<p class="whs1">Values = [&quot;1e-7&quot;]</p>

<p class="whs1">PS = geompy.ProcessShape(theShape, 
 Operators, Parameters, Values)</p>

<p>&nbsp;</p>

<p># check the shape at the end</p>

<p class="whs1">print &quot;After 
 ProcessShape:&quot;</p>

<p class="whs1">isValid = geompy.CheckShape(PS)</p>

<p class="whs1">if isValid == 0:</p>

<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print 
 &quot;The shape is not valid&quot;</p>

<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;raise 
 RuntimeError, &quot;It seems, that the ProcessShape() has failed&quot;</p>

<p class="whs1">else:</p>

<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print 
 &quot;The shape seems to be valid&quot;</p>

<p>&nbsp;</p>

<p># add in the study and display</p>

<p class="whs1">Id_Shape = geompy.addToStudy(theShape, 
 &quot;Invalid Shape&quot;)</p>

<p class="whs1">Id_PS &nbsp;&nbsp;&nbsp;= 
 geompy.addToStudy(PS, &quot;Processed Shape&quot;)</p>

<p class="whs1">gg.createAndDisplayGO(Id_Shape)</p>

<p class="whs1">gg.setDisplayMode(Id_Shape,1)</p>

<p class="whs1">gg.createAndDisplayGO(Id_PS)</p>

<p><span style="font-family: 'Lucida Console', monospace;">gg.setDisplayMode(Id_PS,1)</span> 
 </p>

<p>&nbsp;</p>

<h3><a name=bookmark1>Suppress Faces</a></h3>

<p class="whs1">import geompy</p>

<p class="whs1">import salome</p>

<p class="whs1">gg = salome.ImportComponentGUI(&quot;GEOM&quot;)</p>

<p>&nbsp;</p>

<p># create a box</p>

<p class="whs1">box = geompy.MakeBoxDXDYDZ(200, 
 200, 200)</p>

<p>&nbsp;</p>

<p># The list of IDs (IDList) for suppress faces</p>

<p class="whs1">sup_faces = []</p>

<p class="whs1">sup_faces = geompy.SubShapeAllSorted(box, 
 geompy.ShapeType[&quot;FACE&quot;])</p>

<p>&nbsp;</p>

<p># get indices of the sub-shape </p>

<p class="whs1">f1_id = geompy.GetSubShapeID(box, 
 sup_faces[3])</p>

<p>&nbsp;</p>

<p># remove faces from the given object (shape)</p>

<p class="whs1">result = geompy.SuppressFaces(box, 
 [f1_id])</p>

<p>&nbsp;</p>

<p># add objects in the study</p>

<p class="whs1">id_box = geompy.addToStudy(box, 
 &quot;Box&quot;)</p>

<p class="whs1">id_result = geompy.addToStudy(result, 
 &quot;Result&quot;)</p>

<p>&nbsp;</p>

<p># display the results</p>

<p class="whs1">gg.createAndDisplayGO(id_box)</p>

<p class="whs1">gg.setDisplayMode(id_box,1)</p>

<p class="whs1">gg.createAndDisplayGO(id_result)</p>

<p><span style="font-family: 'Lucida Console', monospace;">gg.setDisplayMode(id_result,1)</span> 
 </p>

<p>&nbsp;</p>

<h3><a name=bookmark2>Close Contour</a></h3>

<p class="whs1">import geompy</p>

<p class="whs1">import salome</p>

<p class="whs1">gg = salome.ImportComponentGUI(&quot;GEOM&quot;)</p>

<p>&nbsp;</p>

<p># create vertices and vectors</p>

<p class="whs1">p0 &nbsp;= 
 geompy.MakeVertex( &nbsp;0., 
 &nbsp;&nbsp;0., 
 &nbsp;&nbsp;0.)</p>

<p class="whs1">px &nbsp;= 
 geompy.MakeVertex(100., &nbsp;&nbsp;0., 
 &nbsp;&nbsp;0.)</p>

<p class="whs1">py &nbsp;= 
 geompy.MakeVertex( &nbsp;0., 
 100., &nbsp;&nbsp;0.)</p>

<p class="whs1">py1 = geompy.MakeVertex( 
 &nbsp;0., 140., 
 &nbsp;&nbsp;0.)</p>

<p class="whs1">pz &nbsp;= 
 geompy.MakeVertex( &nbsp;0., 
 &nbsp;&nbsp;0., 
 100.)</p>

<p class="whs1">vxy = geompy.MakeVector(px, 
 py)</p>

<p>&nbsp;&nbsp;</p>

<p># create an arc</p>

<p class="whs1">arc = geompy.MakeArc(py1, 
 pz, px)</p>

<p>&nbsp;</p>

<p># create a wire</p>

<p class="whs1">wire = geompy.MakeWire([vxy, 
 arc])</p>

<p>&nbsp;</p>

<p># close an open wire by creation of an edge between ends</p>

<p class="whs1">wire_close = geompy.CloseContour(wire, 
 [1], 0)</p>

<p>&nbsp;</p>

<p># add objects in the study</p>

<p class="whs1">id_wire = geompy.addToStudy(wire, 
 &quot;Wire&quot;)</p>

<p class="whs1">id_wire_close = geompy.addToStudy(wire_close, 
 &quot;Wire close&quot;)</p>

<p>&nbsp;</p>

<p># display the results</p>

<p class="whs1">gg.createAndDisplayGO(id_wire)</p>

<p><span style="font-family: 'Lucida Console', monospace;">gg.createAndDisplayGO(id_wire_close)</span> 
 </p>

<p>&nbsp;</p>

<h3><a name=bookmark3>Suppress Internal Wires</a></h3>

<p class="whs1">import geompy</p>

<p class="whs1">import salome</p>

<p class="whs1">gg = salome.ImportComponentGUI(&quot;GEOM&quot;)</p>

<p>&nbsp;</p>

<p># create a vertex and a vector</p>

<p class="whs1">p1 = geompy.MakeVertex(55, 
 65, 50)</p>

<p class="whs1">p2 = geompy.MakeVertex(55, 
 &nbsp;0, 50)</p>

<p class="whs1">v = geompy.MakeVector(p1, 
 p2)</p>

<p>&nbsp;</p>

<p># create a cylinder</p>

<p class="whs1">height = 100</p>

<p class="whs1">radius1 = 40</p>

<p class="whs1">cylinder = geompy.MakeCylinder(p1, 
 v, radius1, height)</p>

<p>&nbsp;</p>

<p># create a box</p>

<p class="whs1">box = geompy.MakeBoxDXDYDZ(100, 
 100, 100)</p>

<p>&nbsp;</p>

<p># make a cut</p>

<p class="whs1">cut = geompy.MakeCut(box, 
 cylinder)</p>

<p>&nbsp;</p>

<p># suppress all internal wires</p>

<p class="whs1">result = geompy.SuppressInternalWires(cut, 
 [])</p>

<p>&nbsp;</p>

<p># add objects in the study</p>

<p class="whs1">id_cut = geompy.addToStudy(cut, 
 &quot;Cut&quot;)</p>

<p class="whs1">id_result = geompy.addToStudy(result, 
 &quot;Result&quot;)</p>

<p>&nbsp;</p>

<p># display the results</p>

<p class="whs1">gg.createAndDisplayGO(id_cut)</p>

<p class="whs1">gg.setDisplayMode(id_cut,1)</p>

<p class="whs1">gg.createAndDisplayGO(id_result)</p>

<p><span style="font-family: 'Lucida Console', monospace;">gg.setDisplayMode(id_result,1)</span> 
 </p>

<p>&nbsp;</p>

<h3><a name=bookmark4>Suppress Holes</a></h3>

<p class="whs1">import geompy</p>

<p class="whs1">import salome</p>

<p class="whs1">gg = salome.ImportComponentGUI(&quot;GEOM&quot;)</p>

<p>&nbsp;</p>

<p># create a vertex and a vector</p>

<p class="whs1">p1 = geompy.MakeVertex(35, 
 35, 0)</p>

<p class="whs1">p2 = geompy.MakeVertex(35, 
 35, 50)</p>

<p class="whs1">v = geompy.MakeVector(p1, 
 p2)</p>

<p>&nbsp;</p>

<p># create a cylinder</p>

<p class="whs1">height = 20</p>

<p class="whs1">radius1 = 20</p>

<p class="whs1">cylinder = geompy.MakeCylinder(p1, 
 v, radius1, height)</p>

<p>&nbsp;</p>

<p># create a cone</p>

<p class="whs1">cone = geompy.MakeCone(p1, 
 v, 70, 0, 80)</p>

<p>&nbsp;</p>

<p># make a cut</p>

<p class="whs1">cut = geompy.MakeCut(cone, 
 cylinder)</p>

<p>&nbsp;</p>

<p># get faces as sub-shapes</p>

<p class="whs1">faces = []</p>

<p class="whs1">faces = geompy.SubShapeAllSorted(cut, 
 geompy.ShapeType[&quot;FACE&quot;])</p>

<p class="whs1">f_2 = geompy.GetSubShapeID(cut, 
 faces[2])</p>

<p>&nbsp;</p>

<p># remove one face from the shape</p>

<p class="whs1">cut_without_f_2 = 
 geompy.SuppressFaces(cut, [f_2])</p>

<p>&nbsp;</p>

<p># get wires as sub-shapes</p>

<p class="whs1">wires = []</p>

<p class="whs1">wires = geompy.SubShapeAllSorted(cut_without_f_2, 
 geompy.ShapeType[&quot;WIRE&quot;])</p>

<p class="whs1">w_0 = geompy.GetSubShapeID(cut_without_f_2, 
 wires[0])</p>

<p>&nbsp;</p>

<p># suppress the selected wire</p>

<p class="whs1">result = geompy.SuppressHoles(cut_without_f_2, 
 [w_0])</p>

<p>&nbsp;</p>

<p># add objects in the study</p>

<p class="whs1">id_cut = geompy.addToStudy(cut, 
 &quot;Cut&quot;)</p>

<p class="whs1">id_cut_without_f_2 
 = geompy.addToStudy(cut_without_f_2, &quot;Cut without f_2&quot;)</p>

<p class="whs1">id_result = geompy.addToStudy(result, 
 &quot;Result&quot;)</p>

<p>&nbsp;</p>

<p># display the results</p>

<p class="whs1">gg.createAndDisplayGO(id_cut)</p>

<p class="whs1">gg.setDisplayMode(id_cut,1)</p>

<p class="whs1">gg.createAndDisplayGO(id_cut_without_f_2)</p>

<p class="whs1">gg.setDisplayMode(id_cut_without_f_2,1)</p>

<p class="whs1">gg.createAndDisplayGO(id_result)</p>

<p><span style="font-family: 'Lucida Console', monospace;">gg.setDisplayMode(id_result,1)</span> 
 </p>

<p>&nbsp;</p>

<h3><a name=bookmark5>Sewing</a></h3>

<p class="whs1">import geompy</p>

<p class="whs1">import salome</p>

<p class="whs1">import math</p>

<p class="whs1">gg = salome.ImportComponentGUI(&quot;GEOM&quot;)</p>

<p>&nbsp;</p>

<p># create base points</p>

<p class="whs1">px = geompy.MakeVertex(100., 
 0., 0.)</p>

<p class="whs1">py = geompy.MakeVertex(0., 
 100., 0.)</p>

<p class="whs1">pz = geompy.MakeVertex(0., 
 0., 100.)</p>

<p>&nbsp;</p>

<p># create base geometry 2D &amp; 3D</p>

<p class="whs1">vector = geompy.MakeVector(px, 
 py)</p>

<p class="whs1">arc = geompy.MakeArc(py, 
 pz, px)</p>

<p>&nbsp;</p>

<p># create base objects</p>

<p class="whs1">angle = 45. * math.pi 
 / 180</p>

<p class="whs1">WantPlanarFace = 1 
 #True</p>

<p class="whs1">wire = geompy.MakeWire([vector, 
 arc])</p>

<p class="whs1">face = geompy.MakeFace(wire, 
 WantPlanarFace)</p>

<p class="whs1">face_rot = geompy.MakeRotation(face, 
 vector, angle)</p>

<p>&nbsp;</p>

<p># make sewing</p>

<p class="whs1">precision = 0.00001</p>

<p class="whs1">sewing = geompy.MakeSewing([face, 
 face_rot], precision)</p>

<p>&nbsp;</p>

<p># add objects in the study</p>

<p class="whs1">id_face = geompy.addToStudy(face, 
 &quot;Face&quot;)</p>

<p class="whs1">id_face_rot = geompy.addToStudy(face_rot, 
 &quot;Face rotation&quot;)</p>

<p class="whs1">id_sewing = geompy.addToStudy(sewing, 
 &quot;Sewing&quot;)</p>

<p>&nbsp;</p>

<p># display the results</p>

<p class="whs1">gg.createAndDisplayGO(id_face)</p>

<p class="whs1">gg.setDisplayMode(id_face,1)</p>

<p class="whs1">gg.createAndDisplayGO(id_face_rot)</p>

<p class="whs1">gg.setDisplayMode(id_face_rot,1)</p>

<p class="whs1">gg.createAndDisplayGO(id_sewing)</p>

<p class="whs1">gg.setDisplayMode(id_sewing,1) 
 </p>

<p class="whs1">&nbsp;</p>

<h3><a name=bookmark6>Glue Faces</a></h3>

<p class="whs1"><span style="font-family: 'Lucida Console', monospace;">import 
 geompy</span></p>

<p class="whs1">import salome</p>

<p class="whs1">&nbsp;</p>

<p class="whs1">gg = salome.ImportComponentGUI(&quot;GEOM&quot;)</p>

<p class="whs1">&nbsp;</p>

<p class="whs2"># create boxes</p>

<p class="whs1">box1 = geompy.MakeBox(0,0,0,100,50,100)</p>

<p class="whs1">box2 = <span style="font-family: 'Lucida Console', monospace;">geompy.MakeBox(100,0,0,250,50,100)</span></p>

<p class="whs1">&nbsp;</p>

<p class="whs2"># make compound</p>

<p class="whs1">compound = geompy.MakeCompound([box1, 
 box2])</p>

<p class="whs1">&nbsp;</p>

<p class="whs2"># glue compound's faces</p>

<p class="whs1">tolerance = 1e-5</p>

<p class="whs1">glue = geompy.MakeGlueFaces(compound, 
 tolerance)</p>

<p class="whs1">&nbsp;</p>

<p class="whs2"># add objects in study</p>

<p class="whs1">id_box1 = geompy.addToStudy(box1, 
 &quot;Box1&quot;)</p>

<p class="whs1">id_box2 = geompy.addToStudy(box2, 
 &quot;Box2&quot;)</p>

<p class="whs1">id_compound = geompy.addToStudy(compound, 
 &quot;Compound&quot;)</p>

<p class="whs1">id_glue = geompy.addToStudy(glue, 
 &quot;Glue faces&quot;)</p>

<p class="whs1">&nbsp;</p>

<p class="whs2"># display results</p>

<p class="whs1">gg.createAndDisplayGO(id_box1)</p>

<p class="whs1">gg.setDisplayMode(id_box1,1)</p>

<p class="whs1">gg.createAndDisplayGO(id_box2)</p>

<p class="whs1">gg.setDisplayMode(id_box2,1)</p>

<p class="whs1">gg.createAndDisplayGO(id_compound)</p>

<p class="whs1">gg.setDisplayMode(id_compound,1)</p>

<p class="whs1">gg.createAndDisplayGO(id_glue)</p>

<p class="whs1">gg.setDisplayMode(id_glue,1) 
 </p>

<p class="whs1">&nbsp;</p>

<h3><a name=bookmark7>Add Point on Edge</a></h3>

<p class="whs1"><span style="font-family: 'Lucida Console', monospace;">import 
 geompy</span></p>

<p class="whs1">import salome</p>

<p class="whs1">&nbsp;</p>

<p class="whs2"># create vertices</p>

<p class="whs1">p1 = geompy.MakeVertex(0,0,50)</p>

<p class="whs1">p2 = geompy.MakeVertex(60,0,50)</p>

<p class="whs1">&nbsp;</p>

<p class="whs2"># make an edge</p>

<p class="whs1">edge = geompy.MakeEdge(p1, 
 p2) #geompy.GetSubShape(box, edge_ind)</p>

<p class="whs1">&nbsp;</p>

<p class="whs2"># divide an edge</p>

<p class="whs1">divide = geompy.DivideEdge(edge, 
 -1, 0.5, 0)</p>

<p class="whs1">&nbsp;</p>

<p class="whs2"># add objects in the 
 study</p>

<p class="whs1">id_edge = geompy.addToStudy(edge, 
 &quot;Edge&quot;)</p>

<p class="whs1">edge_points = geompy.SubShapeAllSorted(edge, 
 geompy.ShapeType[&quot;VERTEX&quot;])</p>

<p class="whs1">for point in edge_points:</p>

<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;geompy.addToStudyInFather(edge, 
 point, &quot;Edge's point&quot;)</p>

<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;</p>

<p class="whs1">id_divide = geompy.addToStudy(divide, 
 &quot;Divided edge&quot;)</p>

<p class="whs1">edge_points = geompy.SubShapeAllSorted(divide, 
 geompy.ShapeType[&quot;VERTEX&quot;])</p>

<p class="whs1">for point in edge_points:</p>

<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;geompy.addToStudyInFather(divide, 
 point, &quot;Edge's point after divide&quot;)</p>

<p class="whs1">&nbsp;&nbsp;</p>

<p class="whs1">salome.sg.updateObjBrowser(1) 
 </p>

<p class="whs2">&nbsp;</p>

<h3><a name=bookmark8>Check Free Boundaries</a></h3>

<p class="whs1">import os</p>

<p class="whs1">import geompy</p>

<p class="whs1">import salome</p>

<p class="whs1">gg = salome.ImportComponentGUI(&quot;GEOM&quot;)</p>

<p class="whs2">&nbsp;</p>

<p class="whs2"># create boxes</p>

<p class="whs1">box1 = geompy.MakeBox(0,0,0,100,50,100)</p>

<p class="whs1">box2 = geompy.MakeBox(100,0,0,250,50,100)</p>

<p class="whs2">&nbsp;</p>

<p class="whs2"># make a compound</p>

<p class="whs1">compound = geompy.MakeCompound([box1, 
 box2])</p>

<p class="whs2">&nbsp;</p>

<p class="whs2"># import from *.brep</p>

<p class="whs1">ImportBREP = geompy.ImportBREP(&quot;<span 
 style="font-family: 'Lucida Console', monospace;">os.getenv(&quot;DATA_DIR&quot;)+&quot;/Shapes/Brep/flight_solid.brep&quot;)</span></p>

<p class="whs2">&nbsp;</p>

<p class="whs2"># get a face</p>

<p class="whs1">faces = geompy.SubShapeAllSorted(ImportBREP, 
 geompy.ShapeType[&quot;FACE&quot;])</p>

<p class="whs2">&nbsp;</p>

<p class="whs2"># get the free boundary 
 for face 32</p>

<p class="whs1">Res = geompy.GetFreeBoundary(faces[32])</p>

<p class="whs1">isSuccess &nbsp;&nbsp;= 
 Res[0]</p>

<p class="whs1">ClosedWires = Res[1]</p>

<p class="whs1">OpenWires &nbsp;&nbsp;= 
 Res[2]</p>

<p class="whs2">&nbsp;&nbsp;</p>

<p class="whs2">i<span style="font-family: 'Lucida Console', monospace;">f 
 isSuccess == 1 :</span></p>

<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print 
 &quot;Checking free boudaries is OK.&quot;</p>

<p class="whs1">else :</p>

<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print 
 &quot;Checking free boudaries is KO!&quot;</p>

<p class="whs1">print &quot;len(ClosedWires) 
 = &quot;, len(ClosedWires)</p>

<p class="whs1">i = 0</p>

<p class="whs1">for wire in ClosedWires 
 :</p>

<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;wire_name 
 = &quot;Face 32 -&gt; Close wires : WIRE %d&quot;%(i+1)</p>

<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;geompy.addToStudy(ClosedWires[i], 
 wire_name)</p>

<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;if 
 i &lt; len(ClosedWires) :</p>

<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i 
 = i+ 1</p>

<p class="whs1">print &quot;len(OpenWires) 
 = &quot;, len(OpenWires)</p>

<p class="whs1">i = 0</p>

<p class="whs1">for wire in OpenWires 
 :</p>

<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;wire_name 
 = &quot;Face 32 -&gt; Open wires : WIRE %d&quot;%(i+1)</p>

<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;geompy.addToStudy(OpenWires[i], 
 wire_name)</p>

<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;if 
 i &lt; len(OpenWires) :</p>

<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i 
 = i+ 1</p>

<p class="whs2">&nbsp;</p>

<p class="whs2"># get the free boundary 
 for face 41</p>

<p class="whs1">Res = geompy.GetFreeBoundary(faces[41])</p>

<p class="whs1">isSuccess &nbsp;&nbsp;= 
 Res[0]</p>

<p class="whs1">ClosedWires = Res[1]</p>

<p class="whs1">OpenWires &nbsp;&nbsp;= 
 Res[2]</p>

<p class="whs1">&nbsp;&nbsp;</p>

<p class="whs1">if isSuccess == 1 
 :</p>

<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print 
 &quot;Checking free boudaries is OK.&quot;</p>

<p class="whs1">else :</p>

<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print 
 &quot;Checking free boudaries is KO!&quot;</p>

<p class="whs1">print &quot;len(ClosedWires) 
 = &quot;, len(ClosedWires)</p>

<p class="whs1">i = 0</p>

<p class="whs1">for wire in ClosedWires 
 :</p>

<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;wire_name 
 = &quot;Face 41 -&gt; Close wires : WIRE %d&quot;%(i+1)</p>

<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;geompy.addToStudy(ClosedWires[i], 
 wire_name)</p>

<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;if 
 i &lt; len(ClosedWires) :</p>

<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i 
 = i+ 1</p>

<p class="whs1">print &quot;len(OpenWires) 
 = &quot;, len(OpenWires)</p>

<p class="whs1">i = 0</p>

<p class="whs1">for wire in OpenWires 
 :</p>

<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;wire_name 
 = &quot;Face 41 -&gt; Open wires : WIRE %d&quot;%(i+1)</p>

<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;geompy.addToStudy(OpenWires[i], 
 wire_name)</p>

<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;if 
 i &lt; len(OpenWires) :</p>

<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i 
 = i+ 1</p>

<p class="whs2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>

<p class="whs2"># add the imported object 
 to the study</p>

<p class="whs1">id_ImportBREP = geompy.addToStudy(ImportBREP, 
 &quot;ImportBREP&quot;)</p>

<p class="whs2"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> 
 </p>

<p class="whs2">&nbsp;</p>

<h3><a name=bookmark9>Check Free Faces</a></h3>

<p class="whs1">import geompy</p>

<p class="whs1">import salome</p>

<p class="whs1">gg = salome.ImportComponentGUI(&quot;GEOM&quot;)</p>

<p>&nbsp;</p>

<p># create a vertex and a vector</p>

<p class="whs1">p1 = geompy.MakeVertex(35, 
 35, 0)</p>

<p class="whs1">p2 = geompy.MakeVertex(35, 
 35, 50)</p>

<p class="whs1">v = geompy.MakeVector(p1, 
 p2)</p>

<p>&nbsp;</p>

<p># create a cylinder</p>

<p class="whs1">cylinder = geompy.MakeCone(p1, 
 v, 30, 20, 20)</p>

<p>&nbsp;</p>

<p># create a cone</p>

<p class="whs1">cone = geompy.MakeCone(p1, 
 v, 70, 40, 60)</p>

<p>&nbsp;</p>

<p># make cut</p>

<p class="whs1">cut = geompy.MakeCut(cone, 
 cylinder)</p>

<p>&nbsp;</p>

<p># get faces as sub-shapes</p>

<p class="whs1">faces = []</p>

<p class="whs1">faces = geompy.SubShapeAllSorted(cut, 
 geompy.ShapeType[&quot;FACE&quot;])</p>

<p class="whs1">f_2 = geompy.GetSubShapeID(cut, 
 faces[0])</p>

<p>&nbsp;</p>

<p># remove one face from the shape</p>

<p class="whs1">cut_without_f_2 = 
 geompy.SuppressFaces(cut, [f_2])</p>

<p>&nbsp;</p>

<p># suppress the specified wire</p>

<p class="whs1">result = geompy.GetFreeFacesIDs(cut_without_f_2)</p>

<p class="whs1">print &quot;A number 
 of free faces is &quot;, len(result)</p>

<p>&nbsp;</p>

<p># add objects in the study</p>

<p class="whs1">all_faces = geompy.SubShapeAllSorted(cut_without_f_2, 
 geompy.ShapeType[&quot;FACE&quot;])</p>

<p class="whs1">for face in all_faces 
 :</p>

<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;sub_shape_id 
 = geompy.GetSubShapeID(cut_without_f_2, face)</p>

<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;if 
 result.count(sub_shape_id) &gt; 0 :</p>

<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;face_name 
 = &quot;Free face %d&quot;%(sub_shape_id)</p>

<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;geompy.addToStudy(face, 
 face_name)</p>

<p>&nbsp;</p>

<p># in this example all faces from cut_without_f_2 are free</p>

<p class="whs1">id_cut_without_f_2 
 = geompy.addToStudy(cut_without_f_2, &quot;Cut without f_2&quot;)</p>

<p>&nbsp;</p>

<p># display the results</p>

<p class="whs1">gg.createAndDisplayGO(id_cut_without_f_2)</p>

<p><span style="font-family: 'Lucida Console', monospace;">gg.setDisplayMode(id_cut_without_f_2,1)</span> 
 </p>

<script type="text/javascript" language="javascript1.2">
<!--
if (window.writeIntopicBar)
	writeIntopicBar(0);
//-->
</script>
</body>
</html>