Salome HOME
22755: [EDF] Improvement of Projection operation
[modules/geom.git] / idl / GEOM_Gen.idl
index f3a41ad16011e42f7dd4069fd7b07be6e0a65f88..83faa46bb4cdf7783fe6d5a471be272331de08c6 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2014  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
@@ -6,7 +6,7 @@
 // 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.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -39,7 +39,7 @@ module GEOM
    */
   enum shape_type 
   { 
-    /*!  */
+    /*! A collection of arbitrary shapes */
     COMPOUND,
     /*! A collection of solids */ 
     COMPSOLID, 
@@ -47,22 +47,25 @@ module GEOM
     SOLID, 
     /*! A collection of faces connected by some edges of their wire boundaries */
     SHELL,
-    /*! Part of a plane (in 2D geometry) or a surface (in 3D geometry) bounded by a close wire */
+    /*! Part of a plane (in 2D geometry) or a surface (in 3D geometry) bounded by a closed wire */
     FACE, 
-    /*!  A sequence of edges connected by their vertices */
+    /*! A sequence of edges connected by their vertices */
     WIRE, 
     /*! Edge, a shape corresponding to a curve, and bound by a vertex at each extremity */
     EDGE, 
     /*! A zero-dimensional shape corresponding to a point in geometry */
     VERTEX,
-    /*!  */ 
-    SHAPE };
+    /*! Arbitrary shape in a Compound (used for processing of Compounds in some operations) */ 
+    SHAPE,
+    /*! Flat (top-level) contents of a Compound (used for processing of Compounds in some operations) */
+    FLAT
+    };
 
   /*!
    * \brief 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 };
+  enum marker_type { MT_NONE, MT_POINT, MT_PLUS, MT_STAR, MT_X, MT_O, MT_O_POINT, MT_O_PLUS,
+                     MT_O_STAR, MT_O_X, MT_RING1, MT_RING2, MT_RING3, MT_BALL, MT_USER };
 
   /*!
    * /brief Marker size
@@ -164,7 +167,8 @@ module GEOM
   /*!
    * \brief Kind of the curves.
    *
-   * Used in the functions GEOM_ICurvesOperations.MakeCurveParametric(), GEOM_ICurvesOperations.MakeCurveParametricNew()
+   * Used in the functions GEOM_ICurvesOperations.MakeCurveParametric(), GEOM_ICurvesOperations.MakeCurveParametricNew(),
+   * GEOM_ICurvesOperations.MakePolyline2D, GEOM_ICurvesOperations.MakePolyline2DOnPlane.
    */
   enum curve_type {
     /*! Polyline curve */
@@ -178,38 +182,90 @@ module GEOM
   };
 
  /*!
-   * \brief Pattern for block division of the disk
+   * \brief Type of field data
+   */
+  enum field_data_type {
+    FDT_Bool,
+    FDT_Int,
+    FDT_Double,
+    FDT_String
+  };
+
+  /**
+   * This enumeration represents the level of checking shape on
+   * self-interference. It defines which interferferences will be checked.
+   */
+  enum si_check_level
+  {
+    SI_V_V,     // only V/V interferences
+    SI_V_E,     // V/V and V/E interferences
+    SI_E_E,     // V/V, V/E and E/E interferences
+    SI_V_F,     // V/V, V/E, E/E and V/F interferences
+    SI_E_F,     // V/V, V/E, E/E, V/F and E/F interferences
+    SI_ALL      // all interferences
+  };
+
+
+ /*!
+   * \brief Object creation parameters
    *
-   * Used in the functions GEOM_IAdvancedOperations.MakeDividedDisk(), GEOM_ICurvesOperations.MakeDividedDiskPntVecR()
+   * Is returned by GEOM_Object::GetCreationInformation()
    */
