Salome HOME
0020501: EDF 1098 SMESH: Display only groups, edit a group: can't select face from...
[modules/smesh.git] / idl / SMESH_Mesh.idl
index b2c5813b59d3f0a58fd1a6242652b4805d20fa41..fff0c51208e520826e4de5c40fdcfa9b16f73936 100644 (file)
@@ -1,56 +1,75 @@
-//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
-// 
-//  This library is free software; you can redistribute it and/or 
-//  modify it under the terms of the GNU Lesser General Public 
-//  License as published by the Free Software Foundation; either 
-//  version 2.1 of the License. 
-// 
-//  This library is distributed in the hope that it will be useful, 
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-//  Lesser General Public License for more details. 
-// 
-//  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 
+//  Copyright (C) 2007-2008  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
 //
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 //  File   : SMESH_Mesh.idl
 //  Author : Paul RASCLE, EDF
-//  $Header$
+//
 
 #ifndef _SMESH_MESH_IDL_
 #define _SMESH_MESH_IDL_
 
 #include "SALOME_Exception.idl"
-#include "SMESH_Hypothesis.idl"
-
-#include "GEOM_Shape.idl"
+#include "SALOME_GenericObj.idl"
+#include "GEOM_Gen.idl"
 #include "MED.idl"
 
 module SMESH
 {
-  typedef sequence<double> double_array ;
-  typedef sequence<long> long_array ;
-  typedef sequence<string> string_array ;
+  interface SMESH_Hypothesis;
+  typedef sequence<SMESH_Hypothesis> ListOfHypothesis;
+  interface SMESH_GroupBase;
+  typedef sequence<SMESH_GroupBase> ListOfGroups;
+
+  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
     {
       ADD_NODE,
+      ADD_ELEM0D,
       ADD_EDGE,
       ADD_TRIANGLE,
       ADD_QUADRANGLE,
+      ADD_POLYGON,
       ADD_TETRAHEDRON,
       ADD_PYRAMID,
       ADD_PRISM,
       ADD_HEXAHEDRON,
+      ADD_POLYHEDRON,
       REMOVE_NODE,
       REMOVE_ELEMENT,
-         REMOVE_ALL
+      MOVE_NODE,
+      CHANGE_ELEMENT_NODES,
+      CHANGE_POLYHEDRON_NODES,
+      RENUMBER,
+      CLEAR_MESH,
+      ADD_QUADEDGE,
+      ADD_QUADTRIANGLE,
+      ADD_QUADQUADRANGLE,
+      ADD_QUADTETRAHEDRON,
+      ADD_QUADPYRAMID,
+      ADD_QUADPENTAHEDRON,
+      ADD_QUADHEXAHEDRON
     };
 
   struct log_block
@@ -60,34 +79,346 @@ module SMESH
     double_array coords;
     long_array indexes;
   };
+
+  struct PointStruct { double x;
+                      double y;
+                      double z; } ;
+
+  typedef sequence<PointStruct> nodes_array;
+
+  struct DirStruct   { PointStruct PS ; } ;          // analog to Occ Direction
+
+  struct AxisStruct  { double x;
+                      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
+  };
+
+  /*!
+   * Enumeration for element type, like in SMDS
+   */
+  enum ElementType
+  {
+    ALL,
+    NODE,
+    EDGE,
+    FACE,
+    VOLUME,
+    ELEM0D
+  };
+
+  /*!
+   * Enumeration for element geometry type, like in SMDS
+   */
+  enum GeometryType
+  {
+    Geom_POINT,
+    Geom_EDGE,
+    Geom_TRIANGLE,
+    Geom_QUADRANGLE,
+    Geom_POLYGON,
+    Geom_TETRA,
+    Geom_PYRAMID,
+    Geom_HEXA,
+    Geom_PENTA,
+    Geom_POLYHEDRA
+  };
   
