Salome HOME
Mantis issue 0021020: RestoreSubShapes in multi- translation/rotation.
[modules/geom.git] / idl / GEOM_Gen.idl
index 62e06e21768028a3d03b5e0e718a42fa248ebddb..13c258f3969e3ebd6cbd40f1e6d19a1ccb0a39f7 100644 (file)
@@ -1,4 +1,4 @@
-//  Copyright (C) 2007-2008  CEA/DEN, EDF R&D, OPEN CASCADE
+//  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 //  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -40,6 +40,17 @@ module GEOM
   enum shape_type { COMPOUND, COMPSOLID, SOLID, SHELL,
                     FACE, WIRE, EDGE, VERTEX, SHAPE };
 
+  /*!
+   * Marker type
+   */
+  enum marker_type { MT_NONE, MT_POINT, MT_PLUS, MT_STAR, MT_O, MT_X, MT_O_POINT, MT_O_PLUS,
+                     MT_O_STAR, MT_O_X, MT_BALL, MT_RING1, MT_RING2, MT_RING3, MT_USER };
+
+  /*!
+   * Marker size
+   */
+  enum marker_size { MS_NONE, MS_10, MS_15, MS_20, MS_25, MS_30, MS_35,
+                     MS_40, MS_45, MS_50, MS_55, MS_60, MS_65, MS_70 };
 
   /*!
    *  State of shape relatively geometrical surface like plane, sphere or cylinder.
@@ -100,7 +111,28 @@ module GEOM
     FSM_GetShapesOnShape,
 
     /*! Use GetInPlaceByHistory method (can work only after Partition) */
-    FSM_GetInPlaceByHistory
+    FSM_GetInPlaceByHistory,
+
+    /*! To be used only for multi-transformation result.
+     *  Only this method can be used after multi-transformation.
+     */
+    FSM_MultiTransformed
+  };
+
+  /*!
+   *  Kind of method to perform filling operation
+   *  Is used in functions GEOM_Gen.MakeFilling<xxx>()
+   */
+  enum filling_oper_method
+  {
+    /*! Default (standard behaviour) */
+    FOM_Default,
+
+    /*! Use edges orientation */
+    FOM_UseOri,
+
+    /*! Auto-correct edges orientation */
+    FOM_AutoCorrect
   };
 
 
@@ -139,6 +171,33 @@ module GEOM
      */
     shape_type GetShapeType();
 
+    /*!
+     *  Get the topology type of the object value.
+     *  In contrast to the shape type, this function returns type of the most
+     *  top-level sub-shape of the COMPOUND or COMPSOLID, if there is only one
+     *  sub-shape there.
+     *  \sa GetShapeType()
+     */
+    shape_type GetTopologyType();
+
+    /*!
+     *  Get a minimal type of the top-level shapes contained in the object.
+     *  This function is useful for the compounds only; for simple shapes it
+     *  exactly the same value as GetShapeType().
+     *  Note, that compounds are procesed recursively.
+     *  \sa GetShapeType(), GetTopologyType(), GetMaxShapeType()
+     */
+    shape_type GetMinShapeType();
+
+    /*!
+     *  Get a maximal type of the top-level shapes contained in the object.
+     *  This function is useful for the compounds only; for simple shapes it
+     *  exactly the same value as GetShapeType().
+     *  Note, that compounds are procesed recursively.
+     *  \sa GetShapeType(), GetTopologyType(), GetMinShapeType()
+     */
+    shape_type GetMaxShapeType();
+    
     /*!
      *  Set name of the object.
      *  \param theName is a name which will be associated with this object.
@@ -172,6 +231,38 @@ module GEOM
      */
     boolean GetAutoColor();
 
+    /*!
+     * Set standard point marker for the object
+     * \param theType standard marker type
+     * \param theSize marker relative size
+     */
+    void SetMarkerStd(in marker_type theType, in marker_size theSize );
+
+    /*!
+     * Set custom point marker for the object. The texture can be added
+     * by LoadTexture() or AddTexture() functions.
+     * \param theTextureId texture ID
+     */
+    void SetMarkerTexture(in long theTextureId);
+
+    /*!
+     * Get type of the point marker assigned to the object
+     * \return current marker type (MT_NONE if no marker is set)
+     */
+    marker_type GetMarkerType();
+
+    /*!
+     * Get size of the point marker assigned to the object
+     * \return current marker relative size (MS_NONE if no marker is set)
+     */
+    marker_size GetMarkerSize();
+
+    /*!
+     * Get texture idenifier of the point marker assigned to the object
+     * \return marker texture ID (0 if no marker set)
+     */
+    long GetMarkerTexture();
+
     /*!
      *  Set a Study entry where this object was published.
      */
@@ -240,7 +331,7 @@ module GEOM
      *         used for object creation
      */
     void SetParameters (in string theParameters);
-                           
+
     /*!
      *  Return list of notebook variables used for object creation separated by ":" symbol
      */
@@ -316,7 +407,7 @@ module GEOM
      *  \return New GEOM_Object, containing the created point.
      */
     GEOM_Object MakePointWithReference (in GEOM_Object theReference,
-                                       in double theX, in double theY, in double theZ);
+                                        in double theX, in double theY, in double theZ);
 
     /*!
      *  Create a point, corresponding to the given parameter on the given curve.
@@ -325,7 +416,20 @@ module GEOM
      *  \return New GEOM_Object, containing the created point.
      */
     GEOM_Object MakePointOnCurve (in GEOM_Object theRefCurve,
-                                 in double theParameter);
+                                  in double theParameter);
+
+    /*!
+     *  Create a point on the given curve, projecting given point
+     *  \param theRefCurve The referenced curve.
+     *  \param theXParameter X co-ordinate of point to project on curve
+     *  \param theYParameter Y co-ordinate of point to project on curve
+     *  \param theZParameter Z co-ordinate of point to project on curve
+     *  \return New GEOM_Object, containing the created point.
+     */
+    GEOM_Object MakePointOnCurveByCoord (in GEOM_Object theRefCurve,
+                                         in double theXParameter,
+                                         in double theYarameter,
+                                         in double theZPameter);
 
     /*!
      *  Create a point, corresponding to the given parameters on the
@@ -336,8 +440,22 @@ module GEOM
      *  \return New GEOM_Object, containing the created point.
      */
     GEOM_Object MakePointOnSurface (in GEOM_Object theRefSurf,
-                                   in double theUParameter,
-                                   in double theVParameter);
+                                    in double theUParameter,
+                                    in double theVParameter);
+
+    /*!
+     *  Create a point on the given surface, projecting given point
+     *  \param theRefSurf The referenced surface.
+     *  \param theXParameter X co-ordinate of point to project on curve
+     *  \param theYParameter Y co-ordinate of point to project on curve
+     *  \param theZParameter Z co-ordinate of point to project on curve
+     *  \return New GEOM_Object, containing the created point.
+     */
+    GEOM_Object MakePointOnSurfaceByCoord (in GEOM_Object theRefSurf,
+                                           in double theXParameter,
+                                           in double theYarameter,
+                                           in double theZPameter);
+
 
     /*!
      *  Create a point, on two lines intersection.
@@ -345,7 +463,7 @@ module GEOM
      *  \return New GEOM_Object, containing the created point.
      */
     GEOM_Object MakePointOnLinesIntersection (in GEOM_Object theRefLine1,
-                                             in GEOM_Object theRefLine2);
+                                              in GEOM_Object theRefLine2);
 
      /*!
      *  Create a vector, corresponding to tangent to the given parameter on the given curve.
@@ -356,7 +474,7 @@ module GEOM
      *  \return New GEOM_Object, containing the created point.
      */
      GEOM_Object MakeTangentOnCurve (in GEOM_Object theRefCurve,
-                                    in double theParameter);
+                                     in double theParameter);
 
     /*!
      *  Create a vector with the given components.
@@ -366,8 +484,8 @@ module GEOM
      *  \return New GEOM_Object, containing the created vector.
      */
     GEOM_Object MakeVectorDXDYDZ (in double theDX,
-                                 in double theDY,
-                                 in double theDZ);
+                                  in double theDY,
+                                  in double theDZ);
 
     /*!
      *  Create a vector between two points.
@@ -411,9 +529,9 @@ module GEOM
      *  \return New GEOM_Object, containing the created plane.
      */
     GEOM_Object MakePlaneThreePnt (in GEOM_Object thePnt1,
-                                  in GEOM_Object thePnt2,
-                                  in GEOM_Object thePnt3,
-                                  in double theTrimSize);
+                                   in GEOM_Object thePnt2,
+                                   in GEOM_Object thePnt3,
+                                   in double theTrimSize);
 
     /*!
      *  Create a plane, passing through the given point
@@ -424,8 +542,8 @@ module GEOM
      *  \return New GEOM_Object, containing the created plane.
      */
     GEOM_Object MakePlanePntVec (in GEOM_Object thePnt,
-                                in GEOM_Object theVec,
-                                in double theTrimSize);
+                                 in GEOM_Object theVec,
+                                 in double theTrimSize);
 
     /*!
      *  Create a plane, similar to the existing one, but with another size of representing face.
@@ -434,8 +552,8 @@ module GEOM
      *  \return New GEOM_Object, containing the created plane.
      */
     GEOM_Object MakePlaneFace (in GEOM_Object theFace,
-                              in double theTrimSize);
-                              
+                               in double theTrimSize);
+
     /*!
      *  Create a plane, by two vectors.
      *  \param theVec1 Vector1, the plane has to pass through first point of this vector.
@@ -444,9 +562,9 @@ module GEOM
      *  \return New GEOM_Object, containing the created plane.
      */
     GEOM_Object MakePlane2Vec (in GEOM_Object theVec1,
-                              in GEOM_Object theVec2,
-                              in double theTrimSize);
-                              
+                               in GEOM_Object theVec2,
+                               in double theTrimSize);
+
     /*!
      *  Create a plane, defined by local coordinate system.
      *  \param theLCS Referenced LCS(Marker).
@@ -455,8 +573,8 @@ module GEOM
      *  \return New GEOM_Object, containing the created plane.
      */
     GEOM_Object MakePlaneLCS (in GEOM_Object theLCS,
-                             in double theTrimSize,
-                             in double theOrientation);
+                              in double theTrimSize,
+                              in double theOrientation);
 
     /*!
      *  Create a local coordinate system.
@@ -466,8 +584,24 @@ module GEOM
      *  \return New GEOM_Object, containing the created coordinate system.
      */
     GEOM_Object MakeMarker (in double theOX , in double theOY , in double theOZ,
-                           in double theXDX, in double theXDY, in double theXDZ,
-                           in double theYDX, in double theYDY, in double theYDZ);
+                            in double theXDX, in double theXDY, in double theXDZ,
+                            in double theYDX, in double theYDY, in double theYDZ);
+
+    /*!
+     *  Create a local coordinate system from shape.
+     *  \param theShape The initial shape to detect the coordinate system.
+     *  \return New GEOM_Object, containing the created coordinate system.
+     */
+    GEOM_Object MakeMarkerFromShape (in GEOM_Object theShape);
+
+    /*!
+     *  Create a local coordinate system from point and two vectors (DX, DY).
+     *  \param theOrigin Point of coordinate system origin.
+     *  \param theXVec Vector of X direction.
+     *  \param theYVec Vector of Y direction.
+     *  \return New GEOM_Object, containing the created coordinate system.
+     */
+    GEOM_Object MakeMarkerPntTwoVec (in GEOM_Object theOrigin, in GEOM_Object theXVec, in GEOM_Object theYVec);
 
     /*!
      *  Create a tangent plane to specified face in the point with specified parameters.
@@ -479,9 +613,9 @@ module GEOM
      *  \return New GEOM_Object, containing the face built on tangent plane.
      */
     GEOM_Object MakeTangentPlaneOnFace(in GEOM_Object theFace,
-                                      in double theParameterU,
-                                      in double theParameterV,
-                                      in double theTrimSize);
+                                       in double theParameterU,
+                                       in double theParameterV,
+                                       in double theTrimSize);
   };
 
   interface GEOM_ITransformOperations : GEOM_IOperations