-  enum pattern {
-    /*! Square */
-    SQUARE,
-    
-    /*! Hexagon */
-    HEXAGON
+  struct Parameter
+  {
+    string name;
+    //any value;
+    string value;
+  };
+  typedef sequence<Parameter> Parameters;
+
+  struct CreationInformation
+  {
+    string     operationName;
+    Parameters params;
   };
 
 
-  typedef sequence<string>      string_array;
-  typedef sequence<short>       short_array;
-  typedef sequence<boolean>     ListOfBool;
-  typedef sequence<long>        ListOfLong;
-  typedef sequence<double>      ListOfDouble;
+  typedef sequence<string>       string_array;
+  typedef sequence<short>        short_array;
+  typedef sequence<boolean>      ListOfBool;
+  typedef sequence<long>         ListOfLong;
+  typedef sequence<double>       ListOfDouble;
+  typedef sequence<ListOfDouble> ListOfListOfDouble;
 
   interface GEOM_Object;
+  interface GEOM_BaseObject;
+  interface GEOM_Field;
+  interface GEOM_FieldStep;
 
-  typedef sequence<GEOM_Object> ListOfGO;
+  typedef sequence<GEOM_Object>       ListOfGO;
+  typedef sequence<GEOM_BaseObject>   ListOfGBO;
+  typedef sequence<GEOM_Field>        ListOfFields;
+  typedef sequence<SALOMEDS::SObject> object_list;
 
-  //# GEOM_Object
+  //# GEOM_BaseObject
   /*!
-   *  \brief Interface of geometric object
+   *  \brief A common root of objects in GEOM module
    */
-  interface GEOM_Object : SALOME::GenericObj
+  interface GEOM_BaseObject : SALOME::GenericObj
   {
+    /*!
+     *  \brief Set name of the object.
+     *
+     *  \param theName is a name which will be associated with this object.
+     */
+    void SetName (in string theName);
 
     /*!
-     *  \brief Get an entry of the object in GEOM component.
+    *  \brief Get name of the object associated with this object.
+     */
+    string GetName();
+
+    /*!
+     *  \brief Get internal (unique) entry of the object in the GEOM component's data tree.
+     *  \note This is not an entry of the data object in SALOME study. 
+     *  This is internal function of GEOM component, though it can be used outside it for 
+        appropriate reason (e.g. for unique identification of geometry object).
      */
     string GetEntry();
 
@@ -223,6 +279,72 @@ module GEOM
      */
     long GetType();
 
+    /*!
+     *  \brief Get value of a modification counter of the object
+     */
+    long GetTick();
+
+    /*!
+     *  \brief Set a Study entry where this object was published.
+     */
+    void SetStudyEntry (in string theEntry);
+
+    /*!
+     *  \brief Get a Study entry where this object was published.
+     */
+    string GetStudyEntry();
+
+    /*!
+     *  \brief Get a list of all GEOM_Object on which were the arguments
+     *  when this object was constructed and modified.
+     *  \note This method is supposed to be used by GUI only.
+     */
+    ListOfGBO GetDependency();
+
+    /*!
+     *  \brief Get a list of GEOM_Object on which the last function that created or modified the object depends.
+     *  \note This method is supposed to be used by GUI only.
+     */
+    ListOfGBO GetLastDependency();
+
+    /*
+     *  \brief Return true if geom object representes a shape.
+     *
+     *  For example, method return false for GEOM_MARKER
+     */
+     boolean IsShape();
+
+    /*
+     *  \brief Return true if passed object is identical to this object
+     *
+     *  \param other object being compared with this one
+     */
+    boolean IsSame(in GEOM_BaseObject other);
+
+     /*!
+     *  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);
+
+    /*!
+     *  \brief Return list of notebook variables used for object creation separated by ":" symbol
+     */
+    string GetParameters();
+
+    /*!
+     * \brief Return name of operation and values of parameters used for object creation
+     */
+    CreationInformation GetCreationInformation();
+  };
+
+  //# GEOM_Object
+  /*!
+   *  \brief Interface of geometric object
+   */
+  interface GEOM_Object : GEOM_BaseObject
+  {
     /*!
      *  \brief Get a <VAR>shape_type</VAR> of the object value.
      */
@@ -260,18 +382,6 @@ module GEOM
      */
     shape_type GetMaxShapeType();
 
-    /*!
-     *  \brief Set name of the object.
-     *
-     *  \param theName is a name which will be associated with this object.
-     */
-    void SetName (in string theName);
-
-    /*!
-     *  \brief Get name of the object associated with this object.
-     */
-    string GetName();
-
     /*!
      *  \brief Set color of the object.
      *
@@ -328,29 +438,6 @@ module GEOM
      */
     long GetMarkerTexture();
 
-    /*!
-     *  \brief Set a Study entry where this object was published.
-     */
-    void SetStudyEntry (in string theEntry);
-
-    /*!
-     *  \brief Get a Study entry where this object was published.
-     */
-    string GetStudyEntry();
-
-    /*!
-     *  \brief Get a list of all GEOM_Object on which were the arguments
-     *  when this object was constructed and modified.
-     *  \note This method is supposed to be used by GUI only.
-     */
-    ListOfGO GetDependency();
-
-    /*!
-     *  \brief Get a list of GEOM_Object on which the last function that created or modified the object depends.
-     *  \note This method is supposed to be used by GUI only.
-     */
-    ListOfGO GetLastDependency();
-
     /*!
      *  \brief Get the TopoDS_Shape, for colocated case only.
      */
@@ -360,7 +447,8 @@ module GEOM
  //   # Internal methods (For sub-shape identification)
  //   ######################################################################
     /*!
-     *  \brief Get geometric shape of the object as a byte stream
+     *  \brief Get geometric shape of the object as a byte stream in BRep format
+     *  \note GEOM_IInsertOperations::RestoreShape() method can be used to restore shape from a BRep stream.
      */
     SALOMEDS::TMPFile GetShapeStream();
 
@@ -381,34 +469,169 @@ module GEOM
      */
     GEOM_Object GetMainShape();
 
-    /*
-     *  \brief Return true if geom object representes a shape.
-     *
-     *  For example, method return false for GEOM_MARKER
+  };
+
+  //# GEOM_Field
+  /*!
+   *  \brief Interface of the field
+   */
+  interface GEOM_Field : GEOM_BaseObject
+  {
+    /*!
+     *  \brief Returns the shape the field lies on
      */
-     boolean IsShape();
+    GEOM_Object GetShape();
 
-    /*
-     *  \brief Return true if passed object is identical to this object
-     *
-     *  \param other object being compared with this one
+    /*!
+     *  \brief Returns type of field data
      */
-    boolean IsSame(in GEOM_Object other);
+    field_data_type GetDataType();
 
-     /*!
-     *  Set list of parameters
-     *  \param theParameters is a string containing the notebook variables separated by ":" symbol,
-     *         used for object creation
+    /*!
+     *  \brief Returns dimension of the shape the field lies on
+     *  0 - VERTEX, 1 - EDGE, 2 - FACE, 3 - SOLID, -1 - whole shape
      */
-    void SetParameters (in string theParameters);
+    short GetDimension();
 
     /*!
-     *  \brief Return list of notebook variables used for object creation separated by ":" symbol
+     *  \brief Returns names of components
      */
-    string GetParameters();
+    string_array GetComponents();
+
+    /*!
+     *  \brief Removes a component. Component number counts from one.
+     */
+    //void RemoveComponent(in long number);
+
+    /*!
+     *  \brief Adds a time step to the field
+     */
+    GEOM_FieldStep AddStep(in long stepID, in long stamp);
+
+    /*!
+     *  \brief Remove a time step from the field
+     */
+    void RemoveStep(in long stepID);
+
+    /*!
+     *  \brief Returns number of time steps in the field
+     */
+    long CountSteps();
+
+    /*!
+     *  \brief Returns a list of time step IDs in the field
+     */
+    ListOfLong GetSteps();
+
+    /*!
+     *  \brief Returns a time step by its ID
+     */
+    GEOM_FieldStep GetStep(in long stepID);
+
+    /*!
+     *  \brief Returns a size of data array that is to be passed to
+     *         GEOM_FieldStep.SetValues( dataArray ). This size depends on the
+     *         number of sub-shapes of field dimension and the number of components
+     */
+    long GetArraySize();
+  };
+
+  // # GEOM_FieldStep:
+  /*!
+   *  \brief Interface of the field time step
+   */
+  interface GEOM_FieldStep : GEOM_BaseObject
+  {
+    /*!
+     *  \brief Changes the time of the field step
+     */
+    void SetStamp(in long stamp);
+
+    /*!
+     *  \brief Returns the time of the field step
+     */
+    long GetStamp();
+
+    /*!
+     *  \brief Returns the number of the field step
+     */
+    long GetID();
+
+    /*!
+     *  \brief Returns the field the step belongs to
+     */
+    GEOM_Field GetField();
   };
 
- // # GEOM_IOperations:
+  // # GEOM_BoolFieldStep:
+  /*!
+   *  \brief Interface of the boolean field time step
+   */
+  interface GEOM_BoolFieldStep : GEOM_FieldStep
+  {
+    /*!
+     *  \brief Changes values of the field step. Returns false if number of values is wrong
+     */
+    boolean SetValues(in short_array boolValues);
+
+    /*!
+     *  \brief Returns values of the field step
+     */
+    short_array GetValues();
+  };
+
+  // # GEOM_IntFieldStep:
+  /*!
+   *  \brief Interface of the integer field time step
+   */
+  interface GEOM_IntFieldStep : GEOM_FieldStep
+  {
+    /*!
+     *  \brief Changes values of the field step. Returns false if number of values is wrong
+     */
+    boolean SetValues(in ListOfLong intValues);
+
+    /*!
+     *  \brief Returns values of the field step
+     */
+    ListOfLong GetValues();
+  };
+
+  // # GEOM_DoubleFieldStep:
+  /*!
+   *  \brief Interface of the double field time step
+   */
+  interface GEOM_DoubleFieldStep : GEOM_FieldStep
+  {
+    /*!
+     *  \brief Changes values of the field step. Returns false if number of values is wrong
+     */
+    boolean SetValues(in ListOfDouble doubleValues);
+
+    /*!
+     *  \brief Returns values of the field step
+     */
+    ListOfDouble GetValues();
+  };
+
+  // # GEOM_StringFieldStep:
+  /*!
+   *  \brief Interface of the string field time step
+   */
+  interface GEOM_StringFieldStep : GEOM_FieldStep
+  {
+    /*!
+     *  \brief Changes values of the field step. Returns false if number of values is wrong
+     */
+    boolean SetValues(in string_array strValues);
+
+    /*!
+     *  \brief Returns values of the field step
+     */
+    string_array GetValues();
+  };
+
+  // # GEOM_IOperations:
   /*!
    *  \brief Basic methods of all geometric operations
    */
@@ -540,6 +763,16 @@ module GEOM
                                            in double theYParameter,
                                            in double theZParameter);
 
+    /*!
+     *  \brief Create a point, which lays on the given face.
+     *         The point will lay in arbitrary place of the face.
+     *         The only condition on it is a non-zero distance to the face boundary.
+     *         Such point can be used to uniquely identify the face inside any
+     *         shape in case, when the shape does not contain overlapped faces.
+     *  \param theFace The referenced face.
+     *  \return New GEOM_Object, containing the created point.
+     */
+    GEOM_Object MakePointOnFace (in GEOM_Object theFace);
 
     /*!
      *  \brief Create a point, on two lines intersection.
@@ -704,6 +937,11 @@ module GEOM
                                        in double theTrimSize);
   };
 
+  /*!
+   *  \brief Interface for shapes transforming.
+   *
+   *  Translation, rotation, scaling, mirroring, offset, projection, recomputing.
+   */
   interface GEOM_ITransformOperations : GEOM_IOperations
   {
     /*!
@@ -785,7 +1023,7 @@ module GEOM
     /*!
      *  \brief Translate the given object along the given vector a given number times
      *  \param theObject The object to be translated.
-     *  \param theVector Direction of the translation.
+     *  \param theVector Direction of the translation. DX if None.
      *  \param theStep Distance to translate on.
      *  \param theNbTimes Quantity of translations to be done.
      *  \return New GEOM_Object, containing compound of all
@@ -799,10 +1037,10 @@ module GEOM
     /*!
      *  \brief Conseqently apply two specified translations to theObject specified number of times.
      *  \param theObject The object to be translated.
-     *  \param theVector1 Direction of the first translation.
+     *  \param theVector1 Direction of the first translation. DX if None.
      *  \param theStep1 Step of the first translation.
      *  \param theNbTimes1 Quantity of translations to be done along theVector1.
-     *  \param theVector2 Direction of the second translation.
+     *  \param theVector2 Direction of the second translation. DY if None.
      *  \param theStep2 Step of the second translation.
      *  \param theNbTimes2 Quantity of translations to be done along theVector2.
      *  \return New GEOM_Object, containing compound of all
@@ -869,20 +1107,56 @@ module GEOM
                             in GEOM_Object theAxis,
                             in double theAngle);
 
-
     /*!
      *  \brief Rotate the given object around the given axis a given number times.
      *
-     *  Rotation angle will be 2*PI/theNbTimes.
+     *  Rotation angle will be 2*PI/theNbObjects.
      *  \param theObject The object to be rotated.
-     *  \param theAxis The rotation axis.
-     *  \param theNbTimes Quantity of rotations to be done.
+     *  \param theAxis The rotation axis. DZ if None.
+     *  \param theNbObjects Quantity of rotations to be done.
      *  \return New GEOM_Object, containing compound of all the
      *          shapes, obtained after each rotation.
      */
     GEOM_Object MultiRotate1D (in GEOM_Object theObject,
                                in GEOM_Object theAxis,
-                               in long theNbTimes);
+                               in long theNbObjects);
+
+    /*!
+     *  \brief Rotate the given object around the given axis
+     *         a given number times on the given angle.
+     *
+     *  \param theObject The object to be rotated.
+     *  \param theAxis The rotation axis. DZ if None.
+     *  \param theAngleStep Rotation angle in radians.
+     *  \param theNbSteps Quantity of rotations to be done.
+     *  \return New GEOM_Object, containing compound of all the
+     *          shapes, obtained after each rotation.
+     */
+    GEOM_Object MultiRotate1DByStep (in GEOM_Object theObject,
+                                     in GEOM_Object theAxis,
+                                     in double theAngleStep,
+                                     in long theNbSteps);
+
+    /*!
+     *  \brief Rotate the given object around the given axis
+     *  a given number times and multi-translate each rotation result.
+     *
+     *  Rotation angle will be 2*PI/theNbObjects.
+     *  Translation direction passes through center of gravity
+     *  of rotated shape and its projection on the rotation axis.
+     *  \param theObject The object to be rotated.
+     *  \param theAxis Rotation axis. DZ if None.
+     *  \param theNbObjects Quantity of rotations to be done.
+     *  \param theRadialStep Translation distance.
+     *  \param theNbSteps Quantity of translations to be done.
+     *  \return New GEOM_Object, containing compound of all the
+     *          shapes, obtained after each transformation.
+     */
+    GEOM_Object MultiRotate2DNbTimes (in GEOM_Object theObject,
+                                      in GEOM_Object theAxis,
+                                      in long theNbObjects,
+                                      in double theRadialStep,
+                                      in long theNbSteps);
 
     /*!
      *  \brief Rotate the given object around the
@@ -892,20 +1166,43 @@ module GEOM
      *  Translation direction passes through center of gravity
      *  of rotated shape and its projection on the rotation axis.
      *  \param theObject The object to be rotated.
-     *  \param theAxis Rotation axis.
-     *  \param theAngle Rotation angle in graduces.
-     *  \param theNbTimes1 Quantity of rotations to be done.
-     *  \param theStep Translation distance.
-     *  \param theNbTimes2 Quantity of translations to be done.
+     *  \param theAxis Rotation axis. DZ if None.
+     *  \param theAngleStep Rotation angle in radians.
+     *  \param theNbSteps1 Quantity of rotations to be done.
+     *  \param theRadialStep Translation distance.
+     *  \param theNbSteps2 Quantity of translations to be done.
+     *  \return New GEOM_Object, containing compound of all the
+     *          shapes, obtained after each transformation.
+     */
+    GEOM_Object MultiRotate2DByStep (in GEOM_Object theObject,
+                                     in GEOM_Object theAxis,
+                                     in double theAngleStep,
+                                     in long theNbSteps1,
+                                     in double theRadialStep,
+                                     in long theNbSteps2);
+
+    /*!
+     *  \brief Rotate the given object around the
+     *  given axis on the given angle a given number
+     *  times and multi-translate each rotation result.
+     *
+     *  Translation direction passes through center of gravity
+     *  of rotated shape and its projection on the rotation axis.
+     *  \param theObject The object to be rotated.
+     *  \param theAxis Rotation axis. DZ if None.
+     *  \param theAngleStep Rotation angle in degrees.
+     *  \param theNbSteps1 Quantity of rotations to be done.
+     *  \param theRadialStep Translation distance.
+     *  \param theNbSteps2 Quantity of translations to be done.
      *  \return New GEOM_Object, containing compound of all the
      *          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 double theAngleStep,
+                               in long theNbSteps1,
+                               in double theRadialStep,
+                               in long theNbSteps2);
 
     /*!
      *  \brief Replace the given object by an object,
@@ -982,6 +1279,23 @@ module GEOM
      */
     GEOM_Object ProjectShapeCopy (in GEOM_Object theSource, in GEOM_Object theTarget);
 
+    /*!
+     *  \brief Create a projection projection of the given point on a wire or
+     *  an edge.
+     *
+     *  If there are no solutions or there are 2 or more solutions It throws an
+     *  exception.
+     *  \param thePoint the point to be projected.
+     *  \param theWire the wire. The edge is accepted as well.
+     *  \param thePointOnEdge the projection point.
+     *  \param theEdgeInWireIndex the index of an edge in a wire.
+     *  \return the parameter of projection point on edge.
+     */
+    double ProjectPointOnWire (in  GEOM_Object thePoint,
+                               in  GEOM_Object theWire,
+                               out GEOM_Object thePointOnEdge,
+                               out long        theEdgeInWireIndex);
+
     /*!
      *  \brief Scale the given object by the factor.
      *  \param theObject The object to be scaled.
@@ -1066,7 +1380,8 @@ module GEOM
      *  \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  theReverse is a true or false parameter. true is to reverse direction, false is to move normal direction.
+     *  \param  theReverse 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,
@@ -1075,17 +1390,6 @@ module GEOM
                                    in boolean theCopy,
                                    in boolean theReverse);
 
-    /*!
-     *  \brief 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);
-
     /*!
      *  \brief Recompute the shape from its arguments.
      *  \param theObject The object to be recomputed.
@@ -1094,7 +1398,6 @@ module GEOM
     GEOM_Object RecomputeObject (in GEOM_Object theObject);
   };
   
- // # GEOM_I3DPrimOperations:
   /*!
    *  \brief Interface for 3D primitives creation
    *
@@ -1184,6 +1487,18 @@ module GEOM
      */
     GEOM_Object MakeCylinderRH (in double theR, in double theH);
 
+    /*!
+     *  \brief Create a portion of cylinder with given radius, height and angle at
+     *  the origin of coordinate system.
+     *
+     *  Axis of the cylinder will be collinear to the OZ axis of the coordinate system.
+     *  \param theR Cylinder radius.
+     *  \param theH Cylinder height.
+     *  \param theA Cylinder angle.
+     *  \return New GEOM_Object, containing the created cylinder.
+     */
+    GEOM_Object MakeCylinderRHA (in double theR, in double theH, in double theA);
+
     /*!
      *  \brief Create a cylinder with given base point, axis, radius and height.
      *  \param thePnt Central point of cylinder base.
@@ -1196,6 +1511,20 @@ module GEOM
                                       in GEOM_Object theAxis,
                                       in double      theR,
                                       in double      theH);
+    /*!
+     *  \brief Create a portion of cylinder with given base point, axis, radius, height and angle.
+     *  \param thePnt Central point of cylinder base.
+     *  \param theAxis Cylinder axis.
+     *  \param theR Cylinder radius.
+     *  \param theH Cylinder height.
+     *  \param theA Cylinder angle.
+     *  \return New GEOM_Object, containing the created cylinder.
+     */
+    GEOM_Object MakeCylinderPntVecRHA (in GEOM_Object thePnt,
+                                      in GEOM_Object theAxis,
+                                      in double      theR,
+                                      in double      theH,
+                                      in double      theA);
 
     /*!
      *  \brief Create a cone with given height and radiuses at
@@ -1370,18 +1699,18 @@ module GEOM
                                               in double theAngle);
 
     /*!
-     *  \brief Create a filling from the given compound of contours.
-     *  \param theShape Initial shape on which to perform the feature.
-     *  \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
+     *  \brief Create a face from a given set of contours.
+     *  \param theContours either a list or a compound of edges/wires.
+     *  \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.
      *  \param theMethod Kind of method to perform filling operation.
-     *  \param theApprox Boolean indicating if result should be approximated
-     *  \return New GEOM_Object, containing the created filling surface.
+     *  \param theApprox Boolean indicating if result should be approximated.
+     *  \return New GEOM_Object (face), containing the created filling surface.
      */
-    GEOM_Object MakeFilling (in GEOM_Object theShape,
+    GEOM_Object MakeFilling (in ListOfGO theContours,
                              in long theMinDeg, in long theMaxDeg,
                              in double theTol2D, in double theTol3D,
                              in long theNbIter,
@@ -1474,9 +1803,63 @@ module GEOM
                                              in GEOM_Object thePath,
                                              in GEOM_Object theVec);
 
+
+     /*!
+     *  \brief Make a thick solid from a surface shape (face or shell)
+     *  \param theObject Surface from which the thick solid is made
+     *  \param theThickness Value of the thickness
+     *  \param isCopy To make a copy of \a theObject ot to modify \a theObject.
+     *  \return New GEOM_Object, containing the created pipe if isCopy = true
+     *          or the modified object if isCopy = false
+     */
+    GEOM_Object MakeThickening (in GEOM_Object theObject,
+                                in double theThickness,
+                                in boolean isCopy);
+
+    
+    /*!
+     *  \brief Build a middle path of a pipe-like shape.
+     *
+     *  The path shape can be a wire or an edge.
+     *  \param theShape It can be closed or unclosed pipe-like shell
+     *                  or a pipe-like solid.
+     *  \param theBase1, theBase2 Two bases of the supposed pipe. This
+     *                            should be wires or faces of \a theShape.
+     *  \note It is not assumed that exact or approximate copy of \a theShape
+     *        can be obtained by applying existing Pipe operation on the
+     *        resulting "Path" wire taking \a theBase1 as the base - it is not
+     *        always possible; though in some particular cases it might work
+     *        it is not guaranteed. Thus, RestorePath function should not be
+     *        considered as an exact reverse operation of the Pipe.
+     *  \return New GEOM_Object, containing an edge or wire that represent
+     *                           source pipe's "path".
+     */
+    GEOM_Object RestorePath (in GEOM_Object theShape,
+                             in GEOM_Object theBase1,
+                             in GEOM_Object theBase2);
+
+    /*!
+     *  \brief Build a middle path of a pipe-like shape.
+     *
+     *  The path shape can be a wire or an edge.
+     *  \param theShape It can be closed or unclosed pipe-like shell
+     *                  or a pipe-like solid.
+     *  \param theBase1, theBase2 Two bases of the supposed pipe. This
+     *                            should be lists of edges of \a theShape.
+     *  \note It is not assumed that exact or approximate copy of \a theShape
+     *        can be obtained by applying existing Pipe operation on the
+     *        resulting "Path" wire taking \a theBase1 as the base - it is not
+     *        always possible; though in some particular cases it might work
+     *        it is not guaranteed. Thus, RestorePath function should not be
+     *        considered as an exact reverse operation of the Pipe.
+     *  \return New GEOM_Object, containing an edge or wire that represent
+     *                           source pipe's "path".
+     */
+    GEOM_Object RestorePathEdges (in GEOM_Object theShape,
+                                  in ListOfGO theBase1,
+                                  in ListOfGO theBase2);
   };
 
- // # GEOM_IShapesOperations
   /*!
    *  \brief Interface for Shapes creation:
    *
@@ -1546,6 +1929,15 @@ module GEOM
      */
     GEOM_Object MakeFaceWires (in ListOfGO theWires, in boolean isPlanarWanted);
 
+    /**
+     *  \brief Create a face based on surface of theFace limited by theWire.
+     *  \param theFace the face whose surface is used to create a new face.
+     *  \param theWire closed Wire build the face.
+     *  \return New GEOM_Object, containing the created face.
+     */
+    GEOM_Object MakeFaceFromSurface(in GEOM_Object theFace,
+                                    in GEOM_Object theWire);
+
     /*!
      *  \brief Create a shell from the set of faces and shells.
      *  \param theFacesAndShells List of faces and/or shells.
@@ -1575,64 +1967,73 @@ module GEOM
     GEOM_Object MakeCompound (in ListOfGO theShapes);
 
     /*!
-     *  \brief Replace coincident faces in theShape by one face.
-     *  \param theShape Initial shape.
+     *  \brief Make a solid (or solids) from connected set of faces and/or shells.
+     *  \param theFacesOrShells List of faces and/or shells.
+     *  \param isIntersect If TRUE, forces performing intersections between arguments.
+     *
+     *  \return New GEOM_Object, containing the created solid (or compound of solids).
+     */
+    GEOM_Object MakeSolidFromConnectedFaces (in ListOfGO theFacesOrShells, in boolean isIntersect);
+    
+    /*!
+     *  \brief Replace coincident faces in \a theShapes by one face.
+     *  \param theShapes Initial shapes.
      *  \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.
+     *  \return New GEOM_Object containing copies of theShapes without coincident faces.
      */
-    GEOM_Object MakeGlueFaces (in GEOM_Object theShape, in double theTolerance, in boolean doKeepNonSolids);
+    GEOM_Object MakeGlueFaces (in ListOfGO theShapes, in double theTolerance, in boolean doKeepNonSolids);
 
     /*!
-     *  Find coincident faces in theShape for possible gluing.
-     *  \param theShape Initial shape.
+     *  Find coincident faces in theShapes for possible gluing.
+     *  \param theShapes Initial shapes.
      *  \param theTolerance Maximum distance between faces, which can be considered as coincident.
      *  \return ListOfGO
      */
-    ListOfGO GetGlueFaces (in GEOM_Object theShape, in double theTolerance);
+    ListOfGO GetGlueFaces (in ListOfGO theShapes, in double theTolerance);
 
     /*!
-     *  \brief Replace coincident faces in theShape by one face
-     *  in compliance with given list of faces
-     *  \param theShape Initial shape.
+     *  \brief Replace coincident faces in \a theShapes by one face
+     *         in compliance with given list of faces
+     *  \param theShapes Initial shapes.
      *  \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.
      *  \param doGlueAllEdges If TRUE, all coincident edges of <VAR>theShape</VAR>
      *                        will be glued, otherwise only the edges,
      *                        belonging to <VAR>theFaces</VAR>.
-     *  \return New GEOM_Object, containing a copy of theShape without some faces.
+     *  \return New GEOM_Object containing copies of theShapes without coincident faces.
      */
-    GEOM_Object MakeGlueFacesByList (in GEOM_Object theShape, in double theTolerance,
-                                     in ListOfGO theFaces, in boolean doKeepNonSolids,
+    GEOM_Object MakeGlueFacesByList (in ListOfGO theShapes, in double theTolerance,
+                                     in ListOfGO theFaces,  in boolean doKeepNonSolids,
                                      in boolean doGlueAllEdges);
 
     /*!
-     *  \brief Replace coincident edges in theShape by one edge.
-     *  \param theShape Initial shape.
+     *  \brief Replace coincident edges in \a theShapes by one edge.
+     *  \param theShapes Initial shapes.
      *  \param theTolerance Maximum distance between edges, which can be considered as coincident.
-     *  \return New GEOM_Object, containing a copy of theShape without coincident edges.
+     *  \return New GEOM_Object containing copies of theShapes without coincident edges.
      */
-    GEOM_Object MakeGlueEdges (in GEOM_Object theShape, in double theTolerance);
+    GEOM_Object MakeGlueEdges (in ListOfGO theShapes, in double theTolerance);
 
     /*!
-     *  Find coincident edges in theShape for possible gluing.
-     *  \param theShape Initial shape.
+     *  Find coincident edges in \a theShapes for possible gluing.
+     *  \param theShapes Initial shapes.
      *  \param theTolerance Maximum distance between edges, which can be considered as coincident.
      *  \return ListOfGO
      */
-    ListOfGO GetGlueEdges (in GEOM_Object theShape, in double theTolerance);
+    ListOfGO GetGlueEdges (in ListOfGO theShapes, in double theTolerance);
 
     /*!
-     *  \brief Replace coincident edges in theShape by one edge
-     *  in compliance with given list of edges
-     *  \param theShape Initial shape.
+     *  \brief Replace coincident edges in \a theShapes by one edge
+     *         in compliance with given list of edges
+     *  \param theShapes Initial shapes.
      *  \param theTolerance Maximum distance between edges, which can be considered as coincident.
      *  \param theEdges List of edges for gluing.
-     *  \return New GEOM_Object, containing a copy of theShape without some edges.
+     *  \return New GEOM_Object containing copies of theShapes without some edges.
      */
-    GEOM_Object MakeGlueEdgesByList (in GEOM_Object theShape,
-                                     in double theTolerance,
+    GEOM_Object MakeGlueEdgesByList (in ListOfGO theShape,
+                                     in double   theTolerance,
                                      in ListOfGO theEdges);
 
     /*!
@@ -1734,6 +2135,14 @@ module GEOM
      */
     long GetSubShapeIndex (in GEOM_Object theMainShape, in GEOM_Object theSubShape);
 
+    /*!
+     *  Get global indices of \a theSubShapes in \a theMainShape.
+     *  \param theMainShape Main shape.
+     *  \param theSubShapes List of sub-shapes of the main shape.
+     *  \return list of global indices of \a theSubShapes in \a theMainShape.
+     */
+    ListOfLong GetSubShapesIndices (in GEOM_Object theMainShape, in ListOfGO theSubShapes);
+
     /*!
      *  \brief Get index of \a theSubShape in \a theMainShape, unique among sub-shapes of the same type.
      *
@@ -2130,7 +2539,7 @@ module GEOM
      *  \return found sub-shape.
      */
     GEOM_Object GetSame (in GEOM_Object theShapeWhere,
-                                in GEOM_Object theShapeWhat);
+                         in GEOM_Object theShapeWhat);
 
     /*!
      *  \brief Get sub-shape Ids of theShapeWhere, which are
@@ -2142,6 +2551,53 @@ module GEOM
     ListOfLong GetSameIDs (in GEOM_Object theShapeWhere,
                            in GEOM_Object theShapeWhat);
 
+    /*!
+     *  \brief Resize the input edge with the new Min and Max parameters.
+     *  The input edge parameters range is [0, 1]. If theMin parameter is
+     *  negative, the input edge is extended, otherwise it is shrinked by
+     *  theMin parameter. If theMax is greater than 1, the edge is extended,
+     *  otherwise it is shrinked by theMax parameter.
+     *  \param theEdge the input edge to be resized.
+     *  \param theMin the minimal parameter value.
+     *  \param theMax the maximal parameter value.
+     *  \return a newly created edge.
+     */
+    GEOM_Object ExtendEdge(in GEOM_Object theEdge,
+                           in double      theMin,
+                           in double      theMax);
+
+    /*!
+     *  \brief Resize the input face with the new UMin, UMax, VMin and VMax
+     *  parameters. The input face U and V parameters range is [0, 1]. If
+     *  theUMin parameter is negative, the input face is extended, otherwise
+     *  it is shrinked along U direction by theUMin parameter. If theUMax is
+     *  greater than 1, the face is extended, otherwise it is shrinked along
+     *  U direction by theUMax parameter. So as for theVMin, theVMax and
+     *  V direction of the input face.
+     *  \param theFace the input face to be resized.
+     *  \param theUMin the minimal U parameter value.
+     *  \param theUMax the maximal U parameter value.
+     *  \param theVMin the minimal V parameter value.
+     *  \param theVMax the maximal V parameter value.
+     *  \return a newly created face.
+     */
+    GEOM_Object ExtendFace(in GEOM_Object theFace,
+                           in double      theUMin,
+                           in double      theUMax,
+                           in double      theVMin,
+                           in double      theVMax);
+
+    /*!
+     *  \brief Make a surface from a face. This function takes some face as
+     *  input parameter and creates new GEOM_Object, i.e. topological shape
+     *  by extracting underlying surface of the source face and limiting it
+     *  by the Umin, Umax, Vmin, Vmax parameters of the source face (in the
+     *  parametrical space).
+     *  \param theFace the input face.
+     *  \return a newly created face.
+     */
+    GEOM_Object MakeSurfaceFromFace(in GEOM_Object theFace);
+
   };
 
  // # GEOM_IBlocksOperations: 
@@ -2403,6 +2859,17 @@ module GEOM
     string PrintBCErrors (in GEOM_Object theCompound,
                           in BCErrors    theErrors);
 
+    /*!
+     *  \brief Retrieve all non blocks solids and faces from a shape.
+     *
+     *  \param theShape The shape to explore.
+     *  \param theNonQuads Output parameter. Group of all non quadrangular faces.
+     *
+     *  \return Group of all non block solids (= not 6 faces, or with 6
+     *          faces, but with the presence of non-quadrangular faces).
+     */
+    GEOM_Object GetNonBlocks (in GEOM_Object theShape, out GEOM_Object theNonQuads);
+
     /*!
      *  \brief Remove all seam and degenerated edges from \a theShape.
      *
@@ -2417,6 +2884,15 @@ module GEOM
     GEOM_Object RemoveExtraEdges (in GEOM_Object theShape,
                                   in long        theOptimumNbFaces);
 
+    /*!
+     *  \brief Performs union faces of \a theShape.
+     *
+     *  Unite faces sharing one surface.
+     *  \param theShape The compound or single solid that contains faces to perform union.
+     *  \return Improved shape.
+     */
+    GEOM_Object UnionFaces (in GEOM_Object theShape);
+
     /*!
      *  \brief Check, if the given shape is a blocks compound.
      *
@@ -2530,11 +3006,63 @@ module GEOM
      *  \param theShape2 Second argument for boolean operation.
      *  \param theOperation Indicates the operation to be done:
      *                      1 - Common, 2 - Cut, 3 - Fuse, 4 - Section.
+     *  \param IsCheckSelfInte If TRUE, perform check self intersection
+     *                         of arguments before an operation.
      *  \return New GEOM_Object, containing the result shape.
      */
     GEOM_Object MakeBoolean (in GEOM_Object theShape1,
                              in GEOM_Object theShape2,
-                             in long theOperation);
+                             in long        theOperation,
+                             in boolean     IsCheckSelfInte);
+    /*!
+     *  \brief Perform fusion boolean operation on two given shapes.
+     *  \param theShape1 First argument for fuse operation.
+     *  \param theShape2 Second argument for fuse operation.
+     *  \param IsCheckSelfInte If TRUE, perform check self intersection
+     *                         of arguments before an operation.
+     *  \param IsRmExtraEdges If TRUE, perform removal of extra edges
+     *                        during an operation.
+     *  \return New GEOM_Object, containing the result shape.
+     */
+    GEOM_Object MakeFuse (in GEOM_Object theShape1,
+                          in GEOM_Object theShape2,
+                          in boolean     IsCheckSelfInte,
+                          in boolean     IsRmExtraEdges);
+
+    /*!
+     *  \brief Perform fusion boolean operation on list of objects.
+     *  \param theShapes Shapes to be fused.
+     *  \param IsCheckSelfInte If TRUE, perform check self intersection
+     *                         of arguments before an operation.
+     *  \param IsRmExtraEdges If TRUE, perform removal of extra edges
+     *                        during an operation.
+     *  \return New GEOM_Object, containing the result shape.
+     */
+    GEOM_Object MakeFuseList (in ListOfGO theShapes,
+                              in boolean  IsCheckSelfInte,
+                              in boolean  IsRmExtraEdges);
+
+    /*!
+     *  \brief Perform common boolean operation on list of objects.
+     *  \param theShapes Shapes for common operation.
+     *  \param IsCheckSelfInte If TRUE, perform check self intersection
+     *                         of arguments before an operation.
+     *  \return New GEOM_Object, containing the result shape.
+     */
+    GEOM_Object MakeCommonList (in ListOfGO theShapes,
+                                in boolean  IsCheckSelfInte);
+
+    /*!
+     *  \brief Perform cutting of list of objects from theMainShape.
+     *  \param theMainShape the object for cut operation.
+     *  \param theShapes Shapes to be cut from theMainShape (tools).
+     *  \param IsCheckSelfInte If TRUE, perform check self intersection
+     *                         of arguments before an operation.
+     *  \return New GEOM_Object, containing the result shape.
+     */
+    GEOM_Object MakeCutList (in GEOM_Object theMainShape,
+                             in ListOfGO theShapes,
+                             in boolean  IsCheckSelfInte);
 
     /*!
      *  \brief Perform partition operation.
@@ -2578,7 +3106,10 @@ module GEOM
      *  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()
+     *  Description of all parameters as in previous method MakePartition().
+     *  One additional parameter is provided:
+     *  \param IsCheckSelfInte If TRUE, perform check self intersection
+     *                         of arguments before an operation.
      *
      *  \note Passed compounds (via ListShapes or via ListTools)
      *        have to consist of nonintersecting shapes.
@@ -2592,7 +3123,8 @@ module GEOM
                                                       in short      theLimit,
                                                       in boolean    theRemoveWebs,
                                                       in ListOfLong theMaterials,
-                                                      in short      theKeepNonlimitShapes);
+                                                      in short      theKeepNonlimitShapes,
+                                                      in boolean    IsCheckSelfInte);
 
     /*!
      *  \brief Perform partition of the Shape with the Plane
@@ -2734,6 +3266,17 @@ module GEOM
                                          in boolean  theIsClosed,
                                          in boolean  theDoReordering);
 
+    /*!
+     *  \brief Create B-Spline curve on the set of points.
+     *  \param thePoints Sequence of points for the B-Spline curve.
+     *  \param theFirstVec Vector object, defining the curve direction at its first point.
+     *  \param theLastVec Vector object, defining the curve direction at its last point.
+     *  \return New GEOM_Object, containing the created B-Spline curve.
+     */
+    GEOM_Object MakeSplineInterpolWithTangents (in ListOfGO    thePoints,
+                                                in GEOM_Object theFirstVec,
+                                                in GEOM_Object theLastVec);
+
     /*!
      *  \brief Creates a curve using the parametric definition of the basic points.
      *  \param thexExpr parametric equation of the coordinates X.
@@ -2772,12 +3315,26 @@ module GEOM
                     in long   theParamNbStep,
                     in curve_type theCurveType);
 
+     /*!
+     *  \brief Creates an isoline curve on a face.
+     *  \param theFace the face for which an isoline is created.
+     *  \param IsUIsoline True for U-isoline creation; False for V-isoline
+     *         creation.
+     *  \param theParameter the U parameter for U-isoline or V parameter
+     *         for V-isoline.
+     *  \return New GEOM_Object, containing the created isoline edge or a
+     *          compound of edges.
+     */
+    GEOM_Object MakeIsoline(in GEOM_Object theFace,
+                            in boolean     IsUIsoline,
+                            in double      theParameter);
+
     /*!
      *  \brief Create a sketcher (wire or face), following the textual description,
-     *  passed through \a theCommand argument.
+     *         passed through \a theCommand argument.
      *
      *  Edges of the resulting wire or face will be arcs of circles and/or linear segments. \n
-     *  Format of the description string have to be the following:
+     *  Format of the description string has to be the following:
      *
      *  "Sketcher[:F x1 y1]:CMD[:CMD[:CMD...]]"
      *
@@ -2805,32 +3362,126 @@ module GEOM
      *                    coordinates of the working plane.
      *  \param theWorkingPlane Nine double values, defining origin,
      *                         OZ and OX directions of the working plane.
-     *  \return New GEOM_Object, containing the created wire.
+     *  \return New GEOM_Object, containing the created wire or face.
      */
     GEOM_Object MakeSketcher (in string theCommand, in ListOfDouble theWorkingPlane);
 
     /*!
-     *  \brief Create a 3D sketcher, following the numerical description,
-     *  passed through points created by \a theCoordinates argument. 
+     *  \brief Create a sketcher (wire or face), following the textual description,
+     *         passed through \a theCommand argument. 
      *
-     *  Format of the description string have to be the following:
+     *  For format of the description string see the previous method.\n
      *
-     *  "Make3DSketcher[x1, y1, z1, x2, y2, z2, ..., xN, yN, zN]"
+     *  \param theCommand String, defining the sketcher in local
+     *                    coordinates of the working plane.
+     *  \param theWorkingPlane Planar Face or LCS(Marker) of the working plane.
+     *  \return New GEOM_Object, containing the created wire or face.
      */
