Salome HOME
Merge branch 'V8_4_BR'
[modules/smesh.git] / idl / SMESH_Mesh.idl
index 7dee0ce3f213ed8057c9f907c5912d8fb8c2bf7d..66f5faa6f79d30b9aaa2bfbcbffc5473d16cb0de 100644 (file)
@@ -1,55 +1,47 @@
-//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
 //
-//  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.
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 //
-//  This library is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-//  Lesser General Public License for more details.
+// 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, or (at your option) any later version.
 //
-//  You should have received a copy of the GNU Lesser General Public
-//  License along with this library; if not, write to the Free Software
-//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
 //
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
+
 //  File   : SMESH_Mesh.idl
 //  Author : Paul RASCLE, EDF
-//  $Header$
-
+//
 #ifndef _SMESH_MESH_IDL_
 #define _SMESH_MESH_IDL_
 
 #include "SALOME_Exception.idl"
 #include "SALOME_GenericObj.idl"
-
-module GEOM
-{
-  interface GEOM_Object;
-};
-
-
-module SALOME_MED
-{
-  interface MESH;
-  interface FAMILY;
-};
-
+#include "GEOM_Gen.idl"
 
 module SMESH
 {
   interface SMESH_Hypothesis;
   typedef sequence<SMESH_Hypothesis> ListOfHypothesis;
+  interface SMESH_GroupBase;
+  typedef sequence<SMESH_GroupBase> ListOfGroups;
+  interface SMESH_IDSource;
+  typedef sequence<SMESH_IDSource> ListOfIDSources;
 
-  typedef sequence<double> double_array ;
-  typedef sequence<long> long_array ;
-  typedef sequence<string> string_array ;
+  typedef sequence<double    > double_array ;
+  typedef sequence<long      > long_array ;
+  typedef sequence<string    > string_array ;
   typedef sequence<long_array> array_of_long_array ;
 
   enum log_command
@@ -69,7 +61,22 @@ module SMESH
       MOVE_NODE,
       CHANGE_ELEMENT_NODES,
       CHANGE_POLYHEDRON_NODES,
-      RENUMBER
+      RENUMBER,
+      CLEAR_MESH,
+      ADD_QUADEDGE,
+      ADD_QUADTRIANGLE,
+      ADD_QUADQUADRANGLE,
+      ADD_QUADPOLYGON,
+      ADD_QUADTETRAHEDRON,
+      ADD_QUADPYRAMID,
+      ADD_QUADPENTAHEDRON,
+      ADD_QUADHEXAHEDRON,
+      ADD_ELEM0D,
+      ADD_BIQUAD_TRIANGLE,
+      ADD_BIQUAD_QUADRANGLE,
+      ADD_TRIQUAD_HEXA,
+      ADD_HEXAGONAL_PRISM,
+      ADD_BALL
     };
 
   struct log_block
@@ -79,19 +86,38 @@ module SMESH
     double_array coords;
     long_array indexes;
   };
+  typedef sequence<log_block> log_array;
 
   struct PointStruct { double x;
-                      double y;
-                      double z; } ;
-  struct DirStruct   { PointStruct PS ; } ;          // analog to Occ Direction
+                       double y;
+                       double z; };
+
+  typedef sequence<PointStruct> nodes_array;
+
+  struct DirStruct   { PointStruct PS; };          // analog to OCCT gp_Vec
 
   struct AxisStruct  { double x;
-                      double y;
-                      double z;
-                      double vx;
-                      double vy;
-                      double vz; } ;
+                       double y;
+                       double z;
+                       double vx;
+                       double vy;
+                       double vz; };
+  /*!
+   * Node location on a shape
+   */
+  struct NodePosition {
+    long             shapeID;
+    GEOM::shape_type shapeType;
+    double_array     params; // [U] on EDGE, [U,V] on FACE, [] on the rest shapes
+  };
 