@@ -494,8 +628,8 @@ module GEOM
      *  \return theObject.
      */
     GEOM_Object TranslateTwoPoints (in GEOM_Object theObject,
-                                   in GEOM_Object thePoint1,
-                                   in GEOM_Object thePoint2);
+                                    in GEOM_Object thePoint1,
+                                    in GEOM_Object thePoint2);
 
     /*!
      *  Translate the given object along the vector, specified
@@ -506,7 +640,7 @@ module GEOM
      *  \return New GEOM_Object, containing the translated object.
      */
     GEOM_Object TranslateTwoPointsCopy (in GEOM_Object theObject,
-                                       in GEOM_Object thePoint1,
+                                        in GEOM_Object thePoint1,
                                         in GEOM_Object thePoint2);
 
     /*!
@@ -516,7 +650,7 @@ module GEOM
      *  \return theObject.
      */
     GEOM_Object TranslateDXDYDZ (in GEOM_Object theObject,
-                                in double theDX, in double theDY, in double theDZ);
+                                 in double theDX, in double theDY, in double theDZ);
 
     /*!
      *  Translate the given object along the vector, specified
@@ -526,7 +660,7 @@ module GEOM
      *  \return New GEOM_Object, containing the translated object.
      */
     GEOM_Object TranslateDXDYDZCopy (in GEOM_Object theObject,
-                                    in double theDX, in double theDY, in double theDZ);
+                                     in double theDX, in double theDY, in double theDZ);
 
 
     /*!
@@ -536,7 +670,7 @@ module GEOM
      *  \return theObject.
      */
     GEOM_Object TranslateVector (in GEOM_Object theObject,
-                                in GEOM_Object theVector);
+                                 in GEOM_Object theVector);
 
     /*!
      *  Translate the given object along the given vector,
@@ -546,7 +680,7 @@ module GEOM
      *  \return New GEOM_Object, containing the translated object.
      */
     GEOM_Object TranslateVectorCopy (in GEOM_Object theObject,
-                                    in GEOM_Object theVector);
+                                     in GEOM_Object theVector);
 
     /*!
      *  Translate the given object along the given vector on given distance,
@@ -558,9 +692,9 @@ module GEOM
      *  \return New GEOM_Object, containing the translated object.
      */
     GEOM_Object TranslateVectorDistance (in GEOM_Object theObject,
-                                        in GEOM_Object theVector,
-                                        in double      theDistance,
-                                        in boolean     theCopy);
+                                         in GEOM_Object theVector,
+                                         in double      theDistance,
+                                         in boolean     theCopy);
 
     /*!
      *  Translate the given object along the given vector a given number times
@@ -572,9 +706,9 @@ module GEOM
      *          the shapes, obtained after each translation.
      */
     GEOM_Object MultiTranslate1D (in GEOM_Object theObject,
-                                 in GEOM_Object theVector,
-                                 in double theStep,
-                                 in long theNbTimes);
+                                  in GEOM_Object theVector,
+                                  in double theStep,
+                                  in long theNbTimes);
 
     /*!
      *  Conseqently apply two specified translations to theObject specified number of times.
@@ -589,12 +723,12 @@ module GEOM
      *          the shapes, obtained after each translation.
      */
     GEOM_Object MultiTranslate2D (in GEOM_Object theObject,
-                                 in GEOM_Object theVector1,
-                                 in double theStep1,
-                                 in long theNbTimes1,
-                                 in GEOM_Object theVector2,
-                                 in double theStep2,
-                                 in long theNbTimes2);
+                                  in GEOM_Object theVector1,
+                                  in double theStep1,
+                                  in long theNbTimes1,
+                                  in GEOM_Object theVector2,
+                                  in double theStep2,
+                                  in long theNbTimes2);
 
     /*!
      *  Rotate given object around vector perpendicular to plane containing three points.
@@ -605,9 +739,9 @@ module GEOM
      *  \return theObject.
      */
     GEOM_Object RotateThreePoints (in GEOM_Object theObject,
-                                  in GEOM_Object theCentPoint,
-                                  in GEOM_Object thePoint1,
-                                  in GEOM_Object thePoint2);
+                                   in GEOM_Object theCentPoint,
+                                   in GEOM_Object thePoint1,
+                                   in GEOM_Object thePoint2);
 
 
     /*!
@@ -620,9 +754,9 @@ module GEOM
      *  \return New GEOM_Object, containing the rotated object.
      */
     GEOM_Object RotateThreePointsCopy (in GEOM_Object theObject,
-                                      in GEOM_Object theCentPoint,
-                                      in GEOM_Object thePoint1,
-                                      in GEOM_Object thePoint2);
+                                       in GEOM_Object theCentPoint,
+                                       in GEOM_Object thePoint1,
+                                       in GEOM_Object thePoint2);
 
     /*!
      *  Rotate the given object around the given axis on the given angle.
@@ -632,8 +766,8 @@ module GEOM
      *  \return theObject.
      */
     GEOM_Object Rotate (in GEOM_Object theObject,
-                       in GEOM_Object theAxis,
-                       in double theAngle);
+                        in GEOM_Object theAxis,
+                        in double theAngle);
 
 
     /*!
@@ -645,8 +779,8 @@ module GEOM
      *  \return New GEOM_Object, containing the rotated object.
      */
     GEOM_Object RotateCopy (in GEOM_Object theObject,
-                           in GEOM_Object theAxis,
-                           in double theAngle);
+                            in GEOM_Object theAxis,
+                            in double theAngle);
 
 
     /*!
@@ -659,8 +793,8 @@ module GEOM
      *          shapes, obtained after each rotation.
      */
     GEOM_Object MultiRotate1D (in GEOM_Object theObject,
-                              in GEOM_Object theAxis,
-                              in long theNbTimes);
+                               in GEOM_Object theAxis,
+                               in long theNbTimes);
 
     /*!
      *  Rotate the given object around the
@@ -678,11 +812,11 @@ module GEOM
      *          shapes, obtained after each transformation.
      */
     GEOM_Object MultiRotate2D (in GEOM_Object theObject,
-                              in GEOM_Object theAxis,
-                              in double theAngle,
-                              in long theNbTimes1,
-                              in double theStep,
-                              in long theNbTimes2);
+                               in GEOM_Object theAxis,
+                               in double theAngle,
+                               in long theNbTimes1,
+                               in double theStep,
+                               in long theNbTimes2);
 
     /*!
      *  Replace the given object by an object,
@@ -759,7 +893,7 @@ module GEOM
      *  \return theObject.
      */
     GEOM_Object ScaleShape (in GEOM_Object theObject, in GEOM_Object thePoint,
-                           in double theFactor);
+                            in double theFactor);
 
     /*!
      *  Scale the given object by the factor, creating its copy before the scaling.
@@ -769,7 +903,7 @@ module GEOM
      *  \return New GEOM_Object, containing the scaled shape.
      */
     GEOM_Object ScaleShapeCopy (in GEOM_Object theObject, in GEOM_Object thePoint,
-                               in double theFactor);
+                                in double theFactor);
 
     /*!
      *  Scale the given object by different factors along coordinate axes.
@@ -810,8 +944,8 @@ module GEOM
      *  \return theObject.
      */
     GEOM_Object PositionShape (in GEOM_Object theObject,
-                              in GEOM_Object theStartLCS,
-                              in GEOM_Object theEndLCS);
+                               in GEOM_Object theStartLCS,
+                               in GEOM_Object theEndLCS);
 
     /*!
      *  Modify the Location of the given object by LCS,
@@ -826,24 +960,34 @@ module GEOM
      *  \return New GEOM_Object, containing the displaced shape.
      */
     GEOM_Object PositionShapeCopy (in GEOM_Object theObject,
-                                  in GEOM_Object theStartLCS,
-                                  in GEOM_Object theEndLCS);
+                                   in GEOM_Object theStartLCS,
+                                   in GEOM_Object theEndLCS);
 
     /*!
      *  Modify the Location of the given object by Path,
      *  \param  theObject The object to be displaced.
      *  \param  thePath Wire or Edge along that the object will be translated.
-     * \param  theDistance progress of Path (0 = actual location, 1 = end of path location).
-     * \param  theCopy is a true or false parameter. true is to create a copy, false to move the object.
-     * \param  theCopy is a true or false parameter. true is to reverse direction, false is to move normal direction.
+     *        \param  theDistance progress of Path (0 = actual location, 1 = end of path location).
+     *        \param  theCopy is a true or false parameter. true is to create a copy, false to move the object.
+     *        \param  theCopy is a true or false parameter. true is to reverse direction, false is to move normal direction.
      *  \return New GEOM_Object, containing the displaced shape.
      */
-
     GEOM_Object PositionAlongPath (in GEOM_Object theObject,
-                                  in GEOM_Object thePath,
-                                  in double theDistance,
-                                  in boolean theCopy,
-                                  in boolean theReverse);
+                                   in GEOM_Object thePath,
+                                   in double theDistance,
+                                   in boolean theCopy,
+                                   in boolean theReverse);
+
+    /*!
+     *  Transform the shape in the same way what was used for the sample shape creation.
+     *  \param theObject The object to be transformed.
+     *  \param theSample The object containing information about required transformation.
+     *  \note Implementation of this method is limited by multi-transformations now.
+     *  \note Internal method.
+     *  \return New GEOM_Object, containing the transformed shape.
+     */
+    GEOM_Object TransformLikeOtherCopy (in GEOM_Object theObject,
+                                        in GEOM_Object theSample);
 
     /*!
      *  Recompute the shape from its arguments.
@@ -895,7 +1039,7 @@ module GEOM
      *  vertical (H) and horisontal (W).
      *  \param theVec defines plane.
      *  \param theH vertical size (height).
-     *  \param theW horisontal size (width). 
+     *  \param theW horisontal size (width).
      *  \return New GEOM_Object, containing the created face.
      */
     GEOM_Object MakeFaceObjHW (in GEOM_Object theObj, in double theH, in double theW);
@@ -907,17 +1051,17 @@ module GEOM
      *  \return New GEOM_Object, containing the created disk.
      */
     GEOM_Object MakeDiskPntVecR (in GEOM_Object thePnt,
-                                in GEOM_Object theVec,
-                                in double theR);
+                                 in GEOM_Object theVec,
+                                 in double theR);
     /*!
      *  Create a disk (circular face), passing through three given points
      *  \param thePnt1, thePnt2, thePnt3 Points, defining the disk.
      *  \return New GEOM_Object, containing the created disk.
      */
     GEOM_Object MakeDiskThreePnt (in GEOM_Object thePnt1,
-                                 in GEOM_Object thePnt2,
-                                 in GEOM_Object thePnt3);
-                                 
+                                  in GEOM_Object thePnt2,
+                                  in GEOM_Object thePnt3);
+
     /*!
      *  Create a disk specified dimensions along OX-OY coordinate axes,
      *  Center of the disk at point (0, 0, 0).
@@ -926,7 +1070,7 @@ module GEOM
      *  \return New GEOM_Object, containing the created disk.
      */
     GEOM_Object MakeDiskR (in double theR, in short theOrientation);