+  /*!
+   * 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 uses in mesh info array,
+   *  and should be synchronised with enum in SMDS  
+   */
+  enum EntityType
+  {
+    Entity_Node,
+    Entity_0D,
+    Entity_Edge,
+    Entity_Quad_Edge,
+    Entity_Triangle,
+    Entity_Quad_Triangle,
+    Entity_Quadrangle,
+    Entity_Quad_Quadrangle,
+    Entity_Polygon,
+    Entity_Quad_Polygon,
+    Entity_Tetra,
+    Entity_Quad_Tetra,
+    Entity_Pyramid,
+    Entity_Quad_Pyramid,
+    Entity_Hexa,
+    Entity_Quad_Hexa,
+    Entity_Penta,
+    Entity_Quad_Penta,
+    Entity_Polyhedra,
+    Entity_Quad_Polyhedra,
+    Entity_Last
+  };
+
+
+  /*!
+   * Enumeration for hypothesis status (used by AddHypothesis() and RemoveHypothesis() methods)
+   */
+  enum Hypothesis_Status // in the order of severity
+  {
+    HYP_OK,
+    HYP_MISSING,      // algo misses a hypothesis
+    HYP_CONCURENT,    // 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_SUBSHAPE, // shape is neither the main one, nor its subshape, nor a group
+    HYP_BAD_GEOMETRY, // geometry mismatches algorithm's expectation
+    HYP_NEED_SHAPE    // algorithm can work on shape only
+  };
+
+  /*!
+   * Enumeration for DriverMED read status (used by ImportMEDFile() method)
+   */
+  enum DriverMED_ReadStatus // in the order of severity
+  {
+    DRS_OK,
+    DRS_EMPTY,          // a MED 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_FAIL            // general failure (exception etc.)
+  };
+
+  /*!
+   * Enumeration for DriverMED (used by Perform() method)
+   */
+  enum MED_VERSION // in the order of severity
+  {
+    MED_V2_1,
+    MED_V2_2
+  };
+
   typedef sequence<log_block> log_array;
 
+
+  /*!
+   * Auxilary 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_IDSource
+  {
+    /*!
+     * Returns a sequence of all element IDs
+     */
+    long_array GetIDs();
+
+    /*!
+     * Returns statistic of mesh elements
+     * Result array of number enityties
+     */
+    long_array GetMeshInfo();
+  };
+
+  interface SMESH_Group;
+  interface SMESH_GroupOnGeom;
   interface SMESH_subMesh;
   interface SMESH_MeshEditor;
-  interface SMESH_Mesh
+  interface SMESH_Mesh : SALOME::GenericObj, SMESH_IDSource
   {
     /*!
-     * Associate a Shape to a Mesh created with NewEmpty
+     * Return true if there is a geometry to be meshed
+     */
+    boolean HasShapeToMesh()
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Get geom shape to mesh. A result sould not be nil. Use HasShapeToMesh()
+     * to know if a returned shape 
      */
+    GEOM::GEOM_Object GetShapeToMesh()
+      raises (SALOME::SALOME_Exception);
 
-//     boolean SetMesh(in GEOM::GEOM_Shape aShape)
-//        raises (SALOME::SALOME_Exception);
+    /*!
+     * Remove all nodes and elements
+     */
+    void Clear()
+      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 subShape. The subMesh object
      * gives access to nodes and elements IDs.
-     * SubMesh will be used instead of SubShape in a next idl version to 
+     * SubMesh will be used instead of SubShape in a next idl version to
      * adress a specific subMesh...
      */
-    SMESH_subMesh GetElementsOnShape(in GEOM::GEOM_Shape aSubShape)
+    SMESH_subMesh GetSubMesh(in GEOM::GEOM_Object aSubObject, in string name)
       raises (SALOME::SALOME_Exception);
 
     /*!
-     * Create a subMesh without reference to a subShape
+     * Remove a submesh
      */
-//     SMESH_subMesh NewEmpty()
-//       raises (SALOME::SALOME_Exception);
+    void RemoveSubMesh(in SMESH_subMesh aSubMesh)
+      raises (SALOME::SALOME_Exception);
+
+
+    /*!
+     * Create a group
+     */
+    SMESH_Group CreateGroup( in ElementType elem_type,
+                            in string name )
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Create a group from geometry group
+     */
+    SMESH_GroupOnGeom CreateGroupFromGEOM( in ElementType elem_type,
+                                          in string name,
+                                          in GEOM::GEOM_Object theGeomObject )
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Remove a group
+     */
+    void RemoveGroup(in SMESH_GroupBase aGroup)
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     *  Remove group with its contents
+     */
+    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
+     *    present in initial groups are added to the new one
+     */
+    SMESH_Group UnionGroups (in SMESH_GroupBase aGroup1,
+                             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
+     *  New group is created. All mesh elements that are
+     *  present in both initial groups are added to the new one.
+     */
+    SMESH_Group IntersectGroups (in SMESH_GroupBase aGroup1,
+                                 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
+     *  New group is created. All mesh elements that are present in
+     *  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 )
+      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 groups of entities from existing groups of superior dimensions 
+     *  New group is created. System 
+     *  1) extracts all nodes from each group,
+     *  2) combines all elements of specified dimension laying on these nodes.
+     */
+    SMESH_Group CreateDimGroup( in ListOfGroups aListOfGroups,
+                                in ElementType  anElemType,
+                                in string       name )
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Convert group on geometry into standalone group
+     */
+    SMESH_Group ConvertToStandalone( in SMESH_GroupOnGeom theGeomGroup )
+      raises (SALOME::SALOME_Exception);
 
     /*!
      * Add hypothesis to the mesh, under a particular subShape
@@ -98,25 +429,25 @@ module SMESH
      * @params
      * - aSubShape : subShape obtained by a shape explode in GEOM
      *   (or main shape)
-     * - anHyp : hypothesis object 
+     * - anHyp : hypothesis object
      * @return
-     * - OK if the hypothesis is compatible with the subShape 
+     * - 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
      */