+  /*!
+   * Element location on a shape
+   */
+  struct ElementPosition {
+    long             shapeID;
+    GEOM::shape_type shapeType;
+  };
 
   /*!
    * Enumeration for element type, like in SMDS
@@ -102,7 +128,75 @@ module SMESH
     NODE,
     EDGE,
     FACE,
-    VOLUME
+    VOLUME,
+    ELEM0D,
+    BALL,
+    NB_ELEMENT_TYPES
+  };
+  typedef sequence<ElementType> array_of_ElementType;
+
+  /*!
+   * Enumeration for element geometry type, like SMDSAbs_GeometryType in SMDSAbs_ElementType.hxx
+   */
+  enum GeometryType
+  {
+    Geom_POINT,
+    Geom_EDGE,
+    Geom_TRIANGLE,
+    Geom_QUADRANGLE, // when a new GeometryType is added, please
+    Geom_POLYGON,    // update a corresponding list in SMESH_2smeshpy.cxx, ln 665
+    Geom_TETRA,
+    Geom_PYRAMID,
+    Geom_HEXA,
+    Geom_PENTA,
+    Geom_HEXAGONAL_PRISM,
+    Geom_POLYHEDRA,
+    Geom_BALL,
+    Geom_LAST
+  };
+  
+  /*!
+   * ElementOrder points out entities of what order are requested
+   */
+  enum ElementOrder {
+    ORDER_ANY,          /*! entities of any order */
+    ORDER_LINEAR,       /*! entities of 1st order */
+    ORDER_QUADRATIC     /*! entities of 2nd order */
+  };
+
+  /*!
+   * Enumeration of entity type used in mesh info array,
+   * it should be synchronised with enum SMDSAbs_EntityType
+   */
+  enum EntityType
+  {
+    Entity_Node,
+    Entity_0D,
+    Entity_Edge,
+    Entity_Quad_Edge,
+    Entity_Triangle,
+    Entity_Quad_Triangle,
+    Entity_BiQuad_Triangle,
+    Entity_Quadrangle,
+    Entity_Quad_Quadrangle,
+    Entity_BiQuad_Quadrangle,
+    Entity_Polygon,
+    Entity_Quad_Polygon,
+    Entity_Tetra,
+    Entity_Quad_Tetra,
+    Entity_Pyramid,
+    Entity_Quad_Pyramid,
+    Entity_Hexa,
+    Entity_Quad_Hexa,
+    Entity_TriQuad_Hexa,
+    Entity_Penta,
+    Entity_Quad_Penta,
+    Entity_BiQuad_Penta,
+    Entity_Hexagonal_Prism,
+    Entity_Polyhedra,
+    Entity_Quad_Polyhedra,
+    Entity_Ball,
+    Entity_Last
   };
 
   /*!
@@ -112,81 +206,210 @@ module SMESH
   {
     HYP_OK,
     HYP_MISSING,      // algo misses a hypothesis
-    HYP_CONCURENT,    // several applicable hypotheses
+    HYP_CONCURRENT,   // several applicable hypotheses
     HYP_BAD_PARAMETER,// hypothesis has a bad parameter value
+    HYP_HIDDEN_ALGO,  // an algo is hidden by an upper dim algo generating all-dim elements
+    HYP_HIDING_ALGO,  // an algo hides lower dim algos by generating all-dim elements
     HYP_UNKNOWN_FATAL,//  --- all statuses below should be considered as fatal
                       //      for Add/RemoveHypothesis operations
     HYP_INCOMPATIBLE, // hypothesis does not fit algo
     HYP_NOTCONFORM,   // not conform mesh is produced appling a hypothesis
     HYP_ALREADY_EXIST,// such hypothesis already exist
-    HYP_BAD_DIM       // bad dimension
+    HYP_BAD_DIM,      // bad dimension
+    HYP_BAD_SUBSHAPE, // shape is neither the main one, nor its sub-shape, nor a group
+    HYP_BAD_GEOMETRY, // geometry mismatches algorithm's expectation
+    HYP_NEED_SHAPE,   // algorithm can work on shape only
+    HYP_INCOMPAT_HYPS // several additional hypotheses are incompatible one with other
   };
 
   /*!
-   * Enumeration for DriverMED read status (used by ImportMEDFile() method)
+   * Enumeration for mesh read status (used by SMESH_Gen::CreateMeshesFrom*() methods)
    */
   enum DriverMED_ReadStatus // in the order of severity
   {
     DRS_OK,
-    DRS_EMPTY,          // a MED file contains no mesh with the given name
+    DRS_EMPTY,          // a file contains no mesh with the given name
     DRS_WARN_RENUMBER,  // a MED file has overlapped ranges of element numbers,
                         // so the numbers from the file are ignored
     DRS_WARN_SKIP_ELEM, // some elements were skipped due to incorrect file data
+    DRS_WARN_DESCENDING, // some elements were skipped due to descending connectivity
     DRS_FAIL            // general failure (exception etc.)
   };
 
   /*!
-   * Enumeration for DriverMED (used by Perform() method)
+   * Enumeration for ExportToMED*()
+   * MED_V2_1 and MED_V2_2 are here for compatibility and mean respectively obsolete and MED_LATEST.
+   * MED_MINOR_0 to MED_MINOR_9 are use to specify the minor version used by MEDfichier
+   * to write MED files (major version cannot be changed).
+   * This allows backward compatibility from a newer version of SALOME to an older one:
+   * for instance, a MESH produced in SALOME 8.4 (med 3.3) can be written in med 3.2 format
+   * to be read in SALOME 8.3.
    */
-  enum MED_VERSION // in the order of severity
+  enum MED_VERSION
   {
     MED_V2_1,
-    MED_V2_2
+    MED_V2_2,
+    MED_LATEST,
+    MED_MINOR_0,
+    MED_MINOR_1,
+    MED_MINOR_2,
+    MED_MINOR_3,
+    MED_MINOR_4,
+    MED_MINOR_5,
+    MED_MINOR_6,
+    MED_MINOR_7,
+    MED_MINOR_8,
+    MED_MINOR_9
   };
 
-  typedef sequence<log_block> log_array;
+  /*! 
+   * \brief A structure containing information about MED file
+   */
+  struct MedFileInfo
+  {
+    string fileName; //!< name of file
+    long   fileSize; //!< size of file
+    long   major, minor, release; //!< MED file version
+  };
 
+  /*!
+   * Enumeration for CreateDimGroup()
+   */
+  enum NB_COMMON_NODES_ENUM
+  {
+    ALL_NODES, MAIN, AT_LEAST_ONE, MAJORITY
+  };
+
+  /*!
+   * Auxiliary flags for advanced extrusion.
+   * BOUNDARY: create or not boundary for result of extrusion
+   * SEW:      try to use existing nodes or create new nodes in any case
+   */
+  const long EXTRUSION_FLAG_BOUNDARY = 1;
+  const long EXTRUSION_FLAG_SEW = 2;
+  
+  /*!
+   * Structure used in mesh edit preview data (MeshPreviewStruct)
+   */
+  struct ElementSubType { ElementType SMDS_ElementType;
+                          boolean     isPoly;
+                          long        nbNodesInElement; };
+
+  typedef sequence<ElementSubType> types_array;
+
+  /*!
+   * Structure containing mesh edit preview data
+   */
+  struct MeshPreviewStruct { nodes_array nodesXYZ;
+                             long_array  elementConnectivities;
+                             types_array elementTypes; };
+
+  interface SMESH_Mesh;
 
-  interface SMESH_IDSource
+  interface SMESH_IDSource : SALOME::GenericObj
   {
     /*!
      * Returns a sequence of all element IDs
      */
     long_array GetIDs();
+
+    /*!
+     * Returns number of mesh elements of each \a EntityType
+     * @return array of number of elements per \a EntityType
+     */
+    long_array GetMeshInfo();
+
+    /*!
+     * Returns number of mesh elements of each \a ElementType
+     * @return array of number of elements per \a ElementType
+     */
+    long_array GetNbElementsByType();
+
+    /*!
+     * Returns types of elements it contains.
+     * It's empty if the SMESH_IDSource contains no IDs
+     */
+    array_of_ElementType GetTypes();
+
+    /*!
+     * Returns the mesh
+     */
+    SMESH_Mesh GetMesh();
+
+    /*!
+     * Returns false if GetMeshInfo() returns incorrect information that may
+     * happen if mesh data is not yet fully loaded from the file of study.
+     */
+    boolean IsMeshInfoCorrect();
+
+    /*!
+     * Returns mesh unstructed grid information.
+     */
+    SALOMEDS::TMPFile GetVtkUgStream();
   };
 
-  interface SMESH_GroupBase;
   interface SMESH_Group;
   interface SMESH_GroupOnGeom;