-    
+
     /*!
      *  Create a cylinder with given radius and height at
      *  the origin of coordinate system. Axis of the cylinder
@@ -946,9 +1090,9 @@ module GEOM
      *  \return New GEOM_Object, containing the created cylinder.
      */
     GEOM_Object MakeCylinderPntVecRH (in GEOM_Object thePnt,
-                                     in GEOM_Object theAxis,
-                                     in double      theR,
-                                     in double      theH);
+                                      in GEOM_Object theAxis,
+                                      in double      theR,
+                                      in double      theH);
 
     /*!
      *  Create a cone with given height and radiuses at
@@ -975,10 +1119,10 @@ module GEOM
      *  \return New GEOM_Object, containing the created cone.
      */
     GEOM_Object MakeConePntVecR1R2H (in GEOM_Object thePnt,
-                                    in GEOM_Object theAxis,
-                                    in double      theR1,
-                                    in double      theR2,
-                                    in double      theH);
+                                     in GEOM_Object theAxis,
+                                     in double      theR1,
+                                     in double      theR2,
+                                     in double      theH);
 
     /*!
      *  Create a torus with given radiuses at the origin of coordinate system.
@@ -987,7 +1131,7 @@ module GEOM
      *  \return New GEOM_Object, containing the created torus.
      */
     GEOM_Object MakeTorusRR (in double theRMajor,
-                            in double theRMinor);
+                             in double theRMinor);
 
     /*!
      *  Create a torus with given center, normal vector and radiuses.
@@ -998,9 +1142,9 @@ module GEOM
      *  \return New GEOM_Object, containing the created torus.
      */
     GEOM_Object MakeTorusPntVecRR (in GEOM_Object thePnt,
-                                  in GEOM_Object theVec,
-                                  in double theRMajor,
-                                  in double theRMinor);
+                                   in GEOM_Object theVec,
+                                   in double theRMajor,
+                                   in double theRMinor);
 
     /*!
      *  Create a sphere with given radius at the origin of coordinate system.
@@ -1027,12 +1171,12 @@ module GEOM
      *  \return New GEOM_Object, containing the created prism.
      */
     GEOM_Object MakePrismVecH (in GEOM_Object theBase,
-                              in GEOM_Object theVec,
-                              in double      theH);
+                               in GEOM_Object theVec,
+                               in double      theH);
     /*  The Same Prism but in 2 directions (forward&backward) */
     GEOM_Object MakePrismVecH2Ways (in GEOM_Object theBase,
-                                   in GEOM_Object theVec,
-                                   in double      theH);
+                                    in GEOM_Object theVec,
+                                    in double      theH);
 
     /*!
      *  Create a shape by extrusion of the base shape along a vector, defined by two points.
@@ -1042,13 +1186,13 @@ module GEOM
      *  \return New GEOM_Object, containing the created prism.
      */
     GEOM_Object MakePrismTwoPnt (in GEOM_Object theBase,
-                                in GEOM_Object thePoint1,
-                                in GEOM_Object thePoint2);
+                                 in GEOM_Object thePoint1,
+                                 in GEOM_Object thePoint2);
     /*  The same prism but in two directions forward&backward */
     GEOM_Object MakePrismTwoPnt2Ways (in GEOM_Object theBase,
-                                     in GEOM_Object thePoint1,
-                                     in GEOM_Object thePoint2);
-                                   
+                                      in GEOM_Object thePoint1,
+                                      in GEOM_Object thePoint2);
+
     /*!
      *  Create a shape by extrusion of the base shape along a vector, defined by DX DY DZ.
      *  \param theBase Base shape to be extruded.
@@ -1056,7 +1200,7 @@ module GEOM
      *  \return New GEOM_Object, containing the created prism.
      */
     GEOM_Object MakePrismDXDYDZ (in GEOM_Object theBase,
-                                in double theDX, in double theDY, in double theDZ);
+                                   in double theDX, in double theDY, in double theDZ);
     /*  The same prism but in two directions forward&backward */
     GEOM_Object MakePrismDXDYDZ2Ways (in GEOM_Object theBase,
                                       in double theDX, in double theDY, in double theDZ);
@@ -1080,12 +1224,12 @@ module GEOM
      *  \return New GEOM_Object, containing the created revolution.
      */
     GEOM_Object MakeRevolutionAxisAngle (in GEOM_Object theBase,
-                                        in GEOM_Object theAxis,
-                                        in double theAngle);
+                                         in GEOM_Object theAxis,
+                                         in double theAngle);
     /*  The Same Revolution but in both ways forward&backward */
     GEOM_Object MakeRevolutionAxisAngle2Ways (in GEOM_Object theBase,
-                                             in GEOM_Object theAxis,
-                                             in double theAngle);
+                                              in GEOM_Object theAxis,
+                                              in double theAngle);
 
     /*!
      *  Create a filling from the given compound of contours.
@@ -1094,12 +1238,15 @@ module GEOM
      *  \param theTol2D a 2d tolerance to be reached
      *  \param theTol3D a 3d tolerance to be reached
      *  \param theNbIter a number of iteration of approximation algorithm
+     *  \param theMethod Kind of method to perform filling operation.
      *  \return New GEOM_Object, containing the created filling surface.
      */
     GEOM_Object MakeFilling (in GEOM_Object theShape,
-                            in long theMinDeg, in long theMaxDeg,
-                            in double theTol2D, in double theTol3D,
-                            in long theNbIter, in boolean theApprox);
+                             in long theMinDeg, in long theMaxDeg,
+                             in double theTol2D, in double theTol3D,
+                             in long theNbIter,
+                             in filling_oper_method theMethod,
+                             in boolean theApprox);
 
     /*!
      *  Create a shell or solid passing through set of sections.Sections should be wires,edges or vertices.
@@ -1110,14 +1257,14 @@ module GEOM
      *  \return New GEOM_Object, containing the created shell or solid.
      */
     GEOM_Object MakeThruSections(in ListOfGO theSeqSections,
-                                in boolean theModeSolid,
-                                in double thePreci,
+                                 in boolean theModeSolid,
+                                 in double thePreci,
                                  in boolean theRuled);
 
       /*!
      *  Create a shape by extrusion of the profile shape along
      *  the path shape. The path shape can be a wire or an edge.
-     *  the several profiles can be specified in the several locations of path.        
+     *  the several profiles can be specified in the several locations of path.
      *  \param theSeqBases - list of  Bases shape to be extruded.
      *  \param theLocations - list of locations on the path corresponding
      *                        specified list of the Bases shapes. Number of locations
@@ -1126,19 +1273,19 @@ module GEOM
      *  \param theWithContact - the mode defining that the section is translated to be in
      *                          contact with the spine.
      *  \param - WithCorrection - defining that the section is rotated to be
-     *                          orthogonal to the spine tangent in the correspondent point
+     *                                 orthogonal to the spine tangent in the correspondent point
      *  \return New GEOM_Object, containing the created pipe.
      */
     GEOM_Object MakePipeWithDifferentSections (in ListOfGO theSeqBases,
-                                              in ListOfGO theLocations,
-                                              in GEOM_Object thePath,
-                                              in boolean theWithContact ,
-                                              in boolean theWithCorrection );
+                                               in ListOfGO theLocations,
+                                               in GEOM_Object thePath,
+                                               in boolean theWithContact ,
+                                               in boolean theWithCorrection );
 
     /*!
      *  Create a shape by extrusion of the profile shape along
      *  the path shape. The path shape can be a shell or a face.
-     *  the several profiles can be specified in the several locations of path.        
+     *  the several profiles can be specified in the several locations of path.
      *  \param theSeqBases - list of  Bases shape to be extruded.
      *  \param theSeqSubBases - list of corresponding subshapes of section shapes.
      *  \param theLocations - list of locations on the path corresponding
@@ -1148,15 +1295,15 @@ module GEOM
      *  \param theWithContact - the mode defining that the section is translated to be in
      *                          contact with the spine.
      *  \param - WithCorrection - defining that the section is rotated to be
-     *                          orthogonal to the spine tangent in the correspondent point
+     *                                 orthogonal to the spine tangent in the correspondent point
      *  \return New GEOM_Object, containing the created pipe.
      */
     GEOM_Object MakePipeWithShellSections (in ListOfGO theSeqBases,
-                                          in ListOfGO theSeqSubBases,
-                                          in ListOfGO theLocations,
-                                          in GEOM_Object thePath,
-                                          in boolean theWithContact ,
-                                          in boolean theWithCorrection );
+                                           in ListOfGO theSeqSubBases,
+                                           in ListOfGO theLocations,
+                                           in GEOM_Object thePath,
+                                           in boolean theWithContact ,
+                                           in boolean theWithCorrection );
 
     /*!
      * Create solids between given sections
@@ -1165,11 +1312,11 @@ module GEOM
      *  \return New GEOM_Object, containing the created solids.
      */
     GEOM_Object MakePipeShellsWithoutPath (in ListOfGO theSeqBases,
-                                          in ListOfGO theLocations);
+                                           in ListOfGO theLocations);
 
     /*!
      *  Create a shape by extrusion of the base shape along
-     *  the path shape with constant bi-normal direction along the given vector. 
+     *  the path shape with constant bi-normal direction along the given vector.
      *  The path shape can be a wire or an edge.
      *  \param theBase Base shape to be extruded.
      *  \param thePath Path shape to extrude the base shape along it.
@@ -1178,9 +1325,9 @@ module GEOM
      *                along the sweep surface.
      *  \return New GEOM_Object, containing the created pipe.
      */
-    GEOM_Object MakePipeBiNormalAlongVector (in GEOM_Object theBase, 
-                                            in GEOM_Object thePath, 
-                                            in GEOM_Object theVec);
+    GEOM_Object MakePipeBiNormalAlongVector (in GEOM_Object theBase,
+                                             in GEOM_Object thePath,
+                                             in GEOM_Object theVec);
 
   };
 
@@ -1199,6 +1346,17 @@ module GEOM
      */
     GEOM_Object MakeEdge (in GEOM_Object thePnt1, in GEOM_Object thePnt2);
 
+    /*!
+     *  Create an edge from specified wire.
+     *  \param theWire source Wire.
+     *  \param theLinearTolerance linear tolerance value
+     *  \param theAngularTolerance angular tolerance value
+     *  \return New GEOM_Object, containing the created edge.
+     */
+    GEOM_Object MakeEdgeWire (in GEOM_Object theWire,
+                             in double theLinearTolerance, 
+                             in double theAngularTolerance);
+
     /*!
      *  Create a wire from the set of edges and wires.
      *  \param theEdgesAndWires List of edge and/or wires.
@@ -1282,7 +1440,25 @@ module GEOM
      *  \return New GEOM_Object, containing a copy of theShape without some faces.
      */
     GEOM_Object MakeGlueFacesByList (in GEOM_Object theShape, in double theTolerance,
-                                    in ListOfGO theFaces, in boolean doKeepNonSolids);
+                                     in ListOfGO theFaces, in boolean doKeepNonSolids);
+
+    /*!
+     *  Get all sub-shapes and groups of \a theShape,
+     *  that were created already by any other methods.
+     *  \param theShape Any shape.
+     *  \param theGroupsOnly If this parameter is TRUE, only groups will be
+     *                       returned, else all found sub-shapes and groups.
+     *  \return List of existing sub-objects of \a theShape.
+     */
+    ListOfGO GetExistingSubObjects (in GEOM_Object theShape,
+                                    in boolean     theGroupsOnly);
+
+    /*!
+     *  Deprecated method. Use MakeAllSubShapes() instead.
+     */
+    ListOfGO MakeExplode (in GEOM_Object theShape,
+                         in long        theShapeType,
+                         in boolean     isSorted);
 
     /*!
      *  Explode a shape on subshapes of a given type.
@@ -1292,23 +1468,30 @@ module GEOM
      *                  sorted by coordinates of their gravity centers.
      *  \return List of sub-shapes of type theShapeType, contained in theShape.
      */
-    ListOfGO MakeExplode (in GEOM_Object theShape,
-                         in long        theShapeType,
-                         in boolean     isSorted);
+    ListOfGO MakeAllSubShapes (in GEOM_Object theShape,
+                               in long        theShapeType,
+                               in boolean     isSorted);
+
+    /*!
+     *  Deprecated method. Use GetAllSubShapesIDs() instead.
+     */
+    ListOfLong SubShapeAllIDs (in GEOM_Object theShape,
+                              in long        theShapeType,
+                              in boolean     isSorted);
 
     /*!
      *  Explode a shape on subshapes of a given type.
-     *  Does the same, as the above method, but returns IDs of sub-shapes,
-     *  not GEOM_Objects. It works faster.
+     *  Does the same, as MakeAllSubShapes, but returns IDs of
+     *  sub-shapes, not GEOM_Objects. It works faster.
      *  \param theShape Shape to be exploded.
      *  \param theShapeType Type of sub-shapes to be retrieved.
      *  \param isSorted If this parameter is TRUE, sub-shapes will be
      *                  sorted by coordinates of their gravity centers.
      *  \return List of IDs of sub-shapes of type theShapeType, contained in theShape.
      */