-    boolean AddHypothesis(in GEOM::GEOM_Shape aSubShape, in SMESH_Hypothesis anHyp)
+    Hypothesis_Status AddHypothesis(in GEOM::GEOM_Object aSubObject,
+                                   in SMESH_Hypothesis anHyp)
       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.
      */
-    boolean RemoveHypothesis(in GEOM::GEOM_Shape aSubShape,
-                            in SMESH_Hypothesis anHyp)
+    Hypothesis_Status RemoveHypothesis(in GEOM::GEOM_Object aSubObject,
+                                      in SMESH_Hypothesis anHyp)
       raises (SALOME::SALOME_Exception);
 //     boolean RemoveHypothesis(in SMESH_subMesh aSubMesh,
 //                          in SMESH_Hypothesis anHyp)
@@ -125,7 +456,7 @@ module SMESH
     /*!
      * Get the list of hypothesis added on a subShape
      */
-    ListOfHypothesis GetHypothesisList(in GEOM::GEOM_Shape aSubShape)
+    ListOfHypothesis GetHypothesisList(in GEOM::GEOM_Object aSubObject)
       raises (SALOME::SALOME_Exception);
 //     ListOfHypothesis GetHypothesisList(in SMESH_subMesh aSubMesh)
 //       raises (SALOME::SALOME_Exception);
@@ -149,24 +480,80 @@ module SMESH
       raises (SALOME::SALOME_Exception);
 
     /*!
-     * Get the internal Id 
+     * Toggle auto color mode on the object.
+     * @params
+     * - theAutoColor : flag which toggles auto color mode.
      */
-    long GetId();     
+    void SetAutoColor(in boolean theAutoColor)
+      raises (SALOME::SALOME_Exception);
 
     /*!
-     * Get the study Id 
+     * Get flag of object's auto color mode.
      */
-    long GetStudyId();    
-    
-    SMESH_MeshEditor GetMeshEditor() 
-       raises (SALOME::SALOME_Exception);
+    boolean GetAutoColor()
+      raises (SALOME::SALOME_Exception);
 
     /*!
-     * Export mesh to a file
-        * @param fileName file name where to export the file
-        * @param fileType Currently it could be either "DAT", "UNV" or "MED".
+     * Get the internal Id
      */
-    void Export( in string fileName, in string fileType )
+    long GetId();
+
+    /*!
+     * Get the study Id
+     */
+    long GetStudyId();
+
+    /*!
+     * Obtain instance of SMESH_MeshEditor
+     */
+    SMESH_MeshEditor GetMeshEditor()
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Return SMESH_MeshEditor that would not modify the mesh but
+     * fill MeshPreviewStruct
+     */
+    SMESH_MeshEditor GetMeshEditPreviewer()
+      raises (SALOME::SALOME_Exception);
+
+    /*! Check group names for duplications.
+     *  Consider maximum group name length stored in MED file.
+     */
+    boolean HasDuplicatedGroupNamesMED();
+
+    /*!
+     * Export Mesh to different MED Formats
+     * @params
+     * - 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
+     */
+    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.
+     * The method is kept in order to support old functionality
+     */
+    void ExportMED( in string file, in boolean auto_groups )
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Return string representation of a MED file version comprising nbDigits
+     */
+    string GetVersionString(in MED_VERSION version, in short nbDigits);
+
+    /*!
+     * Export Mesh to DAT, UNV and STL 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);
 
     /*!
@@ -175,60 +562,266 @@ module SMESH
     SALOME_MED::MESH GetMEDMesh()
       raises (SALOME::SALOME_Exception);
 
+    /*!
+     * Get informations about mesh contents
+     */
     long NbNodes()
       raises (SALOME::SALOME_Exception);
 
+    long NbElements()
+      raises (SALOME::SALOME_Exception);
+
+    long Nb0DElements()
+      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 NbQuadrangles()
       raises (SALOME::SALOME_Exception);
 
+    long NbQuadranglesOfOrder(in ElementOrder order)
+      raises (SALOME::SALOME_Exception);
+
+    long NbPolygons()
+      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 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 NbPolyhedrons()
+      raises (SALOME::SALOME_Exception);
+
     long NbSubMesh()
       raises (SALOME::SALOME_Exception);
