Salome HOME
0020552: EDF GEOM: method written twice
[modules/geom.git] / idl / GEOM_Gen.idl
index d5d18f0fa41cc29c0593d5774605095ba57eae80..a04fcb4c6bcea7ce4c4212246e47ff17da60e764 100644 (file)
@@ -1,21 +1,23 @@
-// Copyright (C) 2005  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-// 
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either 
-// version 2.1 of the License.
-// 
-// This library is distributed in the hope that it will be useful 
-// but WITHOUT ANY WARRANTY; without even the implied warranty of 
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-// Lesser General Public License for more details.
+//  Copyright (C) 2007-2008  CEA/DEN, EDF R&D, OPEN CASCADE
 //
-// You should have received a copy of the GNU Lesser General Public  
-// License along with this library; if not, write to the Free Software 
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 //
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 //  File   : GEOM_Gen.idl
 //  Author : Sergey RUIN
@@ -26,6 +28,7 @@
 #include "SALOME_Exception.idl"
 #include "SALOME_Component.idl"
 #include "SALOMEDS.idl"
+#include "SALOMEDS_Attributes.idl"
 
 #include "SALOME_GenericObj.idl"
 
@@ -35,7 +38,7 @@ module GEOM
    *  Topological types of shapes (like Open Cascade types)
    */
   enum shape_type { COMPOUND, COMPSOLID, SOLID, SHELL,
-                   FACE, WIRE, EDGE, VERTEX, SHAPE };
+                    FACE, WIRE, EDGE, VERTEX, SHAPE };
 
 
   /*!
@@ -75,6 +78,32 @@ module GEOM
     ST_ONIN
   };
 
+  /*!
+   *  Kind of method to find inside one main shape some subshapes,
+   *  corresponding to other given shape (its argument)
+   *  Is used in functions GEOM_Gen.RestoreSubShapes<xxx>()
+   */
+  enum find_shape_method
+  {
+    /*! Use GetInPlace functionality. Suits all cases, except transformations */
+    FSM_GetInPlace,
+
+    /*! To be used only for transformation result, to find subshapes of argument.
+     *  Only this method can be used after transformation.
+     */
+    FSM_Transformed,
+
+    /*! To find only shared subshapes, not modified by the operation */
+    FSM_GetSame,
+
+    /*! Use GetShapesOnShape method (can work only on solids) */
+    FSM_GetShapesOnShape,
+
+    /*! Use GetInPlaceByHistory method (can work only after Partition) */
+    FSM_GetInPlaceByHistory
+  };
+
+
   typedef sequence<string>      string_array;
   typedef sequence<short>       short_array;
   typedef sequence<long>        ListOfLong;
@@ -121,6 +150,28 @@ module GEOM
      */
     string GetName();
 
+    /*!
+     *  Set color of the object.
+     *  \param theColor is a color of the object.
+     */
+    void SetColor(in SALOMEDS::Color theColor);
+
+    /*!
+     *  Get color of the object.
+     */
+    SALOMEDS::Color GetColor();
+
+    /*!
+     *  Toggle auto color mode on the object.
+     *  \param theAtoColor is a flag which toggles auto color mode.
+     */
+    void SetAutoColor(in boolean theAutoColor);
+
+    /*!
+     *  Get flag of object's auto color mode.
+     */
+    boolean GetAutoColor();
+
     /*!
      *  Set a Study entry where this object was published.
      */
@@ -147,7 +198,7 @@ module GEOM
     /*!
      *  Get the TopoDS_Shape, for colocated case only.
      */
-    long getShape();
+    long long getShape();
 
     /*!
      ######################################################################
@@ -182,6 +233,18 @@ module GEOM
      *  For example, method return false for GEOM_MARKER
      */
      boolean IsShape();
+
+     /*!
+     *  Set list of parameters
+     *  \param theParameters is a string containing the notebook variables separated by ":" symbol,
+     *         used for object creation
+     */
+    void SetParameters (in string theParameters);
+                           
+    /*!
+     *  Return list of notebook variables used for object creation separated by ":" symbol
+     */
+    string GetParameters();
   };
 
 
