Salome HOME
0022531: [CEA 1112] the point markers o and x are inverted
[modules/geom.git] / idl / GEOM_Gen.idl
index 1395c58597c575f48bf934c24ec463c44b115ced..9950494cbc06c0656dc1efa25db7b08afa841770 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2013  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
@@ -61,8 +61,8 @@ module GEOM
   /*!
    * \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
@@ -190,6 +190,36 @@ module GEOM
     HEXAGON
   };
 
+ /*!
+   * \brief Type of field data
+   */
+  enum field_data_type {
+    FDT_Bool,
+    FDT_Int,
+    FDT_Double,
+    FDT_String
+  };
+
+
+ /*!
+   * \brief Object creation parameters
+   *
+   * Is returned by GEOM_Object::GetCreationInformation()
+   */
+  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;
@@ -198,15 +228,32 @@ module GEOM
   typedef sequence<double>      ListOfDouble;
 
   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 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.
@@ -226,6 +273,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.
      */
@@ -263,18 +376,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.
      *
@@ -331,29 +432,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.
      */
@@ -385,34 +463,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_IOperations:
+  // # 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_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
    */
@@ -1060,6 +1273,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.
@@ -1546,6 +1776,7 @@ module GEOM
      *  \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
      */
@@ -2258,7 +2489,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
@@ -2556,6 +2787,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.
      *
@@ -2669,34 +2909,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);
+    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);
+    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 ListOfGO theShapes,
+                             in boolean  IsCheckSelfInte);
 
     /*!
      *  \brief Perform partition operation.
@@ -2740,7 +3009,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.
@@ -2754,7 +3026,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
@@ -2945,6 +3218,20 @@ 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.
@@ -3314,6 +3601,22 @@ module GEOM
      */
     GEOM_Object Sew (in GEOM_Object theObject, in double theTolerance);
 
+    /*!
+     *  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 GEOM_Object theObject, in double theTolerance);
+
+    /*!
+     *  Rebuild the topology of theCompound of solids by removing
+     *  of the faces that are shared by several solids.
+     *  \param theCompound Shape to be processed.
+     *  \return New GEOM_Object, containing processed shape.
+     */
+    GEOM_Object RemoveInternalFaces (in GEOM_Object theCompound);
+
     /*!
      *  \brief Addition of a point to a given edge object.
      *  \param theObject Shape to be processed.
@@ -3398,9 +3701,9 @@ module GEOM
      *         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 New GEOM_Object, containing the imported shape.
+     *  \return List of GEOM_Object, containing the created shape and groups of materials.
      */
-    GEOM_Object ImportFile (in string theFileName, in string theFormatName);
+    ListOfGO ImportFile (in string theFileName, in string theFormatName);
 
     /*!
      *  \brief Read a value of parameter from a file, containing a shape.
@@ -3469,6 +3772,31 @@ module GEOM
      * \return list of all texture IDs avaiable for the current study
      */
     ListOfLong GetAllTextures();
+
+    /*!
+     *  Export a shape to XAO format
+     *  \param shape The shape to export
+     *  \param groups The list of groups to export
+     *  \param fields The list of fields to export
+     *  \param author The author of the export
+     *  \param fileName The name of the file to export
+     *  \return boolean indicating if export was successful.
+     */
+    boolean ExportXAO(in GEOM_Object shape,
+                     in ListOfGO groups, in ListOfFields fields,
+                     in string author, in string fileName);
+    
+    /*!
+     *  Import a shape from XAO format
+     *  \param fileName The name of the file to import
+     *  \param shape The imported shape
+     *  \param subShapes The list of imported subShapes
+     *  \param groups The list of imported groups
+     *  \param fields The list of imported fields
+     *  \return boolean indicating if import was successful.
+     */
+    boolean ImportXAO(in string fileName, out GEOM_Object shape,
+                     out ListOfGO subShapes, out ListOfGO groups, out ListOfFields fields);
   };
 
  // # GEOM_IKindOfShape:
@@ -3640,12 +3968,14 @@ 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);
@@ -3653,9 +3983,11 @@ module GEOM
     /*!
      *  \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);
+    GEOM_Object MakeBoundingBox (in GEOM_Object theShape,
+                                 in boolean precise);
 
     /*!
      *  \brief Get min and max tolerances of sub-shapes of theShape
@@ -4343,6 +4675,7 @@ module GEOM
      *  \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
+     *  \param thePattern Division pattern. It can be GEOM.SQUARE or GEOM.HEXAGON
      *  \return New GEOM_Object, containing the created shape.
      */
     GEOM_Object MakeDividedDisk (in double theR, 
@@ -4356,6 +4689,7 @@ module GEOM
      *  \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
+     *  \param thePattern Division pattern. It can be GEOM.SQUARE or GEOM.HEXAGON
      *  \return New GEOM_Object, containing the created disk.
      */
     GEOM_Object MakeDividedDiskPntVecR ( in GEOM_Object thePnt,
@@ -4368,15 +4702,64 @@ module GEOM
      *  Builds a cylinder prepared for hexa meshes
      *  \param theR Radius of the cylinder
      *  \param theH Height of the cylinder
+     *  \param thePattern Division pattern. It can be GEOM.SQUARE or GEOM.HEXAGON
      *  \return New GEOM_Object, containing the created shape.
      */
     GEOM_Object MakeDividedCylinder (in double theR, 
                                      in double theH,
                                      in pattern thePattern );
+    /*!
+     *  
+     *  Create a smoothing surface from a set of points
+     *  \param thelPoints list of points. Compounds of points are accepted as well.
+     *  \param theNbMax maximum number of Bezier pieces in the resulting surface.
+     *  \param theDegMax maximum degree of the resulting BSpline surface
+     *  \param theDMax specifies maximum value of the GeomPlate_PlateG0Criterion criterion.
+     *  \return New GEOM_Object, containing the created shape.
+     */
+    GEOM_Object MakeSmoothingSurface (in ListOfGO thelPoints,
+                                      in long     theNbMax,
+                                      in long     theDegMax,
+                                      in double   theDMax);
 
     /*@@ insert new functions before this line @@ do not remove this line @@*/
   };
 
+ // # GEOM_IFieldOperations:
+  /*!
+   *  \brief Interface for field operation.
+   */
+  interface GEOM_IFieldOperations : GEOM_IOperations
+  {
+    /*!
+     *  \brief Creates a field
+     */
+    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);
+
+    /*!
+     *  \brief Returns a field on a shape by its name
+     */
+    GEOM_Field GetField(in GEOM_Object shape, in string name);
+
+    /*!
+     *  \brief Returns number of sub-shapes of given dimension
+     */
+    long GetNbSubShapes(in GEOM_Object shape, in short fieldDim);
+  };
+
  // # GEOM_Gen:
   /*!
    *  \brief Interface to access other GEOM interfaces.
@@ -4401,9 +4784,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
@@ -4498,8 +4881,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);
@@ -4512,16 +4895,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
@@ -4529,7 +4915,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
@@ -4574,6 +4960,54 @@ 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 );
   };
 };