+  interface Filter;
+  interface SMESH_GroupOnFilter;
   interface SMESH_subMesh;
   interface SMESH_MeshEditor;
+
+  typedef sequence<SMESH_subMesh>     submesh_array;
+  typedef sequence<submesh_array>     submesh_array_array;
+
   interface SMESH_Mesh : SALOME::GenericObj, SMESH_IDSource
   {
-    ///*!
-    // * Associate a Shape to a Mesh created with NewEmpty
-    // */
-    //boolean SetMesh(in GEOM::GEOM_Object anObject)
-    //  raises (SALOME::SALOME_Exception);
+    /*!
+     * Return true if there is a geometry to be meshed
+     */
+    boolean HasShapeToMesh()
+      raises (SALOME::SALOME_Exception);
 
     /*!
-     * Get the subMesh object associated to a subShape. The subMesh object
-     * gives access to nodes and elements IDs.
-     * SubMesh will be used instead of SubShape in a next idl version to
-     * adress a specific subMesh...
+     * Get geom shape to mesh. A result should not be nil. Use HasShapeToMesh()
+     * to know if a returned shape 
      */
-    SMESH_subMesh GetSubMesh(in GEOM::GEOM_Object aSubObject, in string name)
+    GEOM::GEOM_Object GetShapeToMesh()
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Return false if the mesh is not yet fully loaded from the study file
+     */
+    boolean IsLoaded()
       raises (SALOME::SALOME_Exception);
 
-    ///*!
-    // * Create a subMesh without reference to a subShape
-    // */
-    //SMESH_subMesh NewEmpty()
-    //  raises (SALOME::SALOME_Exception);
+    /*!
+     * Load full mesh data from the study file
+     */
+    void Load()
+      raises (SALOME::SALOME_Exception);
 
     /*!
-     * Get geom shape to mesh. A result may be nil
+     * Remove all nodes and elements
      */
-    GEOM::GEOM_Object GetShapeToMesh()
+    void Clear()
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     *  Get the list of sub-meshes existing in the mesh
+     */
+    submesh_array GetSubMeshes()
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Remove all nodes and elements of submesh
+     */
+    void ClearSubMesh(in long ShapeID)
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Get the subMesh object associated to a Sub-shape. The subMesh object
+     * gives access to nodes and elements IDs.
+     * SubMesh will be used instead of Sub-shape in a next idl version to
+     * address a specific subMesh...
+     */
+    SMESH_subMesh GetSubMesh(in GEOM::GEOM_Object aSubObject, in string name)
       raises (SALOME::SALOME_Exception);
 
     /*!
@@ -195,19 +418,28 @@ module SMESH
     void RemoveSubMesh(in SMESH_subMesh aSubMesh)
       raises (SALOME::SALOME_Exception);
 
+
     /*!
      * Create a group
      */
     SMESH_Group CreateGroup( in ElementType elem_type,
-                            in string name )
+                             in string      name )
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Create a group from geometry
+     */
+    SMESH_GroupOnGeom CreateGroupFromGEOM( in ElementType       elemType,
+                                           in string            name,
+                                           in GEOM::GEOM_Object geomObject )
       raises (SALOME::SALOME_Exception);
 
     /*!
-     * Create a group from geometry group
+     * Create a group from filter
      */
-    SMESH_GroupOnGeom CreateGroupFromGEOM( in ElementType elem_type,
-                                          in string name,
-                                          in GEOM::GEOM_Object theGeomObject )
+    SMESH_GroupOnFilter CreateGroupFromFilter( in ElementType   elemType,
+                                               in string        name,
+                                               in SMESH::Filter filter )
       raises (SALOME::SALOME_Exception);
 
     /*!
@@ -222,6 +454,18 @@ module SMESH
     void RemoveGroupWithContents( in SMESH_GroupBase aGroup )
       raises (SALOME::SALOME_Exception);
 
+    /*!
+     *  Get the list of groups existing in the mesh
+     */
+    ListOfGroups GetGroups()
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     *  Get number of groups existing in the mesh
+     */
+    long NbGroups()
+      raises (SALOME::SALOME_Exception);
+
     /*!
      * Union of two groups
      *    New group is created. All mesh elements that are
@@ -231,6 +475,15 @@ module SMESH
                              in SMESH_GroupBase aGroup2,
                              in string          name )
       raises (SALOME::SALOME_Exception);
+      
+    /*!
+     * Union of list of groups
+     * New group is created. All mesh elements that are
+     * present in initial groups are added to the new one
+     */
+    SMESH_Group UnionListOfGroups (in ListOfGroups aListOfGroups,
+                                   in string       name )
+      raises (SALOME::SALOME_Exception);
 
     /*!
      *  Intersection of two groups
@@ -241,6 +494,15 @@ module SMESH
                                  in SMESH_GroupBase aGroup2,
                                  in string          name )
       raises (SALOME::SALOME_Exception);
+      
+    /*!
+     *  Intersection of list of groups
+     *  New group is created. All mesh elements that are
+     *  present in all initial groups simultaneously are added to the new one.
+     */
+    SMESH_Group IntersectListOfGroups (in ListOfGroups aListOfGroups,
+                                       in string       name)
+      raises (SALOME::SALOME_Exception);
 
     /*!
      *  Cut of two groups
@@ -248,50 +510,75 @@ module SMESH
      *  main group but do not present in tool group are added to the new one
      */
     SMESH_Group CutGroups (in SMESH_GroupBase aMainGroup,
-                          in SMESH_GroupBase aToolGroup,
-                          in string          name )
+                           in SMESH_GroupBase aToolGroup,
+                           in string          name )
+      raises (SALOME::SALOME_Exception);
+      
+    /*!
+     *  Cut of lists of groups
+     *  New group is created. All mesh elements that are present in
+     *  main groups but do not present in tool groups are added to the new one
+     */
+    SMESH_Group CutListOfGroups (in ListOfGroups aMainGroups,
+                                 in ListOfGroups aToolGroups,
+                                 in string       name)
+      raises (SALOME::SALOME_Exception);
+      
+    /*!
+     *  Create a group of entities basing on nodes of other groups.
+     *  \param [in] aListOfGroups - list of either groups, sub-meshes or filters.
+     *  \param [in] anElemType - a type of elements to include to the new group.
+     *  \param [in] name - a name of the new group.
+     *  \param [in] nbCommonNodes - criterion of inclusion of an element to the new group.
+     *  \param [in] underlyingOnly - if \c True, an element is included to the 
+     *         new group provided that it is based on nodes of an element of
+     *         \a aListOfGroups
+     *  \return SMESH_Group - the created group
+     */
+    SMESH_Group CreateDimGroup( in ListOfIDSources      aListOfGroups,
+                                in ElementType          anElemType,
+                                in string               name,
+                                in NB_COMMON_NODES_ENUM nbCommonNodes,
+                                in boolean              underlyingOnly )
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Convert group on geometry or on filter into standalone group
+     */
+    SMESH_Group ConvertToStandalone( in SMESH_GroupBase theGroupOn )
       raises (SALOME::SALOME_Exception);
 
     /*!
-     * Add hypothesis to the mesh, under a particular subShape
+     * Add hypothesis to the mesh, under a particular sub-shape
      * (or the main shape itself)
-     * The Add method is only used to prepare the build of the mesh and store
+     * This method is only used to prepare the build of the mesh and store
      * the algorithms and associated parameters.
-     * Actual job of mesh the shape is done by MESH_Gen.
+     * Actual job of meshing the shape is done by SMESH_Gen::Compute()
      * @params
-     * - aSubShape : subShape obtained by a shape explode in GEOM
+     * - aSubObject : sub-shape obtained by a shape explode in GEOM
      *   (or main shape)
-     * - anHyp : hypothesis object
+     * - anHyp : an hypothesis object
      * @return
-     * - OK if the hypothesis is compatible with the subShape
-     *   (and all previous hypothesis on the subShape)
-     * - NOK if the hypothesis is not compatible with the subShape
-     *   (or one previous hypothesis on the subShape)
-     * raises exception if hypothesis has not been created
+     * - An enum item explaining what's up
+     * - anErrorText: an optional textual description of a problem (if any)
      */
     Hypothesis_Status AddHypothesis(in GEOM::GEOM_Object aSubObject,
-                                   in SMESH_Hypothesis anHyp)
+                                    in SMESH_Hypothesis  anHyp,
+                                    out string           anErrorText)
       raises (SALOME::SALOME_Exception);