+    GEOM_Object MakeSketcherOnPlane (in string theCommand, in GEOM_Object theWorkingPlane);
 
-    GEOM_Object Make3DSketcher (in ListOfDouble theCoordinates);
-
-      /*!
-     *  \brief Create a sketcher (wire or face), following the textual description,
-     *  passed through \a theCommand argument. 
+    /*!
+     *  \brief Create a 3D sketcher, following the textual description,
+     *         passed through \a theCommand argument. 
+     *
+     *  Format of the description string has to be the following:
+     *
+     *  "3DSketcher:CMD[:CMD[:CMD...]]"
+     *
+     *  Where CMD is one of
+     *     - "TT x y z" : Create segment by point at X & Y or set the first point
+     *     - "T dx dy dz" : Create segment by point with DX & DY
+     *     .
+     *       \n
+     *     - "OXY angleX angle2 length" : Create segment by two angles and length
+     *     - "OYZ angleY angle2 length" : Create segment by two angles and length
+     *     - "OXZ angleX angle2 length" : Create segment by two angles and length
+     *     .
+     *       \n
+     *     - "WW" : Close Wire (to finish)
      *
-     *  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 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);
+    GEOM_Object Make3DSketcherCommand (in string theCommand);
+
+    /*!
+     *  \brief Create a 3D sketcher, made of a straight segments, joining points
+     *         with coordinates passed through \a theCoordinates argument. 
+     *
+     *  Order of coordinates has to be the following:
+     *  x1, y1, z1, x2, y2, z2, ..., xN, yN, zN
+     *
+     *  \param theCoordinates List of double values.
+     *  \return New GEOM_Object, containing the created wire.
+     */
+    GEOM_Object Make3DSketcher (in ListOfDouble theCoordinates);
+
+    /*!
+     *  \brief Create a 2D polyline (wire or a compound of wires).
+     *
+     *  The polyline can have several sections. Each section represents a set
+     *  of points in the form of list of coordinates of the following order:
+     *  x1, y1, x2, y2, ..., xN, yN
+     *  Each section has its own name, type of curve (can be either
+     *  GEOM::Polyline or GEOM::Interpolation) and Closed flag.
+     *  For each section a wire is created. It represents either a polyline or
+     *  interpolation BSpline either closed or not depending on the Closed flag.
+     *  The result represents a wire if there is only one section is defined.
+     *  Otherwise a compound of wires is returned.
+     *
+     *  \param theCoordsList the list of coordinates list. theCoordsList[0]
+     *         is the coordinates list of the first section. theCoordsList[1]
+     *         is for the second section etc.
+     *  \param theNamesList the list of names. The order corresponds to
+     *         theCoordsList.
+     *  \param theTypesList the list of curve types. The order corresponds to
+     *         theCoordsList.
+     *  \param theClosedList the list of Closed flags. The order corresponds to
+     *         theCoordsList.
+     *  \param theWorkingPlane 9 double values, defining origin,
+     *         OZ and OX directions of the working plane.
+     *  \return New GEOM_Object, containing the created wire or a compound
+     *          of wires.
+     */
+    GEOM_Object MakePolyline2D (in ListOfListOfDouble theCoordsList,
+                                in string_array       theNamesList,
+                                in short_array        theTypesList,
+                                in ListOfBool         theClosedList,
+                                in ListOfDouble       theWorkingPlane);
+
+    /*!
+     *  \brief Create a 2D polyline (wire or a compound of wires).
+     *
+     *  The polyline can have several sections. Each section represents a set
+     *  of points in the form of list of coordinates of the following order:
+     *  x1, y1, x2, y2, ..., xN, yN
+     *  Each section has its own name, type of curve (can be either
+     *  GEOM::Polyline or GEOM::Interpolation) and Closed flag.
+     *  For each section a wire is created. It represents either a polyline or
+     *  interpolation BSpline either closed or not depending on the Closed flag.
+     *  The result represents a wire if there is only one section is defined.
+     *  Otherwise a compound of wires is returned.
+     *
+     *  \param theCoordsList the list of coordinates list. theCoordsList[0]
+     *         is the coordinates list of the first section. theCoordsList[1]
+     *         is for the second section etc.
+     *  \param theNamesList the list of names. The order corresponds to
+     *         theCoordsList.
+     *  \param theTypesList the list of curve types. The order corresponds to
+     *         theCoordsList.
+     *  \param theClosedList the list of Closed flags. The order corresponds to
+     *         theCoordsList.
+     *  \param theWorkingPlane planar Face or LCS(Marker) of the working plane.
+     *  \return New GEOM_Object, containing the created wire or a compound
+     *          of wires.
+     */
+    GEOM_Object MakePolyline2DOnPlane (in ListOfListOfDouble theCoordsList,
+                                       in string_array       theNamesList,
+                                       in short_array        theTypesList,
+                                       in ListOfBool         theClosedList,
+                                       in GEOM_Object        theWorkingPlane);
+
   };
 
  // # GEOM_ILocalOperations:
@@ -3111,10 +3762,26 @@ module GEOM
      *  \param theTolerance Required tolerance value.
      *  \return New GEOM_Object, containing processed shape.
      */
-    GEOM_Object Sew (in GEOM_Object theObject, in double theTolerance);
+    GEOM_Object Sew (in ListOfGO theObjects, in double theTolerance);
 
     /*!
-     *  \brief Addition of a point to a given edge object.
+     *  Sewing of the given object. Allows non-manifold sewing.
+     *  \param theObject Shape to be processed.
+     *  \param theTolerance Required tolerance value.
+     *  \return New GEOM_Object, containing processed shape.
+     */
+    GEOM_Object SewAllowNonManifold(in ListOfGO theObjects, in double theTolerance);
+
+    /*!
+     *  Rebuild the topology of theSolids by removing
+     *  the faces that are shared by several solids.
+     *  \param theSolids A list of shapes containing solids to be processed.
+     *  \return New GEOM_Object, containing processed shape.
+     */
+    GEOM_Object RemoveInternalFaces (in ListOfGO theSolids);
+
+    /*!
+     *  \brief Addition of a point to a given edge of \a theObject.
      *  \param theObject Shape to be processed.
      *  \param theEdgeIndex Index of edge to be divided within theObject's shape,
      *                      if -1, then theObject itself is the edge.
@@ -3122,11 +3789,24 @@ module GEOM
      *                  depending on \a isByParameter.
      *  \param isByParameter If TRUE : \a theValue is treated as a curve parameter [0..1],
      *                       if FALSE : \a theValue is treated as a length parameter [0..1]
-     *  \return New GEOM_Object, containing processed shape.
+     *  \return New GEOM_Object, containing the processed shape.
      */
     GEOM_Object DivideEdge (in GEOM_Object theObject, in short theEdgeIndex,
                             in double theValue, in boolean isByParameter);
 