-    ListOfLong SubShapeAllIDs (in GEOM_Object theShape,
-                              in long        theShapeType,
-                              in boolean     isSorted);
+    ListOfLong GetAllSubShapesIDs (in GEOM_Object theShape,
+                                   in long        theShapeType,
+                                   in boolean     isSorted);
 
     /*!
      *  Get a sub shape defined by its unique ID inside \a theMainShape
@@ -1316,7 +1499,7 @@ module GEOM
      *        Don't try to apply modification operations on them.
      */
     GEOM_Object GetSubShape (in GEOM_Object theMainShape,
-                            in long        theID);
+                             in long        theID);
 
     /*!
      *  Get global index of \a theSubShape in \a theMainShape.
@@ -1393,8 +1576,17 @@ module GEOM
      *  \return List of sub-shapes of theShape1, shared with theShape2.
      */
     ListOfGO GetSharedShapes (in GEOM_Object theShape1,
-                             in GEOM_Object theShape2,
-                             in long        theShapeType);
+                              in GEOM_Object theShape2,
+                              in long        theShapeType);
+
+    /*!
+     *  Get all sub-shapes, shared by all shapes in the list \a theShapes.
+     *  \param theShapes Shapes to find common sub-shapes of.
+     *  \param theShapeType Type of sub-shapes to be retrieved.
+     *  \return List of objects, that are sub-shapes of all given shapes.
+     */
+    ListOfGO GetSharedShapesMulti (in ListOfGO theShapes,
+                                   in long     theShapeType);
 
     /*!
      *  Find in \a theShape all sub-shapes of type \a theShapeType, situated relatively
@@ -1407,9 +1599,9 @@ module GEOM
      *  \return List of all found sub-shapes.
      */
     ListOfGO GetShapesOnPlane (in GEOM_Object theShape,
-                              in long        theShapeType,
-                              in GEOM_Object theAx1,
-                              in shape_state theState);
+                               in long        theShapeType,
+                               in GEOM_Object theAx1,
+                               in shape_state theState);
     /*!
      *  Find in \a theShape all sub-shapes of type \a theShapeType, situated relatively
      *  the specified plane by the certain way, defined through \a theState parameter.
@@ -1422,10 +1614,10 @@ module GEOM
      *  \return List of all found sub-shapes.
      */
     ListOfGO GetShapesOnPlaneWithLocation (in GEOM_Object theShape,
-                                          in long        theShapeType,
-                                          in GEOM_Object theAx1,
-                                          in GEOM_Object thePnt,
-                                          in shape_state theState);
+                                           in long        theShapeType,
+                                           in GEOM_Object theAx1,
+                                           in GEOM_Object thePnt,
+                                           in shape_state theState);
 
 
 
