Salome HOME
MPV: Porting to the Python 2.3 and higher: Python includes must be before Qt includes...
[modules/geom.git] / src / GEOM_SWIG / geompy.py
index 656c22bae6f23deaefec4febb5957b8e171bd8ea..a561d6e84cb03ed85bba87a2ad15c5431b358a71 100644 (file)
@@ -2331,6 +2331,30 @@ def RemoveObject(theGroup, theSubShapeID):
     if GroupOp.IsDone() == 0:
       print "RemoveObject : ", GroupOp.GetErrorCode()
 
+def UnionList (theGroup, theSubShapes):
+    """
+     *  Adds to the group all the given shapes. No errors, if some shapes are alredy included.
+     *  \param theGroup is a GEOM group to which the new sub shapes are added.
+     *  \param theSubShapes is a list of sub shapes to be added.
+
+     *  Example: see GEOM_TestOthers.py
+    """
+    GroupOp.UnionList(theGroup, theSubShapes)
+    if GroupOp.IsDone() == 0:
+      print "UnionList : ", GroupOp.GetErrorCode()
+
+def DifferenceList (theGroup, theSubShapes):
+    """
+     *  Removes from the group all the given shapes. No errors, if some shapes are not included.
+     *  \param theGroup is a GEOM group from which the sub-shapes are removed.
+     *  \param theSubShapes is a list of sub-shapes to be removed.
+
+     *  Example: see GEOM_TestOthers.py
+    """
+    GroupOp.DifferenceList(theGroup, theSubShapes)
+    if GroupOp.IsDone() == 0:
+      print "DifferenceList : ", GroupOp.GetErrorCode()
+
 def GetObjectIDs(theGroup):
     """
      *  Returns a list of sub objects ID stored in the group
@@ -2368,6 +2392,65 @@ def GetMainShape(theGroup):
       print "GetMainShape : ", GroupOp.GetErrorCode()
     return anObj
 
+def GetEdgesByLength (theShape, min_length, max_length, include_min = 1, include_max = 1):
+    """
+    Create group of edges of theShape, whose length is in range [min_length, max_length].
+    If include_min/max == 0, edges with length == min/max_length will not be included in result.
+    """
+
+    edges = SubShapeAll(theShape, ShapeType["EDGE"])
+    edges_in_range = []
+    for edge in edges:
+        Props = BasicProperties(edge)
+       if min_length <= Props[0] and Props[0] <= max_length:
+           if (not include_min) and (min_length == Props[0]):
+               skip = 1
+            else:
+               if (not include_max) and (Props[0] == max_length):
+                   skip = 1
+                else:
+                   edges_in_range.append(edge)
+
+    if len(edges_in_range) <= 0:
+        print "No edges found by given criteria"
+       return 0
+
+    group_edges = CreateGroup(theShape, ShapeType["EDGE"])
+    UnionList(group_edges, edges_in_range)
+
+    return group_edges
+
+def SelectEdges (min_length, max_length, include_min = 1, include_max = 1):
+    """
+    Create group of edges of selected shape, whose length is in range [min_length, max_length].
+    If include_min/max == 0, edges with length == min/max_length will not be included in result.
+    """
+
+    nb_selected = sg.SelectedCount()
+    if nb_selected < 1:
+        print "Select a shape before calling this function, please."
+       return 0
+    if nb_selected > 1:
+        print "Only one shape must be selected"
+       return 0
+
+    id_shape = sg.getSelected(0)
+    shape = IDToObject( id_shape )
+
+    group_edges = GetEdgesByLength(shape, min_length, max_length, include_min, include_max)
+
+    left_str  = " < "
+    right_str = " < "
+    if include_min: left_str  = " <= "
+    if include_max: right_str  = " <= "
+
+    addToStudyInFather(shape, group_edges, "Group of edges with " + `min_length`
+                      + left_str + "length" + right_str + `max_length`)
+
+    sg.updateObjBrowser(1)
+
+    return group_edges
+
 def addPath(Path):
     """
      * Add Path to load python scripts from