-//     boolean AddHypothesis(in SMESH_subMesh aSubMesh, in SMESH_Hypothesis anHyp)
-//       raises (SALOME::SALOME_Exception);
 
     /*!
-     * Remove an hypothesis previouly added with AddHypothesis.
+     * Remove an hypothesis previously added with AddHypothesis.
      */
     Hypothesis_Status RemoveHypothesis(in GEOM::GEOM_Object aSubObject,
-                                      in SMESH_Hypothesis anHyp)
+                                       in SMESH_Hypothesis anHyp)
       raises (SALOME::SALOME_Exception);
-//     boolean RemoveHypothesis(in SMESH_subMesh aSubMesh,
-//                          in SMESH_Hypothesis anHyp)
-//       raises (SALOME::SALOME_Exception);
 
     /*!
-     * Get the list of hypothesis added on a subShape
+     * Get the list of hypothesis added on a sub-shape
      */
     ListOfHypothesis GetHypothesisList(in GEOM::GEOM_Object aSubObject)
       raises (SALOME::SALOME_Exception);
-//     ListOfHypothesis GetHypothesisList(in SMESH_subMesh aSubMesh)
-//       raises (SALOME::SALOME_Exception);
 
     /*!
      * Get the log of nodes and elements added or removed since previous
@@ -299,8 +586,6 @@ module SMESH
      * @params
      * - clearAfterGet : log is emptied after Get (safe if concurrents access)
      */
-    //    string_array GetLog(in boolean clearAfterGet)
-    //      raises (SALOME::SALOME_Exception);
     log_array GetLog(in boolean clearAfterGet)
       raises (SALOME::SALOME_Exception);
 
@@ -311,6 +596,20 @@ module SMESH
     void ClearLog()
       raises (SALOME::SALOME_Exception);
 
+    /*!
+     * Toggle auto color mode on the object.
+     * @params
+     * - theAutoColor : flag which toggles auto color mode.
+     */
+    void SetAutoColor(in boolean theAutoColor)
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Get flag of object's auto color mode.
+     */
+    boolean GetAutoColor()
+      raises (SALOME::SALOME_Exception);
+
     /*!
      * Get the internal Id
      */
@@ -328,42 +627,131 @@ module SMESH
       raises (SALOME::SALOME_Exception);
 
     /*!
-     * Export Mesh to different MED Formats
+     * Return SMESH_MeshEditor that would not modify the mesh but
+     * fill MeshPreviewStruct
+     */
+    SMESH_MeshEditor GetMeshEditPreviewer()
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Return true if the mesh has been edited since a total re-compute
+     * and those modifications may prevent successful partial re-compute
+     */
+    boolean HasModificationsToDiscard()
+      raises (SALOME::SALOME_Exception);
+
+    /*! Check group names for duplications.
+     *  Consider maximum group name length stored in MED file.
+     */
+    boolean HasDuplicatedGroupNamesMED();
+
+    /*!
+     * Export Mesh to a MED Format file
      * @params
+     * - file : name of the MED file
      * - auto_groups : boolean parameter for creating/not creating
-     *   the groups Group_On_All_Nodes, Group_On_All_Faces, ... ;
-     *   the typical use is auto_groups=false.
-     * - theVersion : define the version of format of MED file, that will be created
+     *                 the groups Group_On_All_Nodes, Group_On_All_Faces, ... ;
+     *                 the typical use is auto_groups=false.
+     * - version : defines the version of format of MED file, that will be created
+     * - overwrite : boolean parameter for overwriting/not overwriting the file, if it exists
+     * - autoDimension : if @c true, a space dimension of a MED mesh can be either
+     *         - 1D if all mesh nodes lie on OX coordinate axis, or
+     *         - 2D if all mesh nodes lie on XOY coordinate plane, or
+     *         - 3D in the rest cases.
+     *         If @a autoDimension is @c false, the space dimension is always 3.
+     */
+    void ExportToMEDX( in string      file, 
+                       in boolean     auto_groups, 
+                       in MED_VERSION version, 
+                       in boolean     overwrite,
+                       in boolean     autoDimension) raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Export a [part of] Mesh into a MED file
+     * @params
+     * - meshPart : a part of mesh to store
+     * - file : name of the MED file
+     * - version : define the version of format of MED file, that will be created
+     * - overwrite : boolean parameter for overwriting/not overwriting the file, if it exists
+     * - autoDimension : if @c True, a space dimension for export is defined by mesh 
+     *                 configuration; for example a planar mesh lying on XOY plane
+     *                 will be exported as a mesh in 2D space. 
+     *                 If @a autoDimension == @c False, the space dimension is 3.
+     * - fields : list of GEOM fields defined on the shape to mesh.
+     * - geomAssocFields : each character of this string means a need to export a 
+     *         corresponding field; correspondence between fields and characters is following:
+     *         - 'v' stands for _vertices_ field;
+     *         - 'e' stands for _edges_ field;
+     *         - 'f' stands for _faces_ field;
+     *         - 's' stands for _solids_ field.
+     */
+    void ExportPartToMED( in SMESH_IDSource     meshPart,
+                          in string             file,
+                          in boolean            auto_groups,
+                          in MED_VERSION        version,
+                          in boolean            overwrite,
+                          in boolean            autoDimension,
+                          in GEOM::ListOfFields fields,
+                          in string             geomAssocFields ) raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Export Mesh to a MED Format file
+     * Works, just the same as ExportToMEDX, with overwrite parameter equal to true.
+     * The method is kept in order to support old functionality
      */
     void ExportToMED( in string file, in boolean auto_groups, in MED_VERSION theVersion )
       raises (SALOME::SALOME_Exception);
 
     /*!
-     * Export Mesh to MED_V2_1 MED format
-     * Works, just the same as ExportToMED, with MED_VERSION parameter equal to MED_V2_1.
+     * Export Mesh to MED_LATEST MED format
+     * Works, just the same as ExportToMEDX with MED_VERSION parameter equal to MED_LATEST
+     * and overwrite parameter equal to true
      * The method is kept in order to support old functionality
      */
     void ExportMED( in string file, in boolean auto_groups )
       raises (SALOME::SALOME_Exception);
 
     /*!
-     * Export Mesh to DAT, UNV and STL Formats
+     * Export Mesh to SAUV formatted file
+     * Write a temporary med file and use med2sauv
      */