+    /*!
+     *  \brief Addition of a point to a given edge of \a theObject by projecting
+     *         another point to the given edge.
+     *  \param theObject Shape to be processed.
+     *  \param theEdgeIndex Index of edge to be divided within theObject's shape,
+     *                      if -1, then theObject itself is the edge.
+     *  \param thePoint Point to project to theEdgeIndex-th edge.
+     *  \return New GEOM_Object, containing the processed shape.
+     */
+    GEOM_Object DivideEdgeByPoint (in GEOM_Object theObject,
+                                   in short       theEdgeIndex,
+                                   in GEOM_Object thePoint);
+
     /*!
      *  \brief Suppress the vertices in the wire in case if adjacent edges are C1 continuous.
      *  \param theWire Wire to minimize the number of C1 continuous edges in.
@@ -3140,12 +3820,12 @@ module GEOM
     /*!
      *  \brief Get a list of wires (wrapped in GEOM_Object-s),
      *  that constitute a free boundary of the given shape.
-     *  \param theObject Shape to get free boundary of.
+     *  \param theObject Shapes to get free boundary of.
      *  \param theClosedWires Output. Closed wires on the free boundary of the given shape.
      *  \param theOpenWires Output. Open wires on the free boundary of the given shape.
      *  \return FALSE, if an error(s) occured during the method execution.
      */