+
+    long_array GetElementsId()
+      raises (SALOME::SALOME_Exception);
+
+    long_array GetElementsByType( in ElementType theType )
+      raises (SALOME::SALOME_Exception);
+
+    long_array GetNodesId()
+      raises (SALOME::SALOME_Exception);
+    
+    /*!
+     * Returns type of mesh element
+     */    
+    ElementType GetElementType( in long id, in boolean iselem )
+      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);
+
+    /*!
+     * Get mesh description
+     */
+    string Dump();
+
+    /*!
+     * Get mesh pointer
+     */
+    long long GetMeshPtr();
+
+    /*!
+     * Get XYZ coordinates of node as list of double
+     * If there is not node for given ID - returns empty list
+     */
+    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 GetNodeInverseElements(in long id);
+
+    /*!
+     * \brief Return position of a node on shape
+     */
+    NodePosition GetNodePosition(in long NodeID);
+
+    /*!
+     * If given element is node returns IDs of shape from position
+     * If there is not node for given ID - returns -1
+     */
+    long GetShapeID(in long id);
+
+    /*!
+     * For given element returns ID of result shape after 
+     * ::FindShape() from SMESH_MeshEditor
+     * If there is not element for given ID - returns -1
+     */
+    long GetShapeIDForElem(in long id);
+
+    /*!
+     * Returns number of nodes for given element
+     * If there is not element for given ID - returns -1
+     */
+    long GetElemNbNodes(in long id);
+
+    /*!
+     * Returns IDs of nodes of given element
+     */
+    long_array GetElemNodes(in long id);
+
+    /*!
+     * 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
+     */
+    long GetElemNode(in long id, in long index);
+
+    /*!
+     * 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);
+
+    /*!
+     * Returns number of edges for given element
+     */
+    long ElemNbEdges(in long id);
+
+    /*!
+     * Returns number of faces for given element
+     */
+    long ElemNbFaces(in long id);
+
+    /*!
+     * Returns true if given element is polygon
+     */
+    boolean IsPoly(in long id);
+
+    /*!
+     * Returns true if given element is quadratic
+     */
+    boolean IsQuadratic(in long id);
+
+    /*!
+     * 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);
+
+    /*! Gets information about imported MED file */
+    SALOME_MED::MedFileInfo GetMEDFileInfo();
+
+    /*!
+     *  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);
+
+    /*!
+     *  Returns list of notebook variables used for Mesh operations separated by ":" symbol
+     */
+    string GetParameters();
+
+    /*!
+     *  Returns list of notebook variables used for last Mesh operation
+     */
+    string_array GetLastParameters();
   };
 
-  interface SMESH_subMesh
+  interface SMESH_subMesh : SALOME::GenericObj, SMESH_IDSource
   {
     /*!
-     * 
+     *
      */
     long GetNumberOfElements()
       raises (SALOME::SALOME_Exception);
 
     /*!
-     * 
+     *
      */
-    long GetNumberOfNodes()
+    long GetNumberOfNodes( in boolean all )
       raises (SALOME::SALOME_Exception);
 
     /*!
-     * 
+     *
      */
     long_array GetElementsId()
       raises (SALOME::SALOME_Exception);
 
     /*!
-     * 
+     *
+     */
+    long_array GetElementsByType( in ElementType theType )
+      raises (SALOME::SALOME_Exception);
+    
+    /*!
+     * Return type of submesh element
+     */
+    ElementType GetElementType( in long id, in boolean iselem )
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     *
      */
     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
      */
@@ -236,9 +829,9 @@ module SMESH
       raises (SALOME::SALOME_Exception);
 
     /*!
-     * Get the internal Id 
+     * Get the internal Id
      */
-    long GetId();    
+    long GetId();
 
     /*!
      * Get MED subMesh
@@ -246,31 +839,7 @@ module SMESH
     SALOME_MED::FAMILY GetFamily()
       raises (SALOME::SALOME_Exception);
   };
-  
-  /* 
-   * This interface makes modifications on the Mesh - removing elements and nodes
-   */     
-  interface SMESH_MeshEditor {
-
-
-    boolean RemoveElements(in long_array IDsOfElements)
-       raises (SALOME::SALOME_Exception);
-
-    boolean RemoveNodes(in long_array IDsOfNodes)
-      raises (SALOME::SALOME_Exception);
 
-    boolean AddNode(in double x, in double y, in double z)
-      raises (SALOME::SALOME_Exception);
-
-    boolean AddEdge(in long_array IDsOfNodes)
-      raises (SALOME::SALOME_Exception);
-
-    boolean AddFace(in long_array IDsOfNodes)
-      raises (SALOME::SALOME_Exception);
-
-    boolean AddVolume(in long_array IDsOfNodes)
-      raises (SALOME::SALOME_Exception);
-  };
 };
 
 #endif