-    void ExportDAT( in string file )
-      raises (SALOME::SALOME_Exception);
-    void ExportUNV( in string file )
-      raises (SALOME::SALOME_Exception);
-    void ExportSTL( in string file, in boolean isascii )
+    void ExportSAUV( in string file, in boolean auto_groups )
       raises (SALOME::SALOME_Exception);
 
     /*!
-     * Get MED Mesh
+     * Return string representation of a MED file version comprising nbDigits
      */
-    SALOME_MED::MESH GetMEDMesh()
-      raises (SALOME::SALOME_Exception);
+    string GetVersionString(in MED_VERSION version, in short nbDigits);
+
+    /*!
+     * Export Mesh to different Formats
+     * (UNV supported version is I-DEAS 10)
+     */
+    void ExportDAT( in string file ) raises (SALOME::SALOME_Exception);
+    void ExportUNV( in string file ) raises (SALOME::SALOME_Exception);
+    void ExportSTL( in string  file,
+                    in boolean isascii ) raises (SALOME::SALOME_Exception);
+    void ExportCGNS( in SMESH_IDSource meshPart, 
+                     in string         file,
+                     in boolean        overwrite,
+                     in boolean        groupElemsByType) raises (SALOME::SALOME_Exception);
+    void ExportGMF( in SMESH_IDSource  meshPart, 
+                    in string          file,
+                    in boolean         withRequiredGroups) raises (SALOME::SALOME_Exception);
+    void ExportPartToDAT( in SMESH_IDSource meshPart, 
+                          in string         file ) raises (SALOME::SALOME_Exception);
+    void ExportPartToUNV( in SMESH_IDSource meshPart, 
+                          in string         file ) raises (SALOME::SALOME_Exception);
+    void ExportPartToSTL( in SMESH_IDSource meshPart,
+                          in string         file,
+                          in boolean        isascii ) raises (SALOME::SALOME_Exception);
+    /*!
+     * Return computation progress [0.,1]
+     */
+    double GetComputeProgress();
 
     /*!
-     * Get informations about mesh contents
+     * Get information about mesh contents
      */
     long NbNodes()
       raises (SALOME::SALOME_Exception);
@@ -371,36 +759,84 @@ module SMESH
     long NbElements()
       raises (SALOME::SALOME_Exception);
 
+    long Nb0DElements()
+      raises (SALOME::SALOME_Exception);
+
+    long NbBalls()
+      raises (SALOME::SALOME_Exception);
+
     long NbEdges()
       raises (SALOME::SALOME_Exception);
 
+    long NbEdgesOfOrder(in ElementOrder order)
+      raises (SALOME::SALOME_Exception);
+
     long NbFaces()
       raises (SALOME::SALOME_Exception);
 
+    long NbFacesOfOrder(in ElementOrder order)
+      raises (SALOME::SALOME_Exception);
+
     long NbTriangles()
       raises (SALOME::SALOME_Exception);
 
+    long NbTrianglesOfOrder(in ElementOrder order)
+      raises (SALOME::SALOME_Exception);
+
+    long NbBiQuadTriangles()
+      raises (SALOME::SALOME_Exception);
+
     long NbQuadrangles()
       raises (SALOME::SALOME_Exception);
 
+    long NbQuadranglesOfOrder(in ElementOrder order)
+      raises (SALOME::SALOME_Exception);
+
+    long NbBiQuadQuadrangles()
+      raises (SALOME::SALOME_Exception);
+
     long NbPolygons()
       raises (SALOME::SALOME_Exception);
 
+    long NbPolygonsOfOrder(in ElementOrder order)
+      raises (SALOME::SALOME_Exception);
+
     long NbVolumes()
       raises (SALOME::SALOME_Exception);
 
+    long NbVolumesOfOrder(in ElementOrder order)
+      raises (SALOME::SALOME_Exception);
+
     long NbTetras()
       raises (SALOME::SALOME_Exception);
 
+    long NbTetrasOfOrder(in ElementOrder order)
+      raises (SALOME::SALOME_Exception);
+
     long NbHexas()
       raises (SALOME::SALOME_Exception);
 
+    long NbHexasOfOrder(in ElementOrder order)
+      raises (SALOME::SALOME_Exception);
+
+    long NbTriQuadraticHexas()
+      raises (SALOME::SALOME_Exception);
+
     long NbPyramids()
       raises (SALOME::SALOME_Exception);
 