@@ -1441,10 +1633,29 @@ module GEOM
      *  \return List of all found sub-shapes.
      */
     ListOfGO GetShapesOnCylinder (in GEOM_Object theShape,
-                                 in long        theShapeType,
-                                 in GEOM_Object theAxis,
-                                 in double      theRadius,
-                                 in shape_state theState);
+                                  in long        theShapeType,
+                                  in GEOM_Object theAxis,
+                                  in double      theRadius,
+                                  in shape_state theState);
+
+    /*!
+     *  Find in \a theShape all sub-shapes of type \a theShapeType, situated relatively
+     *  the specified cylinder by the certain way, defined through \a theState parameter.
+     *  \param theShape Shape to find sub-shapes of.
+     *  \param theShapeType Type of sub-shapes to be retrieved.
+     *  \param theAxis Vector (or line, or linear edge), specifying
+     *                 axis of the cylinder to find shapes on.
+     *  \param thePnt Point specifying location of the bottom of the cylinder.
+     *  \param theRadius Radius of the cylinder to find shapes on.
+     *  \param theState The state of the subshapes to find.
+     *  \return List of all found sub-shapes.
+     */
+    ListOfGO GetShapesOnCylinderWithLocation (in GEOM_Object theShape,
+                                              in long        theShapeType,
+                                              in GEOM_Object theAxis,
+                                              in GEOM_Object thePnt,
+                                              in double      theRadius,
+                                              in shape_state theState);
 
     /*!
      *  Find in \a theShape all sub-shapes of type \a theShapeType, situated relatively
@@ -1457,10 +1668,10 @@ module GEOM
      *  \return List of all found sub-shapes.
      */
     ListOfGO GetShapesOnSphere (in GEOM_Object theShape,
-                               in long        theShapeType,
-                               in GEOM_Object theCenter,
-                               in double      theRadius,
-                               in shape_state theState);
+                                in long        theShapeType,
+                                in GEOM_Object theCenter,
+                                in double      theRadius,
+                                in shape_state theState);
 
     /*!
      *  Find in \a theShape all sub-shapes of type \a theShapeType, situated relatively
@@ -1493,9 +1704,9 @@ module GEOM
      *  \return List of IDs of all found sub-shapes.
      */
     ListOfLong GetShapesOnPlaneIDs (in GEOM_Object theShape,
-                                   in long        theShapeType,
-                                   in GEOM_Object theAx1,
-                                   in shape_state theState);
+                                    in long        theShapeType,
+                                    in GEOM_Object theAx1,
+                                    in shape_state theState);
 
     /*!
      *  Find in \a theShape all sub-shapes of type \a theShapeType, situated relatively
@@ -1509,10 +1720,10 @@ module GEOM
      *  \return List of IDs of all found sub-shapes.
      */
     ListOfLong GetShapesOnPlaneWithLocationIDs (in GEOM_Object theShape,
-                                               in long        theShapeType,
-                                               in GEOM_Object theAx1,
-                                               in GEOM_Object thePnt,
-                                               in shape_state theState);
+                                                in long        theShapeType,
+                                                in GEOM_Object theAx1,
+                                                in GEOM_Object thePnt,
+                                                in shape_state theState);
 
     /*!
      *  Find in \a theShape all sub-shapes of type \a theShapeType, situated relatively
@@ -1526,10 +1737,29 @@ module GEOM
      *  \return List of IDs of all found sub-shapes.
      */
     ListOfLong GetShapesOnCylinderIDs (in GEOM_Object theShape,
-                                      in long        theShapeType,
-                                      in GEOM_Object theAxis,
-                                      in double      theRadius,
-                                      in shape_state theState);
+                                       in long        theShapeType,
+                                       in GEOM_Object theAxis,
+                                       in double      theRadius,
+                                       in shape_state theState);
+
+    /*!
+     *  Find in \a theShape all sub-shapes of type \a theShapeType, situated relatively
+     *  the specified cylinder by the certain way, defined through \a theState parameter.
+     *  \param theShape Shape to find sub-shapes of.
+     *  \param theShapeType Type of sub-shapes to be retrieved.
+     *  \param theAxis Vector (or line, or linear edge), specifying
+     *                 axis of the cylinder to find shapes on.
+     *  \param thePnt Point specifying location of the bottom of the cylinder.
+     *  \param theRadius Radius of the cylinder to find shapes on.
+     *  \param theState The state of the subshapes to find.
+     *  \return List of IDs all found sub-shapes.
+     */
+    ListOfLong GetShapesOnCylinderWithLocationIDs (in GEOM_Object theShape,
+                                                   in long        theShapeType,
+                                                   in GEOM_Object theAxis,
+                                                   in GEOM_Object thePnt,
+                                                   in double      theRadius,
+                                                   in shape_state theState);
 
     /*!
      *  Find in \a theShape all sub-shapes of type \a theShapeType, situated relatively
@@ -1542,10 +1772,10 @@ module GEOM
      *  \return List of IDs of all found sub-shapes.
      */
     ListOfLong GetShapesOnSphereIDs (in GEOM_Object theShape,
-                                    in long        theShapeType,
-                                    in GEOM_Object theCenter,
-                                    in double      theRadius,
-                                    in shape_state theState);
+                                     in long        theShapeType,
+                                     in GEOM_Object theCenter,
+                                     in double      theRadius,
+                                     in shape_state theState);
 
     /*!
      *  Find in \a theShape all sub-shapes of type \a theShapeType, situated relatively
@@ -1576,9 +1806,9 @@ module GEOM
      * \return List of IDs of all found sub-shapes.
      */
     ListOfLong GetShapesOnBoxIDs (in GEOM_Object theBox,
-                                 in GEOM_Object theShape,
-                                 in long        theShapeType,
-                                 in shape_state theState);
+                                  in GEOM_Object theShape,
+                                  in long        theShapeType,
+                                  in shape_state theState);
 
     /*!
      * \brief Find subshapes complying with given status
@@ -1589,48 +1819,48 @@ module GEOM
      * \return List of all found sub-shapes.
      */
     ListOfGO GetShapesOnBox (in GEOM_Object theBox,
-                            in GEOM_Object theShape,
-                            in long        theShapeType,
-                            in shape_state theState);
+                             in GEOM_Object theShape,
+                             in long        theShapeType,
+                             in shape_state theState);
 
     /*!
      * \brief Find subshapes complying with given status
-     * \param theCheckShape - the shape to check state of subshapes against
+     * \param theCheckShape - the shape to check state of subshapes against. It must be a solid.
      * \param theShape - the shape to explore
      * \param theShapeType - type of subshape of theShape
      * \param theState - required state
      * \return List of IDs of all found sub-shapes.
      */
     ListOfLong GetShapesOnShapeIDs (in GEOM_Object theCheckShape,
-                                   in GEOM_Object theShape,
-                                   in short       theShapeType,
-                                   in shape_state theState);
+                                    in GEOM_Object theShape,
+                                    in short       theShapeType,
+                                    in shape_state theState);
 
     /*!
      * \brief Find subshapes complying with given status
-     * \param theCheckShape - the shape to check state of subshapes against
+     * \param theCheckShape - the shape to check state of subshapes against. It must be a solid.
      * \param theShape - the shape to explore
      * \param theShapeType - type of subshape of theShape
      * \param theState - required state
      * \return List of all found sub-shapes.
      */
     ListOfGO GetShapesOnShape (in GEOM_Object theCheckShape,
-                              in GEOM_Object theShape,
-                              in short       theShapeType,
-                              in shape_state theState);
+                               in GEOM_Object theShape,
+                               in short       theShapeType,
+                               in shape_state theState);
 
     /*!
      * \brief Find subshapes complying with given status
-     * \param theCheckShape - the shape to check state of subshapes against
+     * \param theCheckShape - the shape to check state of subshapes against. It must be a solid.
      * \param theShape - the shape to explore
      * \param theShapeType - type of subshape of theShape
      * \param theState - required state
      * \return compound includes all found sub-shapes.
      */
     GEOM_Object GetShapesOnShapeAsCompound (in GEOM_Object theCheckShape,
-                                           in GEOM_Object theShape,
-                                           in short       theShapeType,
-                                           in shape_state theState);
+                                            in GEOM_Object theShape,
+                                            in short       theShapeType,
+                                            in shape_state theState);
 
     /*!
      *  Get sub-shape(s) of \a theShapeWhere, which are
@@ -1640,7 +1870,7 @@ module GEOM
      *  \return Group of all found sub-shapes or a single found sub-shape.
      */
     GEOM_Object GetInPlace (in GEOM_Object theShapeWhere,
-                           in GEOM_Object theShapeWhat);
+                            in GEOM_Object theShapeWhat);
 
     /*!
      *  Get sub-shape(s) of \a theShapeWhere, which are
@@ -1657,7 +1887,7 @@ module GEOM
      *  \return Group of all found sub-shapes or a single found sub-shape.
      */
     GEOM_Object GetInPlaceByHistory (in GEOM_Object theShapeWhere,
-                                    in GEOM_Object theShapeWhat);
+                                     in GEOM_Object theShapeWhat);
 
     /*!
      *  Get sub-shape of theShapeWhere, which are
@@ -1667,7 +1897,7 @@ module GEOM
      *  \return found sub-shape.
      */
     GEOM_Object GetSame (in GEOM_Object theShapeWhere,
-                        in GEOM_Object theShapeWhat);
+                                in GEOM_Object theShapeWhat);
   };
 
   /*!
@@ -1688,9 +1918,9 @@ module GEOM
      *  \return New GEOM_Object, containing the created face.
      */
     GEOM_Object MakeQuad (in GEOM_Object theEdge1,
-                         in GEOM_Object theEdge2,
-                         in GEOM_Object theEdge3,
-                         in GEOM_Object theEdge4);
+                          in GEOM_Object theEdge2,
+                          in GEOM_Object theEdge3,
+                          in GEOM_Object theEdge4);
 
     /*!
      *  Create a quadrangle face on two edges.
@@ -1699,7 +1929,7 @@ module GEOM
      *  \return New GEOM_Object, containing the created face.
      */
     GEOM_Object MakeQuad2Edges (in GEOM_Object theEdge1,
-                               in GEOM_Object theEdge2);
+                                in GEOM_Object theEdge2);
 
     /*!
      *  Create a quadrangle face with specified corners.
@@ -1708,9 +1938,9 @@ module GEOM
      *  \return New GEOM_Object, containing the created face.
      */
     GEOM_Object MakeQuad4Vertices (in GEOM_Object thePnt1,
-                                  in GEOM_Object thePnt2,
-                                  in GEOM_Object thePnt3,
-                                  in GEOM_Object thePnt4);
+                                   in GEOM_Object thePnt2,
+                                   in GEOM_Object thePnt3,
+                                   in GEOM_Object thePnt4);
 
     /*!
      *  Create a hexahedral solid, bounded by the six given faces. Order of
@@ -1719,11 +1949,11 @@ module GEOM
      *  \return New GEOM_Object, containing the created solid.
      */
     GEOM_Object MakeHexa (in GEOM_Object theFace1,
-                         in GEOM_Object theFace2,
-                         in GEOM_Object theFace3,
-                         in GEOM_Object theFace4,
-                         in GEOM_Object theFace5,
-                         in GEOM_Object theFace6);
+                          in GEOM_Object theFace2,
+                          in GEOM_Object theFace3,
+                          in GEOM_Object theFace4,
+                          in GEOM_Object theFace5,
+                          in GEOM_Object theFace6);
 
     /*!
      *  Create a hexahedral solid between two given faces.
@@ -1732,7 +1962,7 @@ module GEOM
      *  \return New GEOM_Object, containing the created solid.
      */
     GEOM_Object MakeHexa2Faces (in GEOM_Object theFace1,
-                               in GEOM_Object theFace2);
+                                in GEOM_Object theFace2);
 
     /*!
      *  Extract elements of blocks and blocks compounds
@@ -1747,10 +1977,19 @@ module GEOM
      *  \return New GEOM_Object, containing the found vertex.
      */
     GEOM_Object GetPoint (in GEOM_Object theShape,
-                         in double      theX,
-                         in double      theY,
-                         in double      theZ,
-                         in double      theEpsilon);
+                          in double      theX,
+                          in double      theY,
+                          in double      theZ,
+                          in double      theEpsilon);
+
+    /*!
+     *  Find a vertex of the given shape, which has minimal distance to the given point.
+     *  \param theShape Any shape.
+     *  \param thePoint Point, close to the desired vertex.
+     *  \return New GEOM_Object, containing the found vertex.
+     */
+    GEOM_Object GetVertexNearPoint (in GEOM_Object theShape,
+                                    in GEOM_Object thePoint);
 
     /*!
      *  Get an edge, found in the given shape by two given vertices.
@@ -1759,8 +1998,8 @@ module GEOM
      *  \return New GEOM_Object, containing the found edge.
      */
     GEOM_Object GetEdge (in GEOM_Object theShape,
-                        in GEOM_Object thePoint1,
-                        in GEOM_Object thePoint2);
+                         in GEOM_Object thePoint1,
+                         in GEOM_Object thePoint2);
 
     /*!
      *  Find an edge of the given shape, which has minimal distance to the given point.
@@ -1769,7 +2008,7 @@ module GEOM
      *  \return New GEOM_Object, containing the found edge.
      */
     GEOM_Object GetEdgeNearPoint (in GEOM_Object theShape,
-                                 in GEOM_Object thePoint);
+                                  in GEOM_Object thePoint);
 
     /*!
      *  Returns a face, found in the given shape by four given corner vertices.
@@ -1778,10 +2017,10 @@ module GEOM
      *  \return New GEOM_Object, containing the found face.
      */
     GEOM_Object GetFaceByPoints (in GEOM_Object theShape,
-                                in GEOM_Object thePoint1,
-                                in GEOM_Object thePoint2,
-                                in GEOM_Object thePoint3,
-                                in GEOM_Object thePoint4);
+                                 in GEOM_Object thePoint1,
+                                 in GEOM_Object thePoint2,
+                                 in GEOM_Object thePoint3,
+                                 in GEOM_Object thePoint4);
 
     /*!
      *  Get a face of block, found in the given shape by two given edges.
@@ -1790,8 +2029,8 @@ module GEOM
      *  \return New GEOM_Object, containing the found face.
      */
     GEOM_Object GetFaceByEdges (in GEOM_Object theShape,
-                               in GEOM_Object theEdge1,
-                               in GEOM_Object theEdge2);
+                                in GEOM_Object theEdge1,
+                                in GEOM_Object theEdge2);
 
     /*!
      *  Find a face, opposite to the given one in the given block.
@@ -1800,7 +2039,7 @@ module GEOM
      *  \return New GEOM_Object, containing the found face.
      */
     GEOM_Object GetOppositeFace (in GEOM_Object theBlock,
-                                in GEOM_Object theFace);
+                                 in GEOM_Object theFace);
 
     /*!
      *  Find a face of the given shape, which has minimal distance to the given point.
@@ -1809,7 +2048,7 @@ module GEOM
      *  \return New GEOM_Object, containing the found face.
      */
     GEOM_Object GetFaceNearPoint (in GEOM_Object theShape,
-                                 in GEOM_Object thePoint);
+                                  in GEOM_Object thePoint);
 
     /*!
      *  Find a face of block, whose outside normale has minimal angle with the given vector.
@@ -1818,7 +2057,23 @@ module GEOM
      *  \return New GEOM_Object, containing the found face.
      */
     GEOM_Object GetFaceByNormale (in GEOM_Object theBlock,
-                                 in GEOM_Object theVector);
+                                  in GEOM_Object theVector);
+
+    /*!
+     *  Find all subshapes of type \a theShapeType of the given shape,
+     *  which have minimal distance to the given point.
+     *  \param theShape Any shape.
+     *  \param thePoint Point, close to the desired shape.
+     *  \param theShapeType Defines what kind of subshapes is searched.
+     *  \param theTolerance The tolerance for distances comparison. All shapes
+     *                      with distances to the given point in interval
+     *                      [minimal_distance, minimal_distance + theTolerance] will be gathered.
+     *  \return New GEOM_Object, containing a group of all found shapes.
+     */
+    GEOM_Object GetShapesNearPoint (in GEOM_Object theShape,
+                                    in GEOM_Object thePoint,
+                                    in long        theShapeType,
+                                    in double      theTolerance);
 
     /*!
      *  Extract blocks from blocks compounds
@@ -1834,9 +2089,9 @@ module GEOM
      *  \return theNbBlocks Number of specified blocks in theCompound.
      */
     boolean IsCompoundOfBlocks (in GEOM_Object theCompound,
-                               in long        theMinNbFaces,
-                               in long        theMaxNbFaces,
-                               out long       theNbBlocks);
+                                in long        theMinNbFaces,
+                                in long        theMaxNbFaces,
+                                out long       theNbBlocks);
 
     /*!
      *  Enumeration of Blocks Compound defects.
@@ -1887,7 +2142,7 @@ module GEOM
      *  \return theErrors Structure, containing discovered errors and incriminated sub-shapes.
      */
     boolean CheckCompoundOfBlocks (in GEOM_Object theCompound,
-                                  out BCErrors   theErrors);
+                                   out BCErrors   theErrors);
 
     /*!
      *  Convert sequence of Blocks Compound errors, returned by
@@ -1897,7 +2152,7 @@ module GEOM
      *  \return String, describing all the errors in form, suitable for printing.
      */
     string PrintBCErrors (in GEOM_Object theCompound,
-                         in BCErrors    theErrors);
+                          in BCErrors    theErrors);
 
     /*!
      *  Remove all seam and degenerated edges from \a theShape.
@@ -1930,8 +2185,8 @@ module GEOM
      *  \return List of GEOM_Objects, containing the retrieved blocks.
      */
     ListOfGO ExplodeCompoundOfBlocks (in GEOM_Object theCompound,
-                                     in long        theMinNbFaces,
-                                     in long        theMaxNbFaces);
+                                      in long        theMinNbFaces,
+                                      in long        theMaxNbFaces);
 
     /*!
      *  Find block, containing the given point inside its volume or on boundary.
@@ -1941,7 +2196,7 @@ module GEOM
      *  \return New GEOM_Object, containing the found block.
      */
     GEOM_Object GetBlockNearPoint (in GEOM_Object theCompound,
-                                  in GEOM_Object thePoint);
+                                   in GEOM_Object thePoint);
 
     /*!
      *  Find block, containing all the elements, passed as the parts, or maximum quantity of them.
@@ -1950,7 +2205,7 @@ module GEOM
      *  \return New GEOM_Object, containing the found block.
      */
     GEOM_Object GetBlockByParts (in GEOM_Object theCompound,
-                                in ListOfGO    theParts);
+                                 in ListOfGO    theParts);
 
     /*!
      *  Return all blocks, containing all the elements, passed as the parts.
@@ -1959,7 +2214,7 @@ module GEOM
      *  \return List of GEOM_Objects, containing the found blocks.
      */
     ListOfGO GetBlocksByParts (in GEOM_Object theCompound,
-                              in ListOfGO    theParts);
+                               in ListOfGO    theParts);
 
     /*!
      *  Operations on blocks with gluing of result
@@ -1977,9 +2232,9 @@ module GEOM
      *  \return New GEOM_Object, containing the result shape.
      */
     GEOM_Object MakeMultiTransformation1D (in GEOM_Object theBlock,
-                                          in long        theDirFace1,
-                                          in long        theDirFace2,
-                                          in long        theNbTimes);
+                                           in long        theDirFace1,
+                                           in long        theDirFace2,
+                                           in long        theNbTimes);
 
     /*!
      *  Multi-transformate block and glue the result.
@@ -1990,12 +2245,12 @@ module GEOM
      *  \return New GEOM_Object, containing the result shape.
      */
     GEOM_Object MakeMultiTransformation2D (in GEOM_Object theBlock,
-                                          in long        theDirFace1U,
-                                          in long        theDirFace2U,
-                                          in long        theNbTimesU,
-                                          in long        theDirFace1V,
-                                          in long        theDirFace2V,
-                                          in long        theNbTimesV);
+                                           in long        theDirFace1U,
+                                           in long        theDirFace2U,
+                                           in long        theNbTimesU,
+                                           in long        theDirFace1V,
+                                           in long        theDirFace2V,
+                                           in long        theNbTimesV);
 
     /*!
      *  Special operation - propagation
@@ -2026,8 +2281,8 @@ module GEOM
      *  \return New GEOM_Object, containing the result shape.
      */
     GEOM_Object MakeBoolean (in GEOM_Object theShape1,
-                            in GEOM_Object theShape2,
-                            in long theOperation);
+                             in GEOM_Object theShape2,
+                             in long theOperation);
 
     /*!
      *  Perform partition operation.
@@ -2036,10 +2291,10 @@ module GEOM
      *  \note  Each compound from ListShapes and ListTools will be exploded in order
      *         to avoid possible intersection between shapes from this compound.
      *  \param theLimit Type of resulting shapes (corresponding to TopAbs_ShapeEnum).
-     #  \param KeepNonlimitShapes: if this parameter == 0 - only shapes with
-     #                             type <= Limit are kept in the result,
-     #                             else - shapes with type > Limit are kept
-     #                             also (if they exist)
+     *  \param KeepNonlimitShapes: if this parameter == 0, then only shapes of
+     *                             target type (equal to Limit) are kept in the result,
+     *                             else standalone shapes of lower dimension
+     *                             are kept also (if they exist).
      *
      *  After implementation new version of PartitionAlgo (October 2006)
      *  other parameters are ignored by current functionality. They are kept
@@ -2055,13 +2310,13 @@ module GEOM
      *  \return New GEOM_Object, containing the result shapes.
      */
     GEOM_Object MakePartition (in ListOfGO   theShapes,
-                              in ListOfGO   theTools,
-                              in ListOfGO   theKeepInside,
-                              in ListOfGO   theRemoveInside,
-                              in short      theLimit,
-                              in boolean    theRemoveWebs,
-                              in ListOfLong theMaterials,
-                              in short      theKeepNonlimitShapes);
+                               in ListOfGO   theTools,
+                               in ListOfGO   theKeepInside,
+                               in ListOfGO   theRemoveInside,
+                               in short      theLimit,
+                               in boolean    theRemoveWebs,
+                               in ListOfLong theMaterials,
+                               in short      theKeepNonlimitShapes);
 
     /*!
      *  Perform partition operation.
@@ -2077,13 +2332,13 @@ module GEOM
      *  \return New GEOM_Object, containing the result shapes.
      */
     GEOM_Object MakePartitionNonSelfIntersectedShape (in ListOfGO   theShapes,
-                                                     in ListOfGO   theTools,
-                                                     in ListOfGO   theKeepInside,
-                                                     in ListOfGO   theRemoveInside,
-                                                     in short      theLimit,
-                                                     in boolean    theRemoveWebs,
-                                                     in ListOfLong theMaterials,
-                                                     in short      theKeepNonlimitShapes);
+                                                      in ListOfGO   theTools,
+                                                      in ListOfGO   theKeepInside,
+                                                      in ListOfGO   theRemoveInside,
+                                                      in short      theLimit,
+                                                      in boolean    theRemoveWebs,
+                                                      in ListOfLong theMaterials,
+                                                      in short      theKeepNonlimitShapes);
 
     /*!
      *  Perform partition of the Shape with the Plane
@@ -2092,7 +2347,7 @@ module GEOM
      *  \return New GEOM_Object, containing the result shape.
      */
     GEOM_Object MakeHalfPartition (in GEOM_Object theShape,
-                                  in GEOM_Object thePlane);
+                                   in GEOM_Object thePlane);
   };
 
   /*!
@@ -2109,16 +2364,16 @@ module GEOM
      *  \return New GEOM_Object, containing the created circle.
      */
     GEOM_Object MakeCirclePntVecR (in GEOM_Object thePnt,
-                                  in GEOM_Object theVec,
-                                  in double theR);
+                                   in GEOM_Object theVec,
+                                   in double theR);
     /*!
      *  Create a circle, passing through three given points
      *  \param thePnt1,thePnt2,thePnt3 Points, defining the circle.
      *  \return New GEOM_Object, containing the created circle.
      */
     GEOM_Object MakeCircleThreePnt (in GEOM_Object thePnt1,
-                                   in GEOM_Object thePnt2,
-                                   in GEOM_Object thePnt3);
+                                    in GEOM_Object thePnt2,
+                                    in GEOM_Object thePnt3);
     /*!
      *  Create a circle with given center, with a radius equals the distance from center to Point1
      *  and on a plane defined by all of three points.
@@ -2126,8 +2381,8 @@ module GEOM
      *  \return New GEOM_Object, containing the created circle.
      */
     GEOM_Object MakeCircleCenter2Pnt (in GEOM_Object thePnt1,
-                                     in GEOM_Object thePnt2,
-                                     in GEOM_Object thePnt3);
+                                      in GEOM_Object thePnt2,
+                                      in GEOM_Object thePnt3);
     /*!
      *  Create an ellipse with given center, normal vector and radiuses.
      *  \param thePnt Ellipse center.
@@ -2137,9 +2392,9 @@ module GEOM
      *  \return New GEOM_Object, containing the created ellipse.
      */
     GEOM_Object MakeEllipse (in GEOM_Object thePnt,
-                            in GEOM_Object theVec,
-                            in double theRMajor,
-                            in double theRMinor);
+                             in GEOM_Object theVec,
+                             in double theRMajor,
+                             in double theRMinor);
 
     /*!
      *  Create an ellipse with given center, normal vector, main axis vector and radiuses.
@@ -2151,10 +2406,10 @@ module GEOM
      *  \return New GEOM_Object, containing the created ellipse.
      */
     GEOM_Object MakeEllipseVec (in GEOM_Object thePnt,
-                               in GEOM_Object theVec,
-                               in double theRMajor,
-                               in double theRMinor,
-                               in GEOM_Object theVecMaj);
+                                in GEOM_Object theVec,
+                                in double theRMajor,
+                                in double theRMinor,
+                                in GEOM_Object theVecMaj);
 
     /*!
      *  Create an arc of circle, passing through three given points.
@@ -2164,8 +2419,8 @@ module GEOM
      *  \return New GEOM_Object, containing the created arc.
      */
     GEOM_Object MakeArc (in GEOM_Object thePnt1,
-                        in GEOM_Object thePnt2,
-                        in GEOM_Object thePnt3);
+                         in GEOM_Object thePnt2,
+                         in GEOM_Object thePnt3);
 
     /*!
      *  Create an arc of circle of center C from one point to another
@@ -2179,7 +2434,7 @@ module GEOM
                                in GEOM_Object thePnt1,
                                in GEOM_Object thePnt2,
                                in boolean theSense);
-                              
+
     /*!
      *  Create an arc of ellipse of center C and two points P1 P2.
      *  \param theCenter Center point of the arc.
@@ -2188,8 +2443,8 @@ module GEOM
      *  \return New GEOM_Object, containing the created arc.
      */
     GEOM_Object MakeArcOfEllipse (in GEOM_Object theCenter,
-                                 in GEOM_Object thePnt1,
-                                 in GEOM_Object thePnt2);
+                                  in GEOM_Object thePnt1,
+                                  in GEOM_Object thePnt2);
 
 
     /*!
@@ -2209,9 +2464,11 @@ module GEOM
     /*!
      *  Create B-Spline curve on the set of points.
      *  \param thePoints Sequence of points for the B-Spline curve.
+     *  \param theIsClosed If TRUE, build a closed curve.
      *  \return New GEOM_Object, containing the created B-Spline curve.
      */