-    boolean GetFreeBoundary (in GEOM_Object theObject,
+    boolean GetFreeBoundary (in ListOfGO theObjects,
                              out ListOfGO theClosedWires,
                              out ListOfGO theOpenWires);
 
@@ -3180,43 +3860,50 @@ module GEOM
     GEOM_Object MakeCopy (in GEOM_Object theOriginal);
 
     /*!
+     *  \brief Deprecated method. Use Export\<FormatName\> (from the
+     *  corresponding plugin) instead; here \<FormatName\> is a name of format.
+     *
      *  \brief Export the given shape into a file with given name.
      *  \param theObject Shape to be stored in the file.
      *  \param theFileName Name of the file to store the given shape in.
      *  \param theFormatName Specify format for the shape storage.
-     *         Available formats can be obtained with <VAR>ImportTranslators()</VAR> method.
      */
     void Export (in GEOM_Object theObject, in string theFileName, in string theFormatName);
 
     /*!
-     *  \brief Import a shape from the BRep or IGES or STEP file
+     *  \brief Deprecated method. Use Import\<FormatName\> (from the
+     *  corresponding plugin) instead; here \<FormatName\> is a name of format.
+     *
+     *  \brief Import a shape from the STL, BREP, IGES or STEP file
      *  (depends on given format) with given name.
      *  \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.
+     *         If format 'IGES_SCALE' is used instead of 'IGES' or
+     *            format 'STEP_SCALE' is used instead of 'STEP',
+     *            file length unit will be ignored (set to 'meter') and result model will be scaled.
+     *  \return List of GEOM_Object, containing the created shape and groups of materials.
      */
-    GEOM_Object ImportFile (in string theFileName, in string theFormatName);
+    ListOfGBO ImportFile (in string theFileName, in string theFormatName);
 
     /*!
-     *  \brief Get the supported import formats and corresponding patterns for File dialog.
-     *  \param theFormats Output. List of formats, available for import.
-     *  \param thePatterns Output. List of file patterns, corresponding to available formats.
-     *  \return Returns available formats and patterns through the arguments.
+     *  \brief Deprecated method. Use ReadValue (from the corresponding plugin) instead.
+     *
+     *  \brief Read a value of parameter from a file, containing a shape.
+     *  \param theFileName The file, containing the shape.
+     *  \param theFormatName Specify format for the file reading.
+     *  \param theParameterName Specify the parameter. For example, pass "LEN_UNITS"
+     *                          to obtain length units, in which the file is written.
+     *  \return Value of requested parameter in form of text string.
      */
-    void ImportTranslators (out string_array theFormats,
-                            out string_array thePatterns);
+    string ReadValue (in string theFileName, in string theFormatName, in string theParameterName);
 
     /*!
-     *  \brief Get the supported export formats and corresponding patterns for File dialog.
-     *  \param theFormats Output. List of formats, available for export.
-     *  \param thePatterns Output. List of file patterns, corresponding to available formats.
-     *  \return Returns available formats and patterns through the arguments.
+     *  \brief Read a shape from the binary stream, containing its bounding representation (BRep).
+     *  \note GEOM_Object::GetShapeStream() method can be used to obtain the shape's BRep stream.
+     *  \param theStream The BRep binary stream.
+     *  \return New GEOM_Object, containing the shape, read from theStream.
      */
-    void ExportTranslators (out string_array theFormats,
-                            out string_array thePatterns);
+    GEOM_Object RestoreShape (in SALOMEDS::TMPFile theStream);
 
     /*!
      * \brief Load texture from file
@@ -3248,6 +3935,7 @@ module GEOM
      * \return list of all texture IDs avaiable for the current study
      */
     ListOfLong GetAllTextures();
+    
   };
 
  // # GEOM_IKindOfShape:
@@ -3419,16 +4107,27 @@ module GEOM
     /*!
      *  \brief Get parameters of bounding box of the given shape
      *  \param theShape Shape to obtain bounding box of.
+     *  \param precise TRUE for precise computation; FALSE for fast one.
      *  \param Xmin,Xmax Output. Limits of shape along OX axis.
      *  \param Ymin,Ymax Output. Limits of shape along OY axis.
      *  \param Zmin,Zmax Output. Limits of shape along OZ axis.
      *  \return Returns parameters of bounding box through the last six arguments.
      */
     void GetBoundingBox (in GEOM_Object theShape,
+                         in boolean precise,
                          out double Xmin, out double Xmax,
                          out double Ymin, out double Ymax,
                          out double Zmin, out double Zmax);
 
+    /*!
+     *  \brief Get bounding box of the given shape
+     *  \param theShape Shape to obtain bounding box of.
+     *  \param precise TRUE for precise computation; FALSE for fast one.
+     *  \return New GEOM_Object, containing the created bounding box.
+     */
+    GEOM_Object MakeBoundingBox (in GEOM_Object theShape,
+                                 in boolean precise);
+
     /*!
      *  \brief Get min and max tolerances of sub-shapes of theShape
      *  \param theShape Shape, to get tolerances of.
@@ -3442,31 +4141,114 @@ module GEOM
                        out double EdgeMin, out double EdgeMax,
                        out double VertMin, out double VertMax);
 
+    /*!
+     *  \brief Enumeration of Shape defects coming from CheckShape algorithms.
+     */
+    enum ShapeErrorType
+    {
+      /* for vertices */
+      InvalidPointOnCurve,
+      InvalidPointOnCurveOnSurface,
+      InvalidPointOnSurface,
+
+      /* for edges */
+      No3DCurve,
+      Multiple3DCurve,
+      Invalid3DCurve,
+      NoCurveOnSurface,
+      InvalidCurveOnSurface,
+      InvalidCurveOnClosedSurface,
+      InvalidSameRangeFlag,
+      InvalidSameParameterFlag,
+      InvalidDegeneratedFlag,
+
+      FreeEdge,
+      InvalidMultiConnexity,
+      InvalidRange,
+
+      /* for wires */
+      EmptyWire,
+      RedundantEdge,
+      SelfIntersectingWire, /* on a face */
+
+      /* for faces */
+      NoSurface,
+      InvalidWire,
+      RedundantWire,
+      IntersectingWires,
+      InvalidImbricationOfWires,
+
+      /* for shells */
+      EmptyShell,
+      RedundantFace,
+
+      /* for shapes */
+      UnorientableShape,
+      NotClosed,
+      NotConnected,
+
+      SubshapeNotInShape,
+
+      BadOrientation,
+      BadOrientationOfSubshape,
+
+      InvalidToleranceValue,
+
+      /* for exception */
+      CheckFail
+    };
+
+    /*!
+     *  \brief Description of a shape defect: type and incriminated sub-shapes.
+     */
+    struct ShapeError
+    {
+      ShapeErrorType error;
+      ListOfLong     incriminated;
+    };
+
+    /*!
+     *  \brief Sequence of all shape defects.
+     */
+    typedef sequence<ShapeError> ShapeErrors;
+
     /*!
      *  \brief Check a topology of the given shape.
      *  \param theShape Shape to check validity of.
-     *  \param theDescription Output. Description of problems in the shape, if they are.
+     *  \param theErrors Structure, containing discovered errors and incriminated sub-shapes.
      *  \return TRUE, if the shape "seems to be valid" from the topological point of view.
      */
-    boolean CheckShape (in GEOM_Object theShape,
-                        out string     theDescription);
+    boolean CheckShape (in GEOM_Object  theShape,
+                        out ShapeErrors theErrors);
 
     /*!
      *  \brief 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.
+     *  \param theErrors Structure, containing discovered errors and incriminated sub-shapes.
      *  \return TRUE, if the shape "seems to be valid".
      */
-    boolean CheckShapeWithGeometry (in GEOM_Object theShape,
-                                    out string     theDescription);
+    boolean CheckShapeWithGeometry (in GEOM_Object  theShape,
+                                    out ShapeErrors theErrors);
+
+    /*!
+     *  \brief Convert sequence of shape errors, returned by
+     *  <VAR>CheckShape()</VAR> or <VAR>CheckShapeWithGeometry()</VAR>, into string.
+     *  \param theShape the invalid shape.
+     *  \param theErrors The sequence of \a theShape errors.
+     *  \return String, describing all the errors in form, suitable for printing.
+     */
+    string PrintShapeErrors (in GEOM_Object theShape,
+                             in ShapeErrors theErrors);
 
     /*!
      *  \brief Check a topology of the given shape on self-intersections presence.
      *  \param theShape Shape to check validity of.
+     *  \param theCheckLevel the level of self-interference check.
      *  \param theIntersections Output. List of intersected sub-shapes IDs, it contains pairs of IDs.
      *  \return TRUE, if the shape does not have any self-intersections.
      */
     boolean CheckSelfIntersections (in GEOM_Object theShape,
+                                    in long        theCheckLevel,
                                     out ListOfLong theIntersections);
 
     /*!
@@ -3504,6 +4286,16 @@ module GEOM
                            out double X1, out double Y1, out double Z1,
                            out double X2, out double Y2, out double Z2);
 
+    /*!
+     *  \brief Get closest points of the given shapes.
+     *  \param theShape1,theShape2 Shapes to find closest points of.
+     *  \param theCoords Output. List of (X, Y, Z) coordinates for all couples of points.
+     *  \return The number of found solutions (-1 in case of infinite number of solutions).
+     */
+    long ClosestPoints (in GEOM_Object theShape1,
+                        in GEOM_Object theShape2,
+                        out ListOfDouble theCoords);
+
     /*!
      *  \brief Get angle between the given lines or linear edges.
      *  \param theShape1,theShape2 Shapes to find angle between. Lines or linear edges.
@@ -3635,6 +4427,65 @@ module GEOM
      */
     void DifferenceIDs (in GEOM_Object theGroup, in ListOfLong theSubShapes);
 
+    /*!
+     *  \brief Union of two groups.
+     *  New group is created. It will contain all entities
+     *  which are present in groups theGroup1 and theGroup2.
+     *  \param theGroup1, theGroup2 are the initial GEOM groups
+     *                              to create the united group from.
+     *  \return a newly created GEOM group.
+     */
+    GEOM_Object UnionGroups (in GEOM_Object theGroup1, in GEOM_Object theGroup2);
+
+    /*!
+     *  \brief Intersection of two groups.
+     *  New group is created. It will contain only those entities
+     *  which are present in both groups theGroup1 and theGroup2.
+     *  \param theGroup1, theGroup2 are the initial GEOM groups to get common part of.
+     *  \return a newly created GEOM group.
+     */
+    GEOM_Object IntersectGroups (in GEOM_Object theGroup1, in GEOM_Object theGroup2);
+
+    /*!
+     *  \brief Cut of two groups.
+     *  New group is created. It will contain entities which are
+     *  present in group theGroup1 but are not present in group theGroup2.
+     *  \param theGroup1 is a GEOM group to include elements of.
+     *  \param theGroup2 is a GEOM group to exclude elements of.
+     *  \return a newly created GEOM group.
+     */
+    GEOM_Object CutGroups (in GEOM_Object theGroup1, in GEOM_Object theGroup2);
+
+    /*!
+     *  \brief Union of list of groups.
+     *  New group is created. It will contain all entities that are
+     *  present in groups listed in theGList.
+     *  \param theGList is a list of GEOM groups to create the united group from.
+     *  \return a newly created GEOM group.
+     */
+    GEOM_Object UnionListOfGroups (in ListOfGO theGList);
+
+    /*!
+     *  \brief Intersection of list of groups.
+     *  New group is created. It will contain only entities
+     *  which are simultaneously present in the groups listed in theGList.
+     *  \param theGList is a list of GEOM groups to get common part of.
+     *  \return a newly created GEOM group.
+     */
+    GEOM_Object IntersectListOfGroups (in ListOfGO theGList);
+
+    /*!
+     *  \brief Cut of lists of groups.
+     *  New group is created. It will contain only entities
+     *  which are present in groups listed in theGList1 but 
+     *  are not present in groups from theGList2.
+     *  \param theGList1 is a list of GEOM groups to include elements of.
+     *  \param theGList2 is a list of GEOM groups to exclude elements of.
+     *  \return a newly created GEOM group.
+     */
+    GEOM_Object CutListOfGroups (in ListOfGO theGList1,
+                                 in ListOfGO theGList2);
+
     /*!
      *  \brief Returns a type of sub-objects stored in the group
      *  \param theGroup is a GEOM group which type is returned.
@@ -3655,177 +4506,39 @@ module GEOM
     ListOfLong GetObjects (in GEOM_Object theGroup);
   };
 
// # GEOM_IAdvancedOperations:
 // # GEOM_IFieldOperations:
   /*!
-   *  \brief Interface for advanced modeling functions.
+   *  \brief Interface for field operation.
    */