+    long NbPyramidsOfOrder(in ElementOrder order)
+      raises (SALOME::SALOME_Exception);
+
     long NbPrisms()
       raises (SALOME::SALOME_Exception);
 
+    long NbPrismsOfOrder(in ElementOrder order)
+      raises (SALOME::SALOME_Exception);
+
+    long NbHexagonalPrisms()
+      raises (SALOME::SALOME_Exception);
+
     long NbPolyhedrons()
       raises (SALOME::SALOME_Exception);
 
@@ -422,352 +858,245 @@ module SMESH
     ElementType GetElementType( in long id, in boolean iselem )
       raises (SALOME::SALOME_Exception);
 
+    EntityType GetElementGeomType( in long id )
+      raises (SALOME::SALOME_Exception);
+
+    GeometryType GetElementShape( in long id )
+      raises (SALOME::SALOME_Exception);
+
+    long_array GetSubMeshElementsId(in long ShapeID)
+      raises (SALOME::SALOME_Exception);
+
+    long_array GetSubMeshNodesId(in long ShapeID, in boolean all )
+      raises (SALOME::SALOME_Exception);
+    
+    ElementType GetSubMeshElementType(in long ShapeID)
+      raises (SALOME::SALOME_Exception);
+
+
+    /*!
+     * Methods to set meshing order of submeshes
+     */
+
+    /*!
+     * \brief Return \c true if a meshing order not yet set for a concurrent sub-mesh
+     */
+    boolean IsUnorderedSubMesh(in long submeshID);
+
+    /*!
+     * \brief Return submesh objects list in meshing order
+     */
+    submesh_array_array GetMeshOrder();
+
+    /*!
+     * \brief Set submesh object order
+     */
+    boolean SetMeshOrder(in submesh_array_array theSubMeshArray);
+
+
     /*!
      * Get mesh description
      */
     string Dump();
-  };
 
-  interface SMESH_subMesh : SALOME::GenericObj, SMESH_IDSource
-  {
     /*!
-     *
+     * Get mesh pointer
      */
-    long GetNumberOfElements()
-      raises (SALOME::SALOME_Exception);
+    long long GetMeshPtr();
 
     /*!
-     *
+     * Get XYZ coordinates of node as list of double
+     * If there is not node for given ID - returns empty list
      */
-    long GetNumberOfNodes( in boolean all )
-      raises (SALOME::SALOME_Exception);
+    double_array GetNodeXYZ(in long id);
 
     /*!
-     *
+     * For given node returns list of IDs of inverse elements
+     * If there is not node for given ID - returns empty list
      */
-    long_array GetElementsId()
-      raises (SALOME::SALOME_Exception);
+    long_array GetNodeInverseElements(in long id);
 
     /*!
-     *
+     * \brief Return position of a node on shape
      */
-    long_array GetElementsByType( in ElementType theType )
-      raises (SALOME::SALOME_Exception);
-    
+    NodePosition GetNodePosition(in long NodeID);
+
     /*!
-     * Return type of submesh element
+     * \brief Return position of an element on shape
      */
-    ElementType GetElementType( in long id, in boolean iselem )
-      raises (SALOME::SALOME_Exception);
+    ElementPosition GetElementPosition(in long ElemID);
 
     /*!
-     *
+     * If given element is node returns IDs of shape from position
+     * If there is not node for given ID - returns -1
      */
-    long_array GetNodesId()
-      raises (SALOME::SALOME_Exception);
+    long GetShapeID(in long id);
 
     /*!
-     * Get geom shape the submesh is dedicated to
+     * For given element returns ID of result shape after 
+     * ::FindShape() from SMESH_MeshEditor
+     * If there is not element for given ID - returns -1
      */
-    GEOM::GEOM_Object GetSubShape()
-      raises (SALOME::SALOME_Exception);
+    long GetShapeIDForElem(in long id);
 
     /*!
-     * Get SMESH_Mesh which stores nodes coordinates & elements definition
+     * Returns number of nodes for given element
+     * If there is not element for given ID - returns -1
      */
-    SMESH_Mesh GetFather()
-      raises (SALOME::SALOME_Exception);
+    long GetElemNbNodes(in long id);
 
     /*!
-     * Get the internal Id
+     * Returns IDs of nodes of given element
      */
-    long GetId();
+    long_array GetElemNodes(in long id);
 
     /*!
-     * Get MED subMesh
+     * Returns ID of node by given index for given element
+     * If there is not element for given ID - returns -1
+     * If there is not node for given index - returns -2
      */
-    SALOME_MED::FAMILY GetFamily()
-      raises (SALOME::SALOME_Exception);
-  };
+    long GetElemNode(in long id, in long index);
 