@@ -264,13 +327,59 @@ module GEOM
     GEOM_Object MakePointOnCurve (in GEOM_Object theRefCurve,
                                  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
+     *    given surface.
+     *  \param theRefSurf The referenced surface.
+     *  \param theUParameter Value of U-parameter on the referenced surface.
+     *  \param theVParameter Value of V-parameter on the referenced surface.
+     *  \return New GEOM_Object, containing the created point.
+     */
+    GEOM_Object MakePointOnSurface (in GEOM_Object theRefSurf,
+                                   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.
+     *  \param theRefLine1, theRefLine2 The referenced lines.
+     *  \return New GEOM_Object, containing the created point.
+     */
+    GEOM_Object MakePointOnLinesIntersection (in GEOM_Object theRefLine1,
+                                             in GEOM_Object theRefLine2);
+
      /*!
      *  Create a vector, corresponding to tangent to the given parameter on the given curve.
      *  \param theRefCurve The referenced curve.
      *  \param theParameter Value of parameter on the referenced curve.This value should be have value
      *  \between 0. and 1.. Value of 0. corresponds first parameter of curve value 1. corresponds
-     *  \last parameter of curve. 
+     *  \last parameter of curve.
      *  \return New GEOM_Object, containing the created point.
      */
      GEOM_Object MakeTangentOnCurve (in GEOM_Object theRefCurve,
@@ -312,6 +421,14 @@ module GEOM
      */
     GEOM_Object MakeLineTwoPnt (in GEOM_Object thePnt1, in GEOM_Object thePnt2);
 
+    /*!
+     *  Create a line, given by two faces intersection.
+     *  \param theFace1 First of two faces, defining the line.
+     *  \param theFace2 Second of two faces, defining the line.
+     *  \return New GEOM_Object, containing the created line.
+     */
+    GEOM_Object MakeLineTwoFaces (in GEOM_Object theFace1, in GEOM_Object theFace2);
+
     /*!
      *  Create a plane, passing through the three given points
      *  \param thePnt1 First of three points, defining the plane.
@@ -339,12 +456,34 @@ module GEOM
 
     /*!
      *  Create a plane, similar to the existing one, but with another size of representing face.
-     *  \param theFace Referenced plane.
+     *  \param theFace Referenced plane or LCS(Marker).
      *  \param theTrimSize New half size of a side of quadrangle face, representing the plane.
      *  \return New GEOM_Object, containing the created plane.
      */
     GEOM_Object MakePlaneFace (in GEOM_Object theFace,
                               in double theTrimSize);
+                              
+    /*!
+     *  Create a plane, by two vectors.
+     *  \param theVec1 Vector1, the plane has to pass through first point of this vector.
+     *  \param theVec Vector2, defining the plane normal direction.
+     *  \param theTrimSize Half size of a side of quadrangle face, representing the plane.
+     *  \return New GEOM_Object, containing the created plane.
+     */
+    GEOM_Object MakePlane2Vec (in GEOM_Object theVec1,
+                              in GEOM_Object theVec2,
+                              in double theTrimSize);
+                              
+    /*!
+     *  Create a plane, defined by local coordinate system.
+     *  \param theLCS Referenced LCS(Marker).
+     *  \param theTrimSize Half size of a side of quadrangle face, representing the plane.
+     *  \param theOrientation OXY, OYZ or OZX orientation = (1, 2 or 3).
+     *  \return New GEOM_Object, containing the created plane.
+     */
+    GEOM_Object MakePlaneLCS (in GEOM_Object theLCS,
+                             in double theTrimSize,
+                             in double theOrientation);
 
     /*!
      *  Create a local coordinate system.
@@ -356,11 +495,11 @@ module GEOM
     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);
-     
+
     /*!
      *  Create a tangent plane to specified face in the point with specified parameters.
      *  Values of parameters should be between 0. and 1.0
-     *  \param theFace - face for which tangent plane shuold be built. 
+     *  \param theFace - face for which tangent plane shuold be built.
      *  \param theParameterU - value of parameter by U
      *  \param theParameterV - value of parameter Vthe
      *  \param theTrimSize - defines sizes of created face
@@ -436,6 +575,20 @@ module GEOM
     GEOM_Object TranslateVectorCopy (in GEOM_Object theObject,
                                     in GEOM_Object theVector);
 
+    /*!
+     *  Translate the given object along the given vector on given distance,
+     *  creating its copy before the translation.
+     *  \param theObject The object to be translated.
+     *  \param theVector Translation vector, giving a direction.
+     *  \param theDistance Translation distance, giving a distance.
+     *  \param theCope Translation copy, creating its copy if true.
+     *  \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);
+
     /*!
      *  Translate the given object along the given vector a given number times
      *  \param theObject The object to be translated.
@@ -470,6 +623,34 @@ module GEOM
                                  in double theStep2,
                                  in long theNbTimes2);
 
+    /*!
+     *  Rotate given object around vector perpendicular to plane containing three points.
+     *  \param theObject The object to be rotated.
+     *  \param theCentPoint central point - the axis is the vector perpendicular to the plane
+     *  containing the three points.
+     *  \param thePoint1 and thePoint2 - in a perpendicular plan of the axis.
+     *  \return theObject.
+     */
+    GEOM_Object RotateThreePoints (in GEOM_Object theObject,
+                                  in GEOM_Object theCentPoint,
+                                  in GEOM_Object thePoint1,
+                                  in GEOM_Object thePoint2);
+
+
+    /*!
+     *  Rotate given object around vector perpendicular to plane containing three points.
+     *  Creating its copy before the rotatation.
+     *  \param theObject The object to be rotated.
+     *  \param theCentPoint central point - the axis is the vector perpendicular to the plane
+     *  containing the three points.
+     *  \param thePoint1 and thePoint2 - in a perpendicular plan of the axis.
+     *  \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);
+
     /*!
      *  Rotate the given object around the given axis on the given angle.
      *  \param theObject The object to be rotated.
@@ -481,6 +662,7 @@ module GEOM
                        in GEOM_Object theAxis,
                        in double theAngle);
 
+
     /*!
      *  Rotate the given object around the given axis
      *  on the given angle, creating its copy before the rotatation.
@@ -493,6 +675,7 @@ module GEOM
                            in GEOM_Object theAxis,
                            in double theAngle);
 
+
     /*!
      *  Rotate the given object around the given axis a given number times.
      *  Rotation angle will be 2*PI/theNbTimes.
@@ -616,19 +799,85 @@ module GEOM
                                in double theFactor);
 
     /*!
-     *  Modify the Location of the given object by LCS
+     *  Scale the given object by different factors along coordinate axes.
+     *  \param theObject The object to be scaled.
+     *  \param thePoint Center point for scaling.
+     *  \param theFactorX,theFactorY,theFactorZ Scaling factors along each axis.
+     *  \return theObject.
+     */
+    GEOM_Object ScaleShapeAlongAxes (in GEOM_Object theObject,
+                                     in GEOM_Object thePoint,
+                                     in double theFactorX,
+                                     in double theFactorY,
+                                     in double theFactorZ);
+
+    /*!
+     *  Scale the given object by different factors along coordinate axes,
+     *  creating its copy before the scaling.
+     *  \param theObject The object to be scaled.
+     *  \param thePoint Center point for scaling.
+     *  \param theFactorX,theFactorY,theFactorZ Scaling factors along each axis.
+     *  \return New GEOM_Object, containing the scaled shape.
+     */
+    GEOM_Object ScaleShapeAlongAxesCopy (in GEOM_Object theObject,
+                                         in GEOM_Object thePoint,
+                                         in double theFactorX,
+                                         in double theFactorY,
+                                         in double theFactorZ);
+
+    /*!
+     *  Modify the Location of the given object by LCS.
+     *  \param theObject The object to be displaced.
+     *  \param theStartLCS Coordinate system to perform displacement from it.
+     *                     If \a theStartLCS is NULL, displacement
+     *                     will be performed from global CS.
+     *                     If \a theObject itself is used as \a theStartLCS,
+     *                     its location will be changed to \a theEndLCS.
+     *  \param theEndLCS Coordinate system to perform displacement to it.
+     *  \return theObject.
      */
     GEOM_Object PositionShape (in GEOM_Object theObject,
                               in GEOM_Object theStartLCS,
                               in GEOM_Object theEndLCS);
 
     /*!
-     *  Modify the Location of the given object by LCS
-     *  creating its copy before the setting
+     *  Modify the Location of the given object by LCS,
+     *  creating its copy before the setting.
+     *  \param theObject The object to be displaced.
+     *  \param theStartLCS Coordinate system to perform displacement from it.
+     *                     If \a theStartLCS is NULL, displacement
+     *                     will be performed from global CS.
+     *                     If \a theObject itself is used as \a theStartLCS,
+     *                     its location will be changed to \a theEndLCS.
+     *  \param theEndLCS Coordinate system to perform displacement to it.
+     *  \return New GEOM_Object, containing the displaced shape.
      */
     GEOM_Object PositionShapeCopy (in GEOM_Object theObject,
                                   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.
+     *  \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);
+
+    /*!
+     *  Recompute the shape from its arguments.
+     *  \param theObject The object to be recomputed.
+     *  \return theObject.
+     */
+    GEOM_Object RecomputeObject (in GEOM_Object theObject);
   };
 
   /*!
@@ -658,6 +907,53 @@ module GEOM
      */
     GEOM_Object MakeBoxTwoPnt (in GEOM_Object thePnt1, in GEOM_Object thePnt2);
 
+    /*!
+     *  Create a face specified dimensions along OX-OY coordinate axes,
+     *  with edges parallel to the coordinate axes.
+     *  Center of the face will be at point (0, 0, 0).
+     *  \param theH Height of the Face.
+     *  \param theW Width of the Face.
+     *  \param theOrientation Orientation belong axis OXY OYZ OZX
+     *  \return New GEOM_Object, containing the created face.
+     */
+    GEOM_Object MakeFaceHW (in double theH, in double theW, in short theOrientation);
+    /*!
+     *  Create a face by normale vector or edge and two specified sizes,
+     *  vertical (H) and horisontal (W).
+     *  \param theVec defines plane.
+     *  \param theH vertical size (height).
+     *  \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);
+    /*!
+     *  Create a Disk (circular face) with given center, normal vector and radius.
+     *  \param thePnt disk center.
+     *  \param theVec Vector, normal to the plane of the disk.
+     *  \param theR Disk radius.
+     *  \return New GEOM_Object, containing the created disk.
+     */
+    GEOM_Object MakeDiskPntVecR (in GEOM_Object thePnt,
+                                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);
+                                 
+    /*!
+     *  Create a disk specified dimensions along OX-OY coordinate axes,
+     *  Center of the disk at point (0, 0, 0).
+     *  \param theR of the Disk.
+     *  \param theOrientation Orientation belong axis OXY OYZ OZX
+     *  \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
@@ -760,6 +1056,10 @@ module GEOM
     GEOM_Object MakePrismVecH (in GEOM_Object theBase,
                               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);
 
     /*!
      *  Create a shape by extrusion of the base shape along a vector, defined by two points.
@@ -771,6 +1071,22 @@ module GEOM
     GEOM_Object MakePrismTwoPnt (in GEOM_Object theBase,
                                 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);
+                                   
+    /*!
+     *  Create a shape by extrusion of the base shape along a vector, defined by DX DY DZ.
+     *  \param theBase Base shape to be extruded.
+     *  \param DX, DY, DZ end of extrusion vector.
+     *  \return New GEOM_Object, containing the created prism.
+     */
+    GEOM_Object MakePrismDXDYDZ (in GEOM_Object theBase,
+                                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);
 
     /*!
      *  Create a shape by extrusion of the base shape along
@@ -793,20 +1109,24 @@ module GEOM
     GEOM_Object MakeRevolutionAxisAngle (in GEOM_Object theBase,
                                         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);
 
     /*!
      *  Create a filling from the given compound of contours.
-     *  \param theMinDeg a minimal degree
-     *  \param theMaxDeg a maximal degree
-     *  \param theTol2D a 2d tolerance
-     *  \param theTol3D a 3d tolerance
-     *  \param theNbIter a number of iteration
+     *  \param theMinDeg a minimal degree of BSpline surface to create
+     *  \param theMaxDeg a maximal degree of BSpline surface to create
+     *  \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
      *  \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 long theNbIter, in boolean theApprox);
 
     /*!
      *  Create a shell or solid passing through set of sections.Sections should be wires,edges or vertices.
@@ -841,7 +1161,54 @@ module GEOM
                                               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.        
+     *  \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
+     *                        specified list of the Bases shapes. Number of locations
+     *                        should be equal to number of bases.
+     *  \param thePath - Path shape to extrude the base shape along it.
+     *  \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
+     *  \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 );
+
+    /*!
+     * Create solids between given sections
+     *  \param theSeqBases - list of sections (shell or face).
+     *  \param theLocations - list of corresponding vertexes
+     *  \return New GEOM_Object, containing the created solids.
+     */
+    GEOM_Object MakePipeShellsWithoutPath (in ListOfGO theSeqBases,
+                                          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 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.
+     *  \param theVec Vector defines a constant binormal direction to keep the
+     *                same angle beetween the Direction and the sections
+     *                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);
+
   };
 
   /*!
@@ -862,13 +1229,16 @@ module GEOM
     /*!
      *  Create a wire from the set of edges and wires.
      *  \param theEdgesAndWires List of edge and/or wires.
+     *  \param theTolerance Maximum distance between vertices, that will be merged.
+     *                      Values less than 1e-07 are equivalent to 1e-07 (Precision::Confusion()).
      *  \return New GEOM_Object, containing the created wire.
      */
-    GEOM_Object MakeWire (in ListOfGO theEdgesAndWires);
+    GEOM_Object MakeWire (in ListOfGO theEdgesAndWires,
+                          in double   theTolerance);
 
     /*!
      *  Create a face on the given wire.
-     *  \param theWire Wire to build the face on.
+     *  \param theWire closed Wire or Edge to build the face on.
      *  \param isPlanarWanted If TRUE, only planar face will be built.
      *                        If impossible, NULL object will be returned.
      *  \return New GEOM_Object, containing the created face.
@@ -877,7 +1247,7 @@ module GEOM
 
     /*!
      *  Create a face on the given wires set.
-     *  \param theWires List of wires to build the face on.
+     *  \param theWires List of closed wires or edges to build the face on.
      *  \param isPlanarWanted If TRUE, only planar face will be built.
      *                        If impossible, NULL object will be returned.
      *  \return New GEOM_Object, containing the created face.
@@ -916,9 +1286,30 @@ module GEOM
      *  Replace coincident faces in theShape by one face.
      *  \param theShape Initial shape.
      *  \param theTolerance Maximum distance between faces, which can be considered as coincident.
+     *  \param doKeepNonSolids If FALSE, only solids will present in the result, otherwise all initial shapes.
      *  \return New GEOM_Object, containing a copy of theShape without coincident faces.
      */
-    GEOM_Object MakeGlueFaces (in GEOM_Object theShape, in double theTolerance);
+    GEOM_Object MakeGlueFaces (in GEOM_Object theShape, in double theTolerance, in boolean doKeepNonSolids);
+
+    /*!
+     *  Find coincident faces in theShape for possible gluing.
+     *  \param theShape Initial shape.
+     *  \param theTolerance Maximum distance between faces, which can be considered as coincident.
+     *  \return ListOfGO
+     */
+    ListOfGO GetGlueFaces (in GEOM_Object theShape, in double theTolerance);
+
+    /*!
+     *  Replace coincident faces in theShape by one face
+     *  in compliance with given list of faces
+     *  \param theShape Initial shape.
+     *  \param theTolerance Maximum distance between faces, which can be considered as coincident.
+     *  \param theFaces List of faces for gluing.
+     *  \param doKeepNonSolids If FALSE, only solids will present in the result, otherwise all initial shapes.
+     *  \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);
 
     /*!
      *  Explode a shape on subshapes of a given type.
@@ -997,6 +1388,15 @@ module GEOM
      */
     long NumberOfEdges (in GEOM_Object theShape);
 
+    /*!
+     *  Count number of subshapes of type \a theShapeType in the given shape.
+     *  \param theShape Shape to count subshapes in.
+     *  \param theShapeType The type of subshapes to count.
+     *  \return Number of subshapes of type \a theShapeType in \a theShape.
+     */
+    long NumberOfSubShapes (in GEOM_Object theShape,
+                            in long        theShapeType);
+
     /*!
      *  Reverses an orientation the given shape.
      *  \param theShape Shape to be reversed.
@@ -1037,6 +1437,24 @@ module GEOM
                               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.
+     *  \param theShape Shape to find sub-shapes of.
+     *  \param theShapeType Type of sub-shapes to be retrieved.
+     *  \param theAx1 Vector (or line, or linear edge), specifying normal
+     *                direction of the plane to find shapes on.
+     *  \param thePnt Point specifying location of the plane to find shapes on.
+     *  \param theState The state of the subshapes to find.
+     *  \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);
+
+
 
     /*!
      *  Find in \a theShape all sub-shapes of type \a theShapeType, situated relatively
@@ -1106,6 +1524,23 @@ module GEOM
                                    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.
+     *  \param theShape Shape to find sub-shapes of.
+     *  \param theShapeType Type of sub-shapes to be retrieved.
+     *  \param theAx1 Vector (or line, or linear edge), specifying normal
+     *                direction of the plane to find shapes on.
+     *  \param thePnt Point specifying location of the plane to find shapes on.
+     *  \param theState The state of the subshapes to find.
+     *  \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);
+
     /*!
      *  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.
@@ -1160,7 +1595,72 @@ module GEOM
                                          in shape_state theState);
 
     /*!
-     *  Get sub-shape(s) of theShapeWhere, which are
+     * \brief Find subshapes complying with given status
+     * \param theBox - the box to check state of subshapes against
+     * \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 GetShapesOnBoxIDs (in GEOM_Object theBox,
+                                 in GEOM_Object theShape,
+                                 in long        theShapeType,
+                                 in shape_state theState);
+
+    /*!
+     * \brief Find subshapes complying with given status
+     * \param theBox - the box to check state of subshapes against
+     * \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 GetShapesOnBox (in GEOM_Object theBox,
+                            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 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);
+
+    /*!
+     * \brief Find subshapes complying with given status
+     * \param theCheckShape - the shape to check state of subshapes against
+     * \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);
+
+    /*!
+     * \brief Find subshapes complying with given status
+     * \param theCheckShape - the shape to check state of subshapes against
+     * \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);
+
+    /*!
+     *  Get sub-shape(s) of \a theShapeWhere, which are
      *  coincident with \a theShapeWhat or could be a part of it.
      *  \param theShapeWhere Shape to find sub-shapes of.
      *  \param theShapeWhat Shape, specifying what to find.
@@ -1168,6 +1668,33 @@ module GEOM
      */
     GEOM_Object GetInPlace (in GEOM_Object theShapeWhere,
                            in GEOM_Object theShapeWhat);
+
+    /*!
+     *  Get sub-shape(s) of \a theShapeWhere, which are
+     *  coincident with \a theShapeWhat or could be a part of it.
+     *
+     *  Implementation of this method is based on a saved history of an operation,
+     *  produced \a theShapeWhere. The \a theShapeWhat must be among this operation's
+     *  arguments (an argument shape or a sub-shape of an argument shape).
+     *  The operation could be the Partition or one of boolean operations,
+     *  performed on simple shapes (not on compounds).
+     *
+     *  \param theShapeWhere Shape to find sub-shapes of.
+     *  \param theShapeWhat Shape, specifying what to find.
+     *  \return Group of all found sub-shapes or a single found sub-shape.
+     */
+    GEOM_Object GetInPlaceByHistory (in GEOM_Object theShapeWhere,
+                                    in GEOM_Object theShapeWhat);
+
+    /*!
+     *  Get sub-shape of theShapeWhere, which are
+     *  coincident with \a theShapeWhat that can either SOLID, FACE, EDGE or VERTEX.
+     *  \param theShapeWhere Shape to find sub-shapes of.
+     *  \param theShapeWhat Shape, specifying what to find.
+     *  \return found sub-shape.
+     */
+    GEOM_Object GetSame (in GEOM_Object theShapeWhere,
+                        in GEOM_Object theShapeWhat);
   };
 
   /*!
@@ -1403,9 +1930,14 @@ module GEOM
      *  Remove all seam and degenerated edges from \a theShape.
      *  Unite faces and edges, sharing one surface.
      *  \param theShape The compound or single solid to remove irregular edges from.
+     *  \param theOptimumNbFaces If more than zero, unite faces only for those solids,
+     *         that have more than theOptimumNbFaces faces. If zero, unite faces always,
+     *         regardsless their quantity in the solid. If negative, do not unite faces at all.
+     *         For blocks repairing recommended value is 6.
      *  \return Improved shape.
      */