-    GEOM_Object MakeSplineInterpolation (in ListOfGO thePoints);
+    GEOM_Object MakeSplineInterpolation (in ListOfGO thePoints,
+                                         in boolean  theIsClosed);
 
     /*!
      *  Create a sketcher (wire or face), following the textual description,
@@ -2248,7 +2505,7 @@ module GEOM
      *  \return New GEOM_Object, containing the created wire.
      */
     GEOM_Object MakeSketcher (in string theCommand, in ListOfDouble theWorkingPlane);
-    
+
     /*!
      *  Create a 3D sketcher, following the numerical description,
      *  passed through points created by \a theCoordinates argument. \n
@@ -2256,7 +2513,7 @@ module GEOM
      *
      *  "Make3DSketcher[x1, y1, z1, x2, y2, z2, ..., xN, yN, zN]"
      */
-    
+
     GEOM_Object Make3DSketcher (in ListOfDouble theCoordinates);
 
       /*!
@@ -2283,7 +2540,7 @@ module GEOM
      *  \return New GEOM_Object, containing the result shape.
      */
     GEOM_Object MakeFilletAll (in GEOM_Object theShape,
-                              in double      theR);
+                               in double      theR);
 
     /*!
      *  Perform a fillet on the specified edges of the given shape
@@ -2295,12 +2552,12 @@ module GEOM
      *  \return New GEOM_Object, containing the result shape.
      */
     GEOM_Object MakeFilletEdges (in GEOM_Object theShape,
-                                in double      theR,
-                                in ListOfLong  theEdges);
+                                 in double      theR,
+                                 in ListOfLong  theEdges);
     GEOM_Object MakeFilletEdgesR1R2 (in GEOM_Object theShape,
-                                    in double      theR1,
-                                    in double      theR2,
-                                    in ListOfLong  theEdges);
+                                     in double      theR1,
+                                     in double      theR2,
+                                     in ListOfLong  theEdges);
 
     /*!
      *  Perform a fillet on all edges of the specified faces of the given shape.
@@ -2312,14 +2569,14 @@ module GEOM
      *  \return New GEOM_Object, containing the result shape.
      */
     GEOM_Object MakeFilletFaces (in GEOM_Object theShape,
-                                in double      theR,
-                                in ListOfLong  theFaces);
-                                
+                                 in double      theR,
+                                 in ListOfLong  theFaces);
+
     GEOM_Object MakeFilletFacesR1R2 (in GEOM_Object theShape,
-                                    in double      theR1,
-                                    in double      theR2,
-                                    in ListOfLong  theFaces);
-                                    
+                                     in double      theR1,
+                                     in double      theR2,
+                                     in ListOfLong  theFaces);
+
     /*!
      *  Perform a fillet on face of the specified vertexes of the given shape.
      *  \param theShape Shape, to perform fillet on.
@@ -2330,8 +2587,23 @@ module GEOM
      *  \return New GEOM_Object, containing the result shape.
      */
     GEOM_Object MakeFillet2D (in GEOM_Object theShape,
-                             in double      theR,
-                             in ListOfLong  theVertexes);
+                              in double      theR,
+                              in ListOfLong  theVertexes);
+
+    /*!
+     *  Perform a fillet on edges of the specified vertexes of the given wire.
+     *  \param theShape Shape, to perform fillet on.
+     *  \param theR Fillet radius.
+     *  \param theVertexes Global indices of vertexes to perform fillet on.
+     *    \note Global index of sub-shape can be obtained, using method
+     *          <VAR>GEOM_IShapesOperations.GetSubShapeIndex()</VAR>.
+     *    \note The list of vertices coudl be empty, in this case fillet fill be done
+     *          at all vertices in given wire
+     *  \return New GEOM_Object, containing the result shape.
+     */
+    GEOM_Object MakeFillet1D (in GEOM_Object theShape,
+                              in double      theR,
+                              in ListOfLong  theVertexes);
 
     /*!
      *  Perform a symmetric chamfer on all edges of the given shape.
@@ -2340,7 +2612,7 @@ module GEOM
      *  \return New GEOM_Object, containing the result shape.
      */
     GEOM_Object MakeChamferAll (in GEOM_Object theShape,
-                               in double      theD);
+                                in double      theD);
 
     /*!
      *  Perform a chamfer on edges, common to the specified faces.
@@ -2354,15 +2626,15 @@ module GEOM
      *  \return New GEOM_Object, containing the result shape.
      */
     GEOM_Object MakeChamferEdge (in GEOM_Object theShape,
-                                in double theD1, in double theD2,
-                                in long theFace1, in long theFace2);
+                                 in double theD1, in double theD2,
+                                 in long theFace1, in long theFace2);
     /*!
      *  The Same but with params theD = Chamfer Lenght
      *  and theAngle = Chamfer Angle (Angle in radians)
      */
     GEOM_Object MakeChamferEdgeAD (in GEOM_Object theShape,
-                                  in double theD, in double theAngle,
-                                  in long theFace1, in long theFace2);
+                                   in double theD, in double theAngle,
+                                   in long theFace1, in long theFace2);
 
     /*!
      *  Perform a chamfer on all edges of the specified faces.
@@ -2378,15 +2650,15 @@ module GEOM
      *  \return New GEOM_Object, containing the result shape.
      */
     GEOM_Object MakeChamferFaces (in GEOM_Object theShape,
-                                 in double theD1, in double theD2,
-                                 in ListOfLong theFaces);
+                                  in double theD1, in double theD2,
+                                  in ListOfLong theFaces);
     /*!
      *  The Same but with params theD = Chamfer Lenght
      *  and theAngle = Chamfer Angle (Angle in radians)
      */
     GEOM_Object MakeChamferFacesAD (in GEOM_Object theShape,
-                                   in double theD, in double theAngle,
-                                   in ListOfLong theFaces);
+                                    in double theD, in double theAngle,
+                                    in ListOfLong theFaces);
 
    /*!
     *  Perform a chamfer on edges,
@@ -2397,15 +2669,15 @@ module GEOM
     *  \return New GEOM_Object, containing the result shape.
     */
     GEOM_Object MakeChamferEdges (in GEOM_Object theShape,
-                                 in double theD1, in double theD2,
-                                 in ListOfLong theEdges);
+                                  in double theD1, in double theD2,
+                                  in ListOfLong theEdges);
     /*!
      *  The Same but with params theD = Chamfer Lenght
      *  and theAngle = Chamfer Angle (Angle in radians)
      */
     GEOM_Object MakeChamferEdgesAD (in GEOM_Object theShape,
-                                   in double theD, in double theAngle,
-                                   in ListOfLong theEdges);
+                                    in double theD, in double theAngle,
+                                    in ListOfLong theEdges);
 
     /*!
      *  Perform an Archimde operation on the given shape with given parameters.
@@ -2418,9 +2690,9 @@ module GEOM
      *          by a plane, corresponding to water level.
      */
     GEOM_Object MakeArchimede (in GEOM_Object theShape,
-                              in double theWeight,
-                              in double theWaterDensity,
-                              in double theMeshDeflection);
+                               in double theWeight,
+                               in double theWaterDensity,
+                               in double theMeshDeflection);
 
     /*!
      *  Duplicates <VAR>GEOM_IShapesOperations.GetSubShapeIndex()</VAR>.
@@ -2446,9 +2718,9 @@ module GEOM
      *  \return New GEOM_Object, containing processed shape.
      */
     GEOM_Object ProcessShape (in GEOM_Object theShapes,
-                             in string_array theOperators,
-                             in string_array theParameters,
-                             in string_array theValues);
+                              in string_array theOperators,
+                              in string_array theParameters,
+                              in string_array theValues);
 
     /*!
      *  Get default sequence of operators, their parameters and parameters' values
@@ -2460,8 +2732,8 @@ module GEOM
      *                           as parameters are listed in \a theParameters list.
      */
     void GetShapeProcessParameters (out string_array theOperators,
-                                   out string_array theParameters,
-                                   out string_array theValues);
+                                    out string_array theParameters,
+                                    out string_array theValues);
     /*!
      *  Get parameters and parameters' values for the given Shape Process operation.
      *  In the current implementation the defaults are
@@ -2472,8 +2744,8 @@ module GEOM
      *                           as parameters are listed in \a theParameters list.
      */
     void GetOperatorParameters (in string theOperator,
-                               out string_array theParameters,
-                               out string_array theValues);
+                                out string_array theParameters,
+                                out string_array theValues);
 
     /*!
      *  Remove faces from the given object (shape).
@@ -2494,7 +2766,7 @@ module GEOM
      *  \return New GEOM_Object, containing processed shape.
      */
     GEOM_Object CloseContour (in GEOM_Object theObject, in short_array theWires,
-                             in boolean isCommonVertex);
+                              in boolean isCommonVertex);
 
     /*!
      *  Remove internal wires and edges from the given object (face).
@@ -2534,7 +2806,7 @@ module GEOM
      *  \return New GEOM_Object, containing processed shape.
      */
     GEOM_Object DivideEdge (in GEOM_Object theObject, in short theEdgeIndex,
-                           in double theValue, in boolean isByParameter);
+                            in double theValue, in boolean isByParameter);
 
     /*!
      *  Get a list of wires (wrapped in GEOM_Object-s),
@@ -2545,8 +2817,8 @@ module GEOM
      *  \return FALSE, if an error(s) occured during the method execution.
      */
     boolean GetFreeBoundary (in GEOM_Object theObject,
-                            out ListOfGO theClosedWires,
-                            out ListOfGO theOpenWires);
+                             out ListOfGO theClosedWires,
+                             out ListOfGO theOpenWires);
 
     /*!
      *  Change orientation of the given object.
@@ -2556,6 +2828,14 @@ module GEOM
     GEOM_Object ChangeOrientation (in GEOM_Object theObject);
     GEOM_Object ChangeOrientationCopy (in GEOM_Object theObject);
 
+    /*!
+     *  Try to limit tolerance of the given object by value \a theTolerance.
+     *  \param theObject Shape to be processed.
+     *  \param theTolerance Required tolerance value.
+     *  \return New GEOM_Object, containing processed shape.
+     */
+    GEOM_Object LimitTolerance (in GEOM_Object theObject, in double theTolerance);
+
   };
 
   /*!
@@ -2597,7 +2877,7 @@ module GEOM
      *  \return Returns available formats and patterns through the arguments.
      */
     void ImportTranslators (out string_array theFormats,
-                           out string_array thePatterns);
+                            out string_array thePatterns);
 
     /*!
      *  Get the supported export formats and corresponding patterns for File dialog.
@@ -2606,7 +2886,38 @@ module GEOM
      *  \return Returns available formats and patterns through the arguments.
      */
     void ExportTranslators (out string_array theFormats,
-                           out string_array thePatterns);
+                            out string_array thePatterns);
+
+    /*!
+     * Load texture from file
+     * \param theTextureFile texture file name
+     * \return unique texture identifier
+     */
+    long LoadTexture(in string theTextureFile);
+
+    /*!
+     * Add texture to the study
+     * \param theWidth texture width in pixels
+     * \param theHeight texture height in pixels
+     * \param theTexture texture byte array
+     * \return unique texture identifier
+     */
+    long AddTexture(in long theWidth, in long theHeight, in SALOMEDS::TMPFile theTexture);
+
+    /*!
+     * Get previously loaded texture data
+     * \param theID texture identifier
+     * \param theWidth texture width in pixels
+     * \param theHeight texture height in pixels
+     * \return texture byte array
+     */
+    SALOMEDS::TMPFile GetTexture(in long theID, out long theWidth, out long theHeight);
+
+    /*!
+     * Get list of all avaiable texture IDs
+     * \return list of all texture IDs avaiable for the current study
+     */
+    ListOfLong GetAllTextures();
   };
 
   /*!
@@ -2650,7 +2961,9 @@ module GEOM
       SEGMENT,      // segment
       EDGE,         // other edge
       // VERTEX
-      VERTEX
+      VERTEX,
+      // ADVANCED shapes
+      ADVANCED      // all advanced shapes (temporary implementation)
     };
   };
 
@@ -2674,8 +2987,8 @@ module GEOM
      */
     //short KindOfShape (in GEOM_Object   theShape,
     GEOM_IKindOfShape::shape_kind KindOfShape (in  GEOM_Object  theShape,
-                                              out ListOfLong   theIntegers,
-                                              out ListOfDouble theDoubles);
+                                               out ListOfLong   theIntegers,
+                                               out ListOfDouble theDoubles);
 
     /*!
      *  Get position (LCS) of theShape.
@@ -2689,9 +3002,9 @@ module GEOM
      *  \return Returns position of the shape through the last nine arguments.
      */
     void GetPosition (in GEOM_Object theShape,
-                     out double Ox, out double Oy, out double Oz,
-                     out double Zx, out double Zy, out double Zz,
-                     out double Xx, out double Xy, out double Xz);
+                      out double Ox, out double Oy, out double Oz,
+                      out double Zx, out double Zy, out double Zz,
+                      out double Xx, out double Xy, out double Xz);
 
     /*!
      *  Get summarized length of all wires,
@@ -2703,9 +3016,9 @@ module GEOM
      *  \return Returns shape properties through the last three arguments.
      */
     void GetBasicProperties (in GEOM_Object theShape,
-                            out double theLength,
-                            out double theSurfArea,
-                            out double theVolume);
+                             out double theLength,
+                             out double theSurfArea,
+                             out double theVolume);
 
     /*!
      *  Get a point, situated at the centre of mass of theShape.
@@ -2714,6 +3027,14 @@ module GEOM
      */
     GEOM_Object GetCentreOfMass (in GEOM_Object theShape);
 