-  /*!
-   * This interface makes modifications on the Mesh - removing elements and nodes etc.
-   */
-  interface NumericalFunctor;
-  interface SMESH_MeshEditor
-  {
-    boolean RemoveElements(in long_array IDsOfElements);
+    /*!
+     * Returns true if given node is medium node
+     * in given quadratic element
+     */
+    boolean IsMediumNode(in long ide, in long idn);
+
+    /*!
+     * Returns true if given node is medium node
+     * in one of quadratic elements
+     */
+    boolean IsMediumNodeOfAnyElem(in long idn, in ElementType elem_type);
 
-    boolean RemoveNodes(in long_array IDsOfNodes);
+    /*!
+     * Returns number of edges for given element
+     */
+    long ElemNbEdges(in long id);
+
+    /*!
+     * Returns number of faces for given element
+     */
+    long ElemNbFaces(in long id);
 
-    boolean AddNode(in double x, in double y, in double z);
+    /*!
+     * Returns nodes of given face (counted from zero) for given volumic element.
+     */
+    long_array GetElemFaceNodes(in long elemId, in short faceIndex);
 
-    boolean AddEdge(in long_array IDsOfNodes);
+    /*!
+     * Returns three components of normal of given mesh face (or an empty array in KO case)
+     */
+    double_array GetFaceNormal(in long faceId, in boolean normalized);
 
-    boolean AddFace(in long_array IDsOfNodes);
+    /*!
+     * Returns an element based on all given nodes.
+     */
+    long FindElementByNodes(in long_array nodes);
 
-    boolean AddVolume(in long_array IDsOfNodes);
+    /*!
+     * Return elements including all given nodes.
+     */
+    long_array GetElementsByNodes(in long_array nodes, in ElementType elem_type);
 
     /*!
-     *  Create volume of many faces, giving nodes for each face.
-     *  \param IdsOfNodes List of node IDs for volume creation face by face.
-     *  \param Quantities List of integer values, Quantities[i]
-     *         gives quantity of nodes in face number i.
+     * Returns true if given element is polygon
      */
-    boolean AddPolyhedralVolume (in long_array IdsOfNodes,
-                                in long_array Quantities);
+    boolean IsPoly(in long id);
 
     /*!
-     *  Create volume of many faces, giving IDs of existing faces.
-     *  \param IdsOfFaces List of face IDs for volume creation.
-     *  \note The created volume will refer only to nodes
-     *        of the given faces, not to the faces itself.
+     * Returns true if given element is quadratic
      */
-    boolean AddPolyhedralVolumeByFaces (in long_array IdsOfFaces);
+    boolean IsQuadratic(in long id);
 
-    boolean MoveNode(in long NodeID, in double x, in double y, in double z);
+    /*!
+     * Returns diameter of a ball discrete element or zero in case of an invalid \a id
+     */
+    double GetBallDiameter(in long id);
 
-    boolean InverseDiag(in long NodeID1, in long NodeID2);
+    /*!
+     * Returns XYZ coordinates of bary center for given element
+     * as list of double
+     * If there is not element for given ID - returns empty list
+     */
+    double_array BaryCenter(in long id);
 
-    boolean DeleteDiag(in long NodeID1, in long NodeID2);
+    /*! Gets information about imported MED file */
+    MedFileInfo GetMEDFileInfo();
 
-    boolean Reorient(in long_array IDsOfElements);
+    /*!
+     *  Sets list of notebook variables used for Mesh operations separated by ":" symbol
+     *  \param theParameters is a string containing the notebook variables
+     */
+    void SetParameters (in string theParameters);
 
-    boolean ReorientObject(in SMESH_IDSource theObject);
+    /*!
+     *  Returns list of notebook variables used for Mesh operations separated by ":" symbol
+     */
+    string GetParameters();
 
     /*!
-     * \brief Fuse neighbour triangles into quadrangles.
-     * \param theElems     The triangles to be fused.
-     * \param theCriterion Is used to choose a neighbour to fuse with.
-     * \param theMaxAngle  Is a max angle between element normals at which fusion
-     *                     is still performed; theMaxAngle is mesured in radians.
-     * \return TRUE in case of success, FALSE otherwise.
+     *  Returns list of notebook variables used for last Mesh operation
      */
-    boolean TriToQuad (in long_array       IDsOfElements,
-                      in NumericalFunctor Criterion,
-                      in double           MaxAngle);
+    string_array GetLastParameters();
+  };
 