-    GEOM_Object RemoveExtraEdges (in GEOM_Object theShape);
+    GEOM_Object RemoveExtraEdges (in GEOM_Object theShape,
+                                  in long        theOptimumNbFaces);
 
     /*!
      *  Check, if the given shape is a blocks compound.
@@ -1528,13 +2060,25 @@ module GEOM
      *  Perform partition operation.
      *  \param theShapes Shapes to be intersected.
      *  \param theTools Shapes to intersect theShapes.
+     *  \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)
+     *
+     *  After implementation new version of PartitionAlgo (October 2006)
+     *  other parameters are ignored by current functionality. They are kept
+     *  in this function only for supporting old versions.
+     *  Ignored parameters:
      *  \param theKeepInside Shapes, outside which the results will be deleted.
      *         Each shape from theKeepInside must belong to theShapes also.
      *  \param theRemoveInside Shapes, inside which the results will be deleted.
      *         Each shape from theRemoveInside must belong to theShapes also.
-     *  \param theLimit Type of resulting shapes (corresponding to TopAbs_ShapeEnum).
      *  \param theRemoveWebs If TRUE, perform Glue 3D algorithm.
      *  \param theMaterials Material indices for each shape. Make sence, only if theRemoveWebs is TRUE.
+     *
      *  \return New GEOM_Object, containing the result shapes.
      */
     GEOM_Object MakePartition (in ListOfGO   theShapes,
@@ -1543,7 +2087,30 @@ module GEOM
                               in ListOfGO   theRemoveInside,
                               in short      theLimit,
                               in boolean    theRemoveWebs,
-                              in ListOfLong theMaterials);
+                              in ListOfLong theMaterials,
+                              in short      theKeepNonlimitShapes);
+
+    /*!
+     *  Perform partition operation.
+     *  This method may be usefull if it is needed to make a partition for
+     *  a compound containing nonintersected shapes. Performance will be better
+     *  since intersection between shapes from compound is not performed.
+     *
+     *  Description of all parameters as in previous method MakePartition()
+     *
+     *  \note Passed compounds (via ListShapes or via ListTools)
+     *        have to consist of nonintersecting shapes.
+     *
+     *  \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);
 
     /*!
      *  Perform partition of the Shape with the Plane
@@ -1579,7 +2146,15 @@ module GEOM
     GEOM_Object MakeCircleThreePnt (in GEOM_Object thePnt1,
                                    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.
+     *  \param thePnt1,thePnt2,thePnt3 Points, defining the circle.
+     *  \return New GEOM_Object, containing the created circle.
+     */
+    GEOM_Object MakeCircleCenter2Pnt (in GEOM_Object thePnt1,
+                                     in GEOM_Object thePnt2,
+                                     in GEOM_Object thePnt3);
     /*!
      *  Create an ellipse with given center, normal vector and radiuses.
      *  \param thePnt Ellipse center.
@@ -1593,6 +2168,21 @@ module GEOM
                             in double theRMajor,
                             in double theRMinor);
 
+    /*!
+     *  Create an ellipse with given center, normal vector, main axis vector and radiuses.
+     *  \param thePnt Ellipse center.
+     *  \param theVec Vector, normal to the plane of the ellipse.
+     *  \param theRMajor Major ellipse radius.
+     *  \param theRMinor Minor ellipse radius.
+     *  \param theVecMaj Vector, direction of the ellipse's main axis.
+     *  \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);
+
     /*!
      *  Create an arc of circle, passing through three given points.
      *  \param thePnt1 Start point of the arc.
@@ -1604,6 +2194,31 @@ module GEOM
                         in GEOM_Object thePnt2,
                         in GEOM_Object thePnt3);
 
+    /*!
+     *  Create an arc of circle of center C from one point to another
+     *  \param theCenter Center point of the arc.
+     *  \param thePnt1 Start point of the arc.
+     *  \param thePnt2 End point of the arc.
+     *  \param theSense Orientation of the arc
+     *  \return New GEOM_Object, containing the created arc.
+     */
+    GEOM_Object MakeArcCenter (in GEOM_Object theCenter,
+                               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.
+     *  \param thePnt1 Major radius is distance from center to Pnt1.
+     *  \param thePnt2 define a plane and Minor radius as a shortest distance from Pnt2 to vector Center->Pnt1.
+     *  \return New GEOM_Object, containing the created arc.
+     */
+    GEOM_Object MakeArcOfEllipse (in GEOM_Object theCenter,
+                                 in GEOM_Object thePnt1,
+                                 in GEOM_Object thePnt2);
+
+
     /*!
      *  Create a polyline on the set of points.
      *  \param thePoints Sequence of points for the polyline.
@@ -1621,9 +2236,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,
@@ -1660,6 +2277,16 @@ 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
+     *  Format of the description string have to be the following:
+     *
+     *  "Make3DSketcher[x1, y1, z1, x2, y2, z2, ..., xN, yN, zN]"
+     */
+    
+    GEOM_Object Make3DSketcher (in ListOfDouble theCoordinates);
 
       /*!
      *  Create a sketcher (wire or face), following the textual description,
@@ -1667,7 +2294,7 @@ module GEOM
      *  For format of the description string see the previous method.\n
      *  \param theCommand String, defining the sketcher in local
      *                    coordinates of the working plane.
-     *  \param theWorkingPlane Planar Face of the working plane.
+     *  \param theWorkingPlane Planar Face or LCS(Marker) of the working plane.
      *  \return New GEOM_Object, containing the created wire.
      */
     GEOM_Object MakeSketcherOnPlane (in string theCommand, in GEOM_Object theWorkingPlane);
@@ -1699,6 +2326,10 @@ module GEOM
     GEOM_Object MakeFilletEdges (in GEOM_Object theShape,
                                 in double      theR,
                                 in ListOfLong  theEdges);
+    GEOM_Object MakeFilletEdgesR1R2 (in GEOM_Object theShape,
+                                    in double      theR1,
+                                    in double      theR2,
+                                    in ListOfLong  theEdges);
 
     /*!
      *  Perform a fillet on all edges of the specified faces of the given shape.
@@ -1712,6 +2343,39 @@ module GEOM
     GEOM_Object MakeFilletFaces (in GEOM_Object theShape,
                                 in double      theR,
                                 in ListOfLong  theFaces);
+                                
+    GEOM_Object MakeFilletFacesR1R2 (in GEOM_Object theShape,
+                                    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.
+     *  \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>.
+     *  \return New GEOM_Object, containing the result shape.
+     */
+    GEOM_Object MakeFillet2D (in GEOM_Object theShape,
+                             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.
@@ -1736,6 +2400,13 @@ module GEOM
     GEOM_Object MakeChamferEdge (in GEOM_Object theShape,
                                 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);
 
     /*!
      *  Perform a chamfer on all edges of the specified faces.
@@ -1753,6 +2424,32 @@ module GEOM
     GEOM_Object MakeChamferFaces (in GEOM_Object theShape,
                                  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);
+
+   /*!
+    *  Perform a chamfer on edges,
+    *  with distance D1 on the first specified face (if several for one edge)
+    *  \param theShape Shape, to perform chamfer on.
+    *  \param theD1 theD2 Chamfer size
+    *  \param theEdges Sequence of edges of \a theShape.
+    *  \return New GEOM_Object, containing the result shape.
+    */
+    GEOM_Object MakeChamferEdges (in GEOM_Object theShape,
+                                 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);
 
     /*!
      *  Perform an Archimde operation on the given shape with given parameters.
@@ -1894,6 +2591,15 @@ module GEOM
     boolean GetFreeBoundary (in GEOM_Object theObject,
                             out ListOfGO theClosedWires,
                             out ListOfGO theOpenWires);
+
+    /*!
+     *  Change orientation of the given object.
+     *  \param theObject Shape to be processed.
+     *  \return New GEOM_Object, containing processed shape.
+     */
+    GEOM_Object ChangeOrientation (in GEOM_Object theObject);
+    GEOM_Object ChangeOrientationCopy (in GEOM_Object theObject);
+
   };
 
   /*!
@@ -1922,6 +2628,8 @@ module GEOM
      *  \param theFileName The file, containing the shape.
      *  \param theFormatName Specify format for the file reading.
      *         Available formats can be obtained with <VAR>ImportTranslators()</VAR> method.
+     *         If format 'IGES_SCALE' is used instead 'IGES' length unit will be
+     *         set to 'meter' and result model will be scaled.
      *  \return New GEOM_Object, containing the imported shape.
      */
     GEOM_Object Import (in string theFileName, in string theFormatName);
@@ -1945,6 +2653,52 @@ module GEOM
                            out string_array thePatterns);
   };
 