+    /*
+     *  Get the vertex by index for 1D objects depends the edge/wire orientation
+     *  \param theShape Shape (wire or edge) to find the vertex on it
+     *  \param theIndex Index of vertex subshape
+     *  \return New GEOM_Object, vertex.
+     */
+    GEOM_Object GetVertexByIndex( in GEOM_Object theShape, in long index );
+
     /*!
      *  Get a vector, representing the normal of theFace.
      *  If the face is not planar, theOptionalPoint is obligatory.
@@ -2723,7 +3044,7 @@ module GEOM
      *  \return New GEOM_Object, containing the created normal vector.
      */
     GEOM_Object GetNormal (in GEOM_Object theFace,
-                          in GEOM_Object theOptionalPoint);
+                           in GEOM_Object theOptionalPoint);
 
     /*!
      *  Get inertia matrix and moments of inertia of theShape.
@@ -2733,10 +3054,10 @@ module GEOM
      *  \return Returns inertia through the last twelve arguments.
      */
     void GetInertia (in GEOM_Object theShape,
-                    out double I11, out double I12, out double I13,
-                    out double I21, out double I22, out double I23,
-                    out double I31, out double I32, out double I33,
-                    out double Ix , out double Iy , out double Iz);
+                     out double I11, out double I12, out double I13,
+                     out double I21, out double I22, out double I23,
+                     out double I31, out double I32, out double I33,
+                     out double Ix , out double Iy , out double Iz);
 
     /*!
      *  Get parameters of bounding box of the given shape
@@ -2747,9 +3068,9 @@ module GEOM
      *  \return Returns parameters of bounding box through the last six arguments.
      */
     void GetBoundingBox (in GEOM_Object theShape,
-                        out double Xmin, out double Xmax,
-                        out double Ymin, out double Ymax,
-                        out double Zmin, out double Zmax);
+                         out double Xmin, out double Xmax,
+                         out double Ymin, out double Ymax,
+                         out double Zmin, out double Zmax);
 
     /*!
      *  Get min and max tolerances of sub-shapes of theShape
@@ -2760,9 +3081,9 @@ module GEOM
      *  \return Returns shape tolerances through the last six arguments.
      */
     void GetTolerance (in GEOM_Object theShape,
-                      out double FaceMin, out double FaceMax,
-                      out double EdgeMin, out double EdgeMax,
-                      out double VertMin, out double VertMax);
+                       out double FaceMin, out double FaceMax,
+                       out double EdgeMin, out double EdgeMax,
+                       out double VertMin, out double VertMax);
 
     /*!
      *  Check a topology of the given shape.
@@ -2771,7 +3092,7 @@ module GEOM
      *  \return TRUE, if the shape "seems to be valid" from the topological point of view.
      */
     boolean CheckShape (in GEOM_Object theShape,
-                       out string     theDescription);
+                        out string     theDescription);
 
     /*!
      *  Check a topology and a geometry of the given shape.
@@ -2780,7 +3101,7 @@ module GEOM
      *  \return TRUE, if the shape "seems to be valid".
      */
     boolean CheckShapeWithGeometry (in GEOM_Object theShape,
-                                   out string     theDescription);
+                                    out string     theDescription);
 
     /*!
      *  Obtain description of the given shape
@@ -2797,8 +3118,8 @@ module GEOM
      *  \return Value of the minimal distance between the given shapes.
      */
     double GetMinDistance (in GEOM_Object theShape1, in GEOM_Object theShape2,
-                          out double X1, out double Y1, out double Z1,
-                          out double X2, out double Y2, out double Z2);
+                           out double X1, out double Y1, out double Z1,
+                           out double X2, out double Y2, out double Z2);
 
     /*!
      *  Get angle between the given lines or linear edges.
@@ -2836,7 +3157,7 @@ module GEOM
      *  \return Value of curvature.
      */
     double MaxSurfaceCurvatureByParam (in GEOM_Object theShape, in double theUParam,
-                                      in double theVParam);
+                                       in double theVParam);
 
     /*!
      *  Get max radius of curvature of surface in the given point
@@ -2854,7 +3175,7 @@ module GEOM
      *  \return Value of curvature.
      */
     double MinSurfaceCurvatureByParam (in GEOM_Object theShape, in double theUParam,
-                                      in double theVParam);
+                                       in double theVParam);
 
     /*!
      *  Get min radius of curvature of surface in the given point
@@ -2945,6 +3266,135 @@ module GEOM
   };
 
 
+  /*!
+   *  GEOM_IAdvancedOperations: Interface for advanced modeling functions.
+   */
+  interface GEOM_IAdvancedOperations : GEOM_IOperations
+  {
+    /*!
+     *  Create a T-shape object with specified caracteristics for the main and
+     *  the incident pipes (radius, width, half-length).
+     *  Center of the shape is (0,0,0). The main plane of the T-shape is XOY.
+     *  \param theR1 Internal radius of main pipe
+     *  \param theW1 Width of main pipe
+     *  \param theL1 Half-length of main pipe
+     *  \param theR2 Internal radius of incident pipe (R2 < R1)
+     *  \param theW2 Width of incident pipe (R2+W2 < R1+W1)
+     *  \param theL2 Half-length of incident pipe
+     *  \param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=true)
+     *  \return List of GEOM_Objects, containing the created shape and propagation groups.
+     */
+    ListOfGO MakePipeTShape (in double theR1, in double theW1, in double theL1,
+                                in double theR2, in double theW2, in double theL2,
+                                in boolean theHexMesh);
+    /*!
+     *  Create a T-shape object with specified caracteristics for the main and
+     *  the incident pipes (radius, width, half-length).
+     *  The extremities of the main pipe are located on junctions points P1 and P2.
+     *  The extremity of the incident pipe is located on junction point P3.
+     *  \param theR1 Internal radius of main pipe
+     *  \param theW1 Width of main pipe
+     *  \param theL1 Half-length of main pipe
+     *  \param theR2 Internal radius of incident pipe (R2 < R1)
+     *  \param theW2 Width of incident pipe (R2+W2 < R1+W1)
+     *  \param theL2 Half-length of incident pipe
+     *  \param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=true)
+     *  \param theP1 1st junction point of main pipe
+     *  \param theP2 2nd junction point of main pipe
+     *  \param theP3 Junction point of incident pipe
+     *  \return List of GEOM_Objects, containing the created shape and propagation groups.
+     */
+    ListOfGO MakePipeTShapeWithPosition (in double theR1, in double theW1, in double theL1,
+                                            in double theR2, in double theW2, in double theL2,
+                                            in boolean theHexMesh,
+                                            in GEOM_Object theP1, in GEOM_Object theP2, in GEOM_Object theP3);
+    /*!
+     *  Create a T-shape object with specified caracteristics for the main and
+     *  the incident pipes (radius, width, half-length). A chamfer is created
+     *  on the junction of the pipes.
+     *  Center of the shape is (0,0,0). The main plane of the T-shape is XOY.
+     *  \param theR1 Internal radius of main pipe
+     *  \param theW1 Width of main pipe
+     *  \param theL1 Half-length of main pipe
+     *  \param theR2 Internal radius of incident pipe (R2 < R1)
+     *  \param theW2 Width of incident pipe (R2+W2 < R1+W1)
+     *  \param theL2 Half-length of incident pipe
+     *  \param theH Height of the chamfer.
+     *  \param theW Width of the chamfer.
+     *  \param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=true)
+     *  \return List of GEOM_Objects, containing the created shape and propagation groups.
+     */
+    ListOfGO MakePipeTShapeChamfer (in double theR1, in double theW1, in double theL1,
+                                    in double theR2, in double theW2, in double theL2,
+                                    in double theH, in double theW, in boolean theHexMesh);
+    /*!
+     *  Create a T-shape object with specified caracteristics for the main and
+     *  the incident pipes (radius, width, half-length). A chamfer is created
+     *  on the junction of the pipes.
+     *  The extremities of the main pipe are located on junctions points P1 and P2.
+     *  The extremity of the incident pipe is located on junction point P3.
+     *  \param theR1 Internal radius of main pipe
+     *  \param theW1 Width of main pipe
+     *  \param theL1 Half-length of main pipe
+     *  \param theR2 Internal radius of incident pipe (R2 < R1)
+     *  \param theW2 Width of incident pipe (R2+W2 < R1+W1)
+     *  \param theL2 Half-length of incident pipe
+     *  \param theH Height of the chamfer.
+     *  \param theW Width of the chamfer.
+     *  \param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=true)
+     *  \param theP1 1st junction point of main pipe
+     *  \param theP2 2nd junction point of main pipe
+     *  \param theP3 Junction point of incident pipe
+     *  \return List of GEOM_Objects, containing the created shape and propagation groups.
+     */
+    ListOfGO MakePipeTShapeChamferWithPosition (in double theR1, in double theW1, in double theL1,
+                                                   in double theR2, in double theW2, in double theL2,
+                                                   in double theH, in double theW, in boolean theHexMesh,
+                                                   in GEOM_Object theP1, in GEOM_Object theP2, in GEOM_Object theP3);
+    /*!
+     *  Create a T-shape object with specified caracteristics for the main and
+     *  the incident pipes (radius, width, half-length). A fillet is created
+     *  on the junction of the pipes.
+     *  Center of the shape is (0,0,0). The main plane of the T-shape is XOY.
+     *  \param theR1 Internal radius of main pipe
+     *  \param theW1 Width of main pipe
+     *  \param theL1 Half-length of main pipe
+     *  \param theR2 Internal radius of incident pipe (R2 < R1)
+     *  \param theW2 Width of incident pipe (R2+W2 < R1+W1)
+     *  \param theL2 Half-length of incident pipe
+     *  \param theRF Radius of curvature of fillet.
+     *  \param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=true)
+     *  \return List of GEOM_Objects, containing the created shape and propagation groups.
+     */
+    ListOfGO MakePipeTShapeFillet (in double theR1, in double theW1, in double theL1,
+                                      in double theR2, in double theW2, in double theL2,
+                                      in double theRF, in boolean theHexMesh);
+    /*!
+     *  Create a T-shape object with specified caracteristics for the main and
+     *  the incident pipes (radius, width, half-length). A fillet is created
+     *  on the junction of the pipes.
+     *  The extremities of the main pipe are located on junctions points P1 and P2.
+     *  The extremity of the incident pipe is located on junction point P3.
+     *  \param theR1 Internal radius of main pipe
+     *  \param theW1 Width of main pipe
+     *  \param theL1 Half-length of main pipe
+     *  \param theR2 Internal radius of incident pipe (R2 < R1)
+     *  \param theW2 Width of incident pipe (R2+W2 < R1+W1)
+     *  \param theL2 Half-length of incident pipe
+     *  \param theRF Radius of curvature of fillet.
+     *  \param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=true)
+     *  \param theP1 1st junction point of main pipe
+     *  \param theP2 2nd junction point of main pipe
+     *  \param theP3 Junction point of incident pipe
+     *  \return List of GEOM_Objects, containing the created shape and propagation groups.
+     */
+    ListOfGO MakePipeTShapeFilletWithPosition (in double theR1, in double theW1, in double theL1,
+                                                  in double theR2, in double theW2, in double theL2,
+                                                  in double theRF, in boolean theHexMesh,
+                                                  in GEOM_Object theP1, in GEOM_Object theP2, in GEOM_Object theP3);
+    /*@@ insert new functions before this line @@ do not remove this line @@*/
+  };
+
   /*!
    *  GEOM_Gen: Interface to access other GEOM interfaces.
    *  Also contains some methods to access and manage GEOM objects.
@@ -2966,9 +3416,9 @@ module GEOM
      * Returns a SObject where theObject is placed
      */
     SALOMEDS::SObject AddInStudy (in SALOMEDS::Study theStudy,
-                                 in GEOM_Object theObject,
-                                 in string theName,
-                                 in GEOM_Object theFather);
+                                  in GEOM_Object theObject,
+                                  in string theName,
+                                  in GEOM_Object theFather);
 
     /*!
      *  Publish sub-shapes, standing for arguments and sub-shapes of arguments
@@ -2989,13 +3439,46 @@ module GEOM
      *                            operations, where only the first argument has to be considered.
      *                            If theObject has only one argument shape, this flag is automatically
      *                            considered as True, not regarding really passed value.
+     *  \param theAddPrefix add prefix "from_" to names of restored sub-shapes,
+     *                      and prefix "from_subshapes_of_" to names of partially restored subshapes.
      *  \return list of published sub-shapes
      */
     ListOfGO RestoreSubShapesO (in SALOMEDS::Study   theStudy,
-                               in GEOM_Object       theObject,
-                               in ListOfGO          theArgs,
-                               in find_shape_method theFindMethod,
-                               in boolean           theInheritFirstArg);
+                                 in GEOM_Object       theObject,
+                                in ListOfGO          theArgs,
+                                in find_shape_method theFindMethod,
+                                in boolean           theInheritFirstArg,
+                                in boolean           theAddPrefix);
+
+    /*!
+     *  Publish sub-shapes, standing for arguments and sub-shapes of arguments
+     *  To be used from python scripts out of geompy.addToStudy (non-default usage)
+     *  \param theStudy  the study, in which theObject is published already,
+     *                   and in which the arguments will be published
+     *  \param theObject published GEOM object, arguments of which will be published
+     *  \param theArgs   list of GEOM_Object, operation arguments to be published.
+     *                   If this list is empty, all operation arguments will be published
+     *  \param theFindMethod method to search subshapes, corresponding to arguments and
+     *                       their subshapes. Value from enumeration GEOM::find_shape_method.
+     *  \param theInheritFirstArg set properties of the first argument for \a theObject.
+     *                            Do not publish subshapes in place of arguments, but only
+     *                            in place of subshapes of the first argument,
+     *                            because the whole shape corresponds to the first argument.
+     *                            Mainly to be used after transformations, but it also can be
+     *                            usefull after partition with one object shape, and some other
+     *                            operations, where only the first argument has to be considered.
+     *                            If theObject has only one argument shape, this flag is automatically
+     *                            considered as True, not regarding really passed value.
+     *  \param theAddPrefix add prefix "from_" to names of restored sub-shapes,
+     *                      and prefix "from_subshapes_of_" to names of partially restored subshapes.
+     *  \return list of published sub-shapes
+     */
+    ListOfGO RestoreGivenSubShapesO (in SALOMEDS::Study   theStudy,
+                                     in GEOM_Object       theObject,
+                                     in ListOfGO          theArgs,
+                                     in find_shape_method theFindMethod,
+                                     in boolean           theInheritFirstArg,
+                                     in boolean           theAddPrefix);
 
     /*!
      *  Publish sub-shapes, standing for arguments and sub-shapes of arguments
@@ -3004,10 +3487,11 @@ module GEOM
      *  \param theSObject study object, referencing GEOM object, arguments of which will be published
      */
     ListOfGO RestoreSubShapesSO (in SALOMEDS::Study   theStudy,
-                                in SALOMEDS::SObject theSObject,
-                                in ListOfGO          theArgs,
-                                in find_shape_method theFindMethod,
-                                in boolean           theInheritFirstArg);
+                                 in SALOMEDS::SObject theSObject,
+                                 in ListOfGO          theArgs,
+                                 in find_shape_method theFindMethod,
+                                 in boolean           theInheritFirstArg,
+                                 in boolean           theAddPrefix);
 
     /*!
      *  Methods to access interfaces for objects creation and transformation
@@ -3024,6 +3508,7 @@ module GEOM
     GEOM_IMeasureOperations   GetIMeasureOperations  (in long theStudyID) raises (SALOME::SALOME_Exception);
     GEOM_IBlocksOperations    GetIBlocksOperations   (in long theStudyID) raises (SALOME::SALOME_Exception);
     GEOM_IGroupOperations     GetIGroupOperations    (in long theStudyID) raises (SALOME::SALOME_Exception);
+    GEOM_IAdvancedOperations  GetIAdvancedOperations (in long theStudyID) raises (SALOME::SALOME_Exception);
 
     /*!
      *  Objects Management
@@ -3086,8 +3571,8 @@ module GEOM
      *  \param theObject   The object which named subshapes are published
      */
     ListOfGO PublishNamedShapesInStudy(in SALOMEDS::Study theStudy,
-                                            //in SObject theSObject,
-                                            in Object theObject);
+                                       //in SObject theSObject,
+                                       in Object theObject);
   };
 };