+  interface SMESH_subMesh : SALOME::GenericObj, SMESH_IDSource
+  {
     /*!
-     * \brief Fuse neighbour triangles into quadrangles.
      *
-     * Behaves like the above method, taking list of elements from \a theObject
      */
-    boolean TriToQuadObject (in SMESH_IDSource   theObject,
-                            in NumericalFunctor Criterion,
-                            in double           MaxAngle);
+    long GetNumberOfElements()
+      raises (SALOME::SALOME_Exception);
 
     /*!
-     * \brief Split quadrangles into triangles.
-     * \param theElems     The faces to be splitted.
-     * \param theCriterion Is used to choose a diagonal for splitting.
-     * \return TRUE in case of success, FALSE otherwise.
+     *
      */
-    boolean QuadToTri (in long_array       IDsOfElements,
-                      in NumericalFunctor Criterion);
+    long GetNumberOfNodes( in boolean all )
+      raises (SALOME::SALOME_Exception);
 
     /*!
-     * \brief Split quadrangles into triangles.
      *
-     * Behaves like the above method, taking list of elements from \a theObject
      */
-    boolean QuadToTriObject (in SMESH_IDSource   theObject,
-                            in NumericalFunctor Criterion);
+    long_array GetElementsId()
+      raises (SALOME::SALOME_Exception);
 
     /*!
-     * \brief Split quadrangles into triangles.
-     * \param theElems  The faces to be splitted.
-     * \param the13Diag Is used to choose a diagonal for splitting.
-     * \return TRUE in case of success, FALSE otherwise.
+     *
+     */
+    long_array GetElementsByType( in ElementType theType )
+      raises (SALOME::SALOME_Exception);
+    
+    /*!
+     * Returns type of mesh element (same as SMESH_Mesh::GetElementType() )
      */
-    boolean SplitQuad (in long_array IDsOfElements,
-                      in boolean    Diag13);
+    ElementType GetElementType( in long id, in boolean iselem )
+      raises (SALOME::SALOME_Exception);
 
     /*!
-     * \brief Split quadrangles into triangles.
      *
-     * Behaves like the above method, taking list of elements from \a theObject
-     */
-    boolean SplitQuadObject (in SMESH_IDSource theObject,
-                            in boolean        Diag13);
-
-    /*!
-     *  Find better splitting of the given quadrangle.
-     *  \param IDOfQuad  ID of the quadrangle to be splitted.
-     *  \param Criterion A criterion to choose a diagonal for splitting.
-     *  \return 1 if 1-3 diagonal is better, 2 if 2-4
-     *          diagonal is better, 0 if error occurs.
-     */
-    long BestSplit (in long             IDOfQuad,
-                   in NumericalFunctor Criterion);
-
-    enum Smooth_Method { LAPLACIAN_SMOOTH, CENTROIDAL_SMOOTH };
-
-    boolean Smooth(in long_array    IDsOfElements,
-                   in long_array    IDsOfFixedNodes,
-                   in long          MaxNbOfIterations,
-                   in double        MaxAspectRatio,
-                   in Smooth_Method Method);
-
-    boolean SmoothObject(in SMESH_IDSource  theObject,
-                        in long_array      IDsOfFixedNodes,
-                        in long            MaxNbOfIterations,
-                        in double          MaxAspectRatio,
-                        in Smooth_Method   Method);
-
-    boolean SmoothParametric(in long_array    IDsOfElements,
-                             in long_array    IDsOfFixedNodes,
-                             in long          MaxNbOfIterations,
-                             in double        MaxAspectRatio,
-                             in Smooth_Method Method);
-
-    boolean SmoothParametricObject(in SMESH_IDSource  theObject,
-                                   in long_array      IDsOfFixedNodes,
-                                   in long            MaxNbOfIterations,
-                                   in double          MaxAspectRatio,
-                                   in Smooth_Method   Method);
-
-    void RenumberNodes();
-
-    void RenumberElements();
-
-    void RotationSweep(in long_array       IDsOfElements,
-                       in AxisStruct       Axix,
-                       in double           AngleInRadians,
-                       in long             NbOfSteps,
-                       in double           Tolerance);
-
-    void RotationSweepObject(in SMESH_IDSource  theObject,
-                            in AxisStruct      Axix,
-                            in double          AngleInRadians,
-                            in long            NbOfSteps,
-                            in double          Tolerance);
-
-    void ExtrusionSweep(in long_array      IDsOfElements,
-                        in DirStruct       StepVector,
-                        in long            NbOfSteps);
-
-    void ExtrusionSweepObject(in SMESH_IDSource  theObject,
-                             in DirStruct       StepVector,
-                             in long            NbOfSteps);
-
-    void ExtrusionSweepObject1D(in SMESH_IDSource theObject,
-                               in DirStruct      StepVector,
-                               in long           NbOfSteps);
-
-    void ExtrusionSweepObject2D(in SMESH_IDSource theObject,
-                               in DirStruct      StepVector,
-                               in long           NbOfSteps);
-
-    enum Extrusion_Error {
-      EXTR_OK,
-      EXTR_NO_ELEMENTS,
-      EXTR_PATH_NOT_EDGE,
-      EXTR_BAD_PATH_SHAPE,
-      EXTR_BAD_STARTING_NODE,
-      EXTR_BAD_ANGLES_NUMBER,
-      EXTR_CANT_GET_TANGENT
-      };
-
-    Extrusion_Error ExtrusionAlongPath(in long_array        IDsOfElements,
-                                      in SMESH_Mesh        PathMesh,
-                                      in GEOM::GEOM_Object PathShape,
-                                      in long              NodeStart,
-                                      in boolean           HasAngles,
-                                      in double_array      Angles,
-                                      in boolean           HasRefPoint,
-                                      in PointStruct       RefPoint);
-
-    Extrusion_Error ExtrusionAlongPathObject(in SMESH_IDSource    theObject,
-                                            in SMESH_Mesh        PathMesh,
-                                            in GEOM::GEOM_Object PathShape,
-                                            in long              NodeStart,
-                                            in boolean           HasAngles,
-                                            in double_array      Angles,
-                                            in boolean           HasRefPoint,
-                                            in PointStruct       RefPoint);
-
-    enum MirrorType { POINT, AXIS, PLANE };
-
-    void Mirror (in long_array       IDsOfElements,
-                 in AxisStruct       Mirror,
-                 in MirrorType       theMirrorType,
-                 in boolean          Copy);
-
-    void MirrorObject (in SMESH_IDSource  theObject,
-                      in AxisStruct      Mirror,
-                      in MirrorType      theMirrorType,
-                      in boolean         Copy);
-
-    void Translate (in long_array      IDsOfElements,
-                    in DirStruct       Vector,
-                    in boolean         Copy);
-
-    void TranslateObject (in SMESH_IDSource  theObject,
-                         in DirStruct       Vector,
-                         in boolean         Copy);
-
-    void Rotate (in long_array       IDsOfElements,
-                 in AxisStruct       Axis,
-                 in double           AngleInRadians,
-                 in boolean          Copy);
-
-    void RotateObject (in SMESH_IDSource  theObject,
-                      in AxisStruct      Axis,
-                      in double          AngleInRadians,
-                      in boolean         Copy);
-
-    void FindCoincidentNodes (in  double              Tolerance,
-                              out array_of_long_array GroupsOfNodes);
-
-    void MergeNodes (in array_of_long_array GroupsOfNodes);
-
-    void MergeEqualElements();
-
-    enum Sew_Error {
-      SEW_OK,
-      SEW_BORDER1_NOT_FOUND,
-      SEW_BORDER2_NOT_FOUND,
-      SEW_BOTH_BORDERS_NOT_FOUND,
-      SEW_BAD_SIDE_NODES,
-      SEW_VOLUMES_TO_SPLIT,
-      // for SewSideElements() only:
-      SEW_DIFF_NB_OF_ELEMENTS,
-      SEW_TOPO_DIFF_SETS_OF_ELEMENTS,
-      SEW_BAD_SIDE1_NODES,
-      SEW_BAD_SIDE2_NODES
-      };
-
-    Sew_Error SewFreeBorders (in long FirstNodeID1,
-                              in long SecondNodeID1,
-                              in long LastNodeID1,
-                              in long FirstNodeID2,
-                              in long SecondNodeID2,
-                              in long LastNodeID2,
-                             in boolean CreatePolygons,
-                             in boolean CreatePolyedrs);
-
-    Sew_Error SewConformFreeBorders (in long FirstNodeID1,
-                                     in long SecondNodeID1,
-                                     in long LastNodeID1,
-                                     in long FirstNodeID2,
-                                     in long SecondNodeID2);
-
-    Sew_Error SewBorderToSide (in long FirstNodeIDOnFreeBorder,
-                               in long SecondNodeIDOnFreeBorder,
-                               in long LastNodeIDOnFreeBorder,
-                               in long FirstNodeIDOnSide,
-                               in long LastNodeIDOnSide,
-                              in boolean CreatePolygons,
-                              in boolean CreatePolyedrs);
-
-    Sew_Error SewSideElements (in long_array IDsOfSide1Elements,
-                               in long_array IDsOfSide2Elements,
-                               in long       NodeID1OfSide1ToMerge,
-                               in long       NodeID1OfSide2ToMerge,
-                               in long       NodeID2OfSide1ToMerge,
-                               in long       NodeID2OfSide2ToMerge);
+     */
+    long_array GetNodesId()
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Get geom shape the submesh is dedicated to
+     */
+    GEOM::GEOM_Object GetSubShape()
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Get SMESH_Mesh which stores nodes coordinates & elements definition
+     */
+    SMESH_Mesh GetFather()
+      raises (SALOME::SALOME_Exception);
 
+    /*!
+     * Get the internal Id
+     */
+    long GetId();
   };
+
 };
 
 #endif