+  /*!
+   *  GEOM_IKindOfShape: namespace for shape_kind enumeration.
+   */
+  interface GEOM_IKindOfShape
+  {
+    enum shape_kind {
+      NO_SHAPE,
+      // COMPOSITEs
+      COMPOUND,
+      COMPSOLID,
+      SHELL,
+      WIRE,
+      // SOLIDs
+      SPHERE,       // full sphere
+      CYLINDER,     // cylinder
+      BOX,          // box with faces, parallel to global coordinate planes
+      ROTATED_BOX,  // other box
+      TORUS,        // full torus
+      CONE,         // cone
+      POLYHEDRON,   // solid, bounded by polygons
+      SOLID,        // other solid
+      // FACEs
+      SPHERE2D,     // spherical face (closed)
+      CYLINDER2D,   // cylindrical face with defined height
+      TORUS2D,      // toroidal face (closed)
+      CONE2D,       // conical face with defined height
+      DISK_CIRCLE,  // planar, bounded by circle
+      DISK_ELLIPSE, // planar, bounded by ellipse
+      POLYGON,      // planar, bounded by segments
+      PLANE,        // infinite planar
+      PLANAR,       // other planar
+      FACE,         // other face
+      // EDGEs
+      CIRCLE,       // full circle
+      ARC_CIRCLE,   // arc of circle
+      ELLIPSE,      // full ellipse
+      ARC_ELLIPSE,  // arc of ellipse
+      LINE,         // infinite segment
+      SEGMENT,      // segment
+      EDGE,         // other edge
+      // VERTEX
+      VERTEX
+    };
+  };
+
+
   /*!
    *  GEOM_IMeasureOperations: Interface for measurement (distance, whatis) and
    *  properties calculation (like Centre of Mass, Inertia, etc.).
@@ -1952,6 +2706,37 @@ module GEOM
    */
   interface GEOM_IMeasureOperations : GEOM_IOperations
   {
+    /*!
+     *  Get kind of theShape.
+     *  \param theShape Shape to get a kind of.
+     *  \param theIntegers Output. Integer and enumerated shape's parameters
+     *                     (kind of surface, closed/unclosed, number of edges, etc.)
+     *  \param theDoubles  Output. Double shape's parameters (coordinates, dimensions, etc.)
+     *  \note  Concrete meaning of each value, returned via \a theIntegers
+     *         or \a theDoubles list depends on the kind of the shape.
+     *  \return Returns a kind of shape in terms of <VAR>GEOM_IKindOfShape.shape_kind</VAR> enumeration.
+     */
+    //short KindOfShape (in GEOM_Object   theShape,
+    GEOM_IKindOfShape::shape_kind KindOfShape (in  GEOM_Object  theShape,
+                                              out ListOfLong   theIntegers,
+                                              out ListOfDouble theDoubles);
+
+    /*!
+     *  Get position (LCS) of theShape.
+     *  \param theShape Shape to calculate position of.
+     *  \param Ox,Oy,Oz Output. Coordinates of shape's location origin.
+     *                  Origin of the LCS is situated at the shape's center of mass.
+     *  \param Zx,Zy,Zz Output. Coordinates of shape's location normal(main) direction.
+     *  \param Xx,Xy,Xz Output. Coordinates of shape's location X direction.
+     *                  Axes of the LCS are obtained from shape's location or,
+     *                  if the shape is a planar face, from position of its plane.
+     *  \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);
+
     /*!
      *  Get summarized length of all wires,
      *  area of surface and volume of the given shape.
@@ -1973,6 +2758,17 @@ module GEOM
      */
     GEOM_Object GetCentreOfMass (in GEOM_Object theShape);
 
+    /*!
+     *  Get a vector, representing the normal of theFace.
+     *  If the face is not planar, theOptionalPoint is obligatory.
+     *  \param theFace Shape (face) to define the normal of.
+     *  \param theOptionalPoint Shape (point) to define the normal at.
+     *                          Can be NULL in case of planar face.
+     *  \return New GEOM_Object, containing the created normal vector.
+     */
+    GEOM_Object GetNormal (in GEOM_Object theFace,
+                          in GEOM_Object theOptionalPoint);
+
     /*!
      *  Get inertia matrix and moments of inertia of theShape.
      *  \param theShape Shape to calculate inertia of.
@@ -2021,6 +2817,15 @@ module GEOM
     boolean CheckShape (in GEOM_Object theShape,
                        out string     theDescription);
 
+    /*!
+     *  Check a topology and a geometry of the given shape.
+     *  \param theShape Shape to check validity of.
+     *  \param theDescription Output. Description of problems in the shape, if they are.
+     *  \return TRUE, if the shape "seems to be valid".
+     */
+    boolean CheckShapeWithGeometry (in GEOM_Object theShape,
+                                   out string     theDescription);
+
     /*!
      *  Obtain description of the given shape
      *  \param theShape Shape to be described.
@@ -2039,11 +2844,70 @@ module GEOM
                           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.
+     *  \param theShape1,theShape2 Shapes to find angle between. Lines or linear edges.
+     *  \return Value of the angle between the given shapes.
+     */
+    double GetAngle (in GEOM_Object theShape1, in GEOM_Object theShape2);
 
     /*!
      *  Get point coordinates
      */
     void PointCoordinates (in GEOM_Object theShape, out double X, out double Y, out double Z);
+
+    /*!
+     *  Get radius of curvature of curve in the point determinated by param
+     *  \param theShape - curve.
+     *  \param theParam - parameter on curve
+     *  \return Value of curvature.
+     */
+    double CurveCurvatureByParam (in GEOM_Object theShape, in double theParam);
+
+    /*!
+     *  Get radius of curvature of curve in the given point
+     *  \param theShape - curve.
+     *  \param thePoint - point
+     *  \return Value of curvature.
+     */
+    double CurveCurvatureByPoint (in GEOM_Object theShape, in GEOM_Object thePoint);
+
+    /*!
+     *  Get max radius of curvature of surface in the point determinated by params
+     *  \param theShape - surface.
+     *  \param theUParam - U-parameter on surface
+     *  \param theVParam - V-parameter on surface
+     *  \return Value of curvature.
+     */
+    double MaxSurfaceCurvatureByParam (in GEOM_Object theShape, in double theUParam,
+                                      in double theVParam);
+
+    /*!
+     *  Get max radius of curvature of surface in the given point
+     *  \param theShape - surface.
+     *  \param thePoint - point
+     *  \return Value of curvature.
+     */
+    double MaxSurfaceCurvatureByPoint (in GEOM_Object theShape, in GEOM_Object thePoint);
+
+    /*!
+     *  Get min radius of curvature of surface in the point determinated by params
+     *  \param theShape - surface.
+     *  \param theUParam - U-parameter on surface
+     *  \param theVParam - V-parameter on surface
+     *  \return Value of curvature.
+     */
+    double MinSurfaceCurvatureByParam (in GEOM_Object theShape, in double theUParam,
+                                      in double theVParam);
+
+    /*!
+     *  Get min radius of curvature of surface in the given point
+     *  \param theShape - surface.
+     *  \param thePoint - point
+     *  \return Value of curvature.
+     */
+    double MinSurfaceCurvatureByPoint (in GEOM_Object theShape, in GEOM_Object thePoint);
+
   };
 
 