-  interface GEOM_IAdvancedOperations : GEOM_IOperations
+  interface GEOM_IFieldOperations : GEOM_IOperations
   {
     /*!
-     *  \brief 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_Object, 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);
-    /*!
-     *  \brief 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_Object, 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);
-    /*!
-     *  \brief 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_Object, 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);
-    /*!
-     *  \brief 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_Object, 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);
-    /*!
-     *  \brief 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_Object, 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);
-    /*!
-     *  \brief 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_Object, 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);
-    /*!
-     *  This function allows to create a disk already divided into blocks. It
-     *  can be use to create divided pipes for later meshing in hexaedra.
-     *  \param theR Radius of the disk
-     *  \param theRatio Relative size of the central square diagonal against the disk diameter
-     *  \param theOrientation Plane on which the disk will be built
-     *  \return New GEOM_Object, containing the created shape.
-     */
-    GEOM_Object MakeDividedDisk (in double theR, 
-                                 in double theRatio, 
-                                 in short theOrientation,
-                                 in pattern thePattern);
-
-    /*!
-     *  \brief Create a Disk prepared for hexa meshing 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.
-     *  \param theRatio Relative size of the central square diagonal against the disk diameter
-     *  \return New GEOM_Object, containing the created disk.
+     *  \brief Creates a field
      */
-    GEOM_Object MakeDividedDiskPntVecR ( in GEOM_Object thePnt,
-                                         in GEOM_Object theVec,
-                                         in double theR, 
-                                         in double theRatio,
-                                         in pattern thePattern);
+    GEOM_Field CreateField(in GEOM_Object     shape, 
+                           in string          name,
+                           in field_data_type type,
+                           in short           dimension,
+                           in string_array    componentNames);
+    /*!
+     *  \brief Returns number of fields on a shape
+     */
+    long CountFields(in GEOM_Object shape);
+
+    /*!
+     *  \brief Returns all fields on a shape
+     */
+    ListOfFields GetFields(in GEOM_Object shape);
 
     /*!
-     *  Builds a cylinder prepared for hexa meshes
-     *  \param theR Radius of the cylinder
-     *  \param theH Height of the cylinder
-     *  \return New GEOM_Object, containing the created shape.
+     *  \brief Returns a field on a shape by its name
      */
-    GEOM_Object MakeDividedCylinder (in double theR, 
-                                     in double theH,
-                                     in pattern thePattern );
+    GEOM_Field GetField(in GEOM_Object shape, in string name);
 
-    /*@@ insert new functions before this line @@ do not remove this line @@*/
+    /*!
+     *  \brief Returns number of sub-shapes of given dimension
+     */
+    long GetNbSubShapes(in GEOM_Object shape, in short fieldDim);
   };
 
  // # GEOM_Gen:
@@ -3852,9 +4565,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_BaseObject theObject,
+                                  in string          theName,
+                                  in GEOM_BaseObject theFather);
 
     /*!
      *  \brief Publish sub-shapes, standing for arguments and sub-shapes of arguments
@@ -3949,8 +4662,8 @@ module GEOM
                                  in boolean           theInheritFirstArg,
                                  in boolean           theAddPrefix);
 
-   // #  Methods to access interfaces for objects creation and transformation
-    
+    // #  Methods to access interfaces for objects creation and transformation
+
     GEOM_IBasicOperations     GetIBasicOperations    (in long theStudyID) raises (SALOME::SALOME_Exception);
     GEOM_ITransformOperations GetITransformOperations(in long theStudyID) raises (SALOME::SALOME_Exception);
     GEOM_I3DPrimOperations    GetI3DPrimOperations   (in long theStudyID) raises (SALOME::SALOME_Exception);
@@ -3963,16 +4676,19 @@ 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);
+    GEOM_IFieldOperations     GetIFieldOperations    (in long theStudyID) raises (SALOME::SALOME_Exception);
+
+    GEOM_IOperations GetPluginOperations (in long   theStudyID,
+                                          in string theLibName) raises (SALOME::SALOME_Exception);
+
+    // # Objects Management
 
-  //  # Objects Management
-     
 
     /*!
      *  \brief Removes the object from the GEOM component
      *  \param theObject is a GEOM_Object to be removed
      */
-    void RemoveObject (in GEOM_Object theObject);
+    void RemoveObject (in GEOM_BaseObject theObject);
 
     /*!
      *  \brief Returns an object defined by the study and its entry in the GEOM component
@@ -3980,7 +4696,7 @@ module GEOM
      *  \param theEntry is an entry of the requested GEOM_Object in the GEOM component
      *  \note if the object has not previously been created a NULL GEOM_Object is returned
      */
-    GEOM_Object GetObject (in long theStudyID, in string theEntry);
+    GEOM_BaseObject GetObject (in long theStudyID, in string theEntry);
 
     /*!
      *  \brief Add a sub-shape defined by indices in \a theIndices
@@ -4025,6 +4741,83 @@ module GEOM
     ListOfGO PublishNamedShapesInStudy(in SALOMEDS::Study theStudy,
                                        //in SObject theSObject,
                                        in Object theObject);
+
+    /*!
+     * \brief Creates a new folder
+     *
+     * Creates a new container (folder) for any GEOM objects.
+     * Folder will have name theName.
+     * If theFather is not NULL, the folder is placed under theFather object.
+     * Otherwise, the folder takes place under root 'Geometry' object.
+     * 
+     * \param theName name of the folder
+     * \param theFather parent object
+     * \return SObject represented the created folder.
+     */
+    SALOMEDS::SObject CreateFolder (in string theName,
+                                   in SALOMEDS::SObject theFather);
+
+    /*!
+     * \brief Moves object to the specified folder
+     *
+     * The moved object should be first published in the study.
+     * \param theObject GEOM object to move
+     * \param theFolder target folder
+     */
+    void MoveToFolder (in GEOM_Object theObject,
+                      in SALOMEDS::SObject theFolder);
+
+    /*!
+     * \brief Moves list of objects to the specified folder
+     *
+     * The moved objects should be first published in the study.
+     * \param theListOfGO list of GEOM objects to move
+     * \param theFolder target folder
+     */
+    void MoveListToFolder (in ListOfGO theListOfGO,
+                          in SALOMEDS::SObject theFolder);
+
+    /*!
+     * \brief Moves objects to the specified position
+     *
+     * This function is used in the drag-n-drop functionality.
+     *
+     * \param what objects being moved
+     * \param where parent object where objects are moved to
+     * \param row position in the parent object's children list at which objects are moved
+     */
+    void Move( in object_list what, 
+              in SALOMEDS::SObject where, 
+              in long row );
+
+    /*!
+     * \brief Collects dependencies of the given objects from other ones
+     * \param theStudy The study in which the object is published
+     * \param theListOfEntries List of GEOM object entries in OCAF tree (not in study)
+     * \return Struct of dependent entries and its links as a byte array
+     * \note This method is supposed to be used by GUI only.
+     */
+    SALOMEDS::TMPFile GetDependencyTree(in SALOMEDS::Study theStudy,
+                                       in string_array theListOfEntries);
+
+    /*!
+     * \brief Fills 3 lists that is used to reduce study of redundant objects:
+     *  - dependencies of the given objects from other ones;
+     *  - children of the given objects;
+     *  - all other objects in study.
+     * \param theStudy The study in which the object was published
+     * \param theSelectedEntries List of GEOM object entries in OCAF tree
+     * \param theParentEntries List of GEOM object entries on which the given objects depend
+     * \param theSubEntries Children entries list of the given objects
+     * \param theOtherEntries List of GEOM object entries which are in the study, but not in parents and children lists
+     * \note This method is supposed to be used by GUI only.
+     */
+    void GetEntriesToReduceStudy(in SALOMEDS::Study theStudy,
+                                inout string_array theSelectedEntries,
+                                inout string_array theParentEntries,
+                                inout string_array theSubEntries,
+                                inout string_array theOtherEntries);
+
   };
 };