@@ -2140,7 +3004,7 @@ module GEOM
     void Redo (in long theStudyID);
 
     /*!
-     * Publishing manangement
+     * Publishing management
      * Adds in theStudy a object theObject under with a name theName,
      * if theFather is not NULL the object is placed under thFather's SObject.
      * Returns a SObject where theObject is placed
@@ -2150,6 +3014,45 @@ module GEOM
                                  in string theName,
                                  in GEOM_Object theFather);
 
+    /*!
+     *  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.
+     *  \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);
+
+    /*!
+     *  Publish sub-shapes, standing for arguments and sub-shapes of arguments
+     *  To be used from GUI and from geompy.addToStudy.
+     *  Work like the above method, but accepts study object theSObject instead of GEOM_Object.
+     *  \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);
+
     /*!
      *  Methods to access interfaces for objects creation and transformation
      */
@@ -2220,6 +3123,15 @@ module GEOM
      *  into python script to avoid the same names in SMESH script
      */
     string_array GetAllDumpNames();
+
+    /*!
+     *  Publishes the named subshapes of given object in the study.
+     *  \param theStudy    The study in which the object is published
+     *  \param theObject   The object which named subshapes are published
+     */
+    ListOfGO PublishNamedShapesInStudy(in SALOMEDS::Study theStudy,
+                                            //in SObject theSObject,
+                                            in Object theObject);
   };
 };