Salome HOME
#24666 [CEA][Windows] BLSURPLUGIN compilation issue
[modules/smesh.git] / idl / SMESH_Mesh.idl
index b8d2b5e63e3a822a72ad65543e9c67d750fb999d..7ee04ecee2b6a5ad40b2345c49073d7544242631 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2021  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
@@ -29,7 +29,7 @@
 #include "SALOME_Exception.idl"
 #include "SALOME_GenericObj.idl"
 #include "GEOM_Gen.idl"
-#include "MED.idl"
+#include "SMESH_smIdType.idl"
 
 module SMESH
 {
@@ -42,6 +42,7 @@ module SMESH
 
   typedef sequence<double    > double_array ;
   typedef sequence<long      > long_array ;
+  typedef sequence<smIdType  > smIdType_array ;
   typedef sequence<string    > string_array ;
   typedef sequence<long_array> array_of_long_array ;
 
@@ -67,11 +68,13 @@ module SMESH
       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,
@@ -85,22 +88,22 @@ module SMESH
     double_array coords;
     long_array indexes;
   };
+  typedef sequence<log_block> log_array;
 
   struct PointStruct { double x;
-                      double y;
-                      double z; } ;
+                       double y;
+                       double z; };
 
   typedef sequence<PointStruct> nodes_array;
 
-  struct DirStruct   { PointStruct PS ; } ;          // analog to Occ Direction
+  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
    */
@@ -110,6 +113,14 @@ module SMESH
     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
    */
@@ -121,12 +132,13 @@ module SMESH
     FACE,
     VOLUME,
     ELEM0D,
-    BALL
+    BALL,
+    NB_ELEMENT_TYPES
   };
-  typedef sequence<ElementType> array_of_ElementType ;
+  typedef sequence<ElementType> array_of_ElementType;
 
   /*!
-   * Enumeration for element geometry type, like in SMDS
+   * Enumeration for element geometry type, like SMDSAbs_GeometryType in SMDSAbs_ElementType.hxx
    */
   enum GeometryType
   {
@@ -141,7 +153,8 @@ module SMESH
     Geom_PENTA,
     Geom_HEXAGONAL_PRISM,
     Geom_POLYHEDRA,
-    Geom_BALL
+    Geom_BALL,
+    Geom_LAST
   };
   
   /*!
@@ -153,7 +166,6 @@ module SMESH
     ORDER_QUADRATIC     /*! entities of 2nd order */
   };
 
-
   /*!
    * Enumeration of entity type used in mesh info array,
    * it should be synchronised with enum SMDSAbs_EntityType
@@ -166,6 +178,7 @@ module SMESH
     Entity_Quad_Edge,
     Entity_Triangle,
     Entity_Quad_Triangle,
+    Entity_BiQuad_Triangle,
     Entity_Quadrangle,
     Entity_Quad_Quadrangle,
     Entity_BiQuad_Quadrangle,
@@ -180,6 +193,7 @@ module SMESH
     Entity_TriQuad_Hexa,
     Entity_Penta,
     Entity_Quad_Penta,
+    Entity_BiQuad_Penta,
     Entity_Hexagonal_Prism,
     Entity_Polyhedra,
     Entity_Quad_Polyhedra,
@@ -187,7 +201,6 @@ module SMESH
     Entity_Last
   };
 
-
   /*!
    * Enumeration for hypothesis status (used by AddHypothesis() and RemoveHypothesis() methods)
    */
@@ -195,48 +208,56 @@ 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_NOTCONFORM,   // not conform mesh is produced applying 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 sub-shape, nor a group
     HYP_BAD_GEOMETRY, // geometry mismatches algorithm's expectation
-    HYP_NEED_SHAPE    // algorithm can work on shape only
+    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_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.)
+    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)
+  /*! 
+   * \brief A structure containing information about MED file
    */
-  enum MED_VERSION // in the order of severity
+  struct MedFileInfo
   {
-    MED_V2_1,
-    MED_V2_2
+    string fileName; //!< name of file
+    long   fileSize; //!< size of file
+    long   major, minor, release; //!< MED file version
   };
 
-  typedef sequence<log_block> log_array;
-
+  /*!
+   * Enumeration for CreateDimGroup()
+   */
+  enum NB_COMMON_NODES_ENUM
+  {
+    ALL_NODES, MAIN, AT_LEAST_ONE, MAJORITY
+  };
 
   /*!
-   * Auxilary flags for advanced extrusion.
+   * 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
    */
@@ -248,7 +269,7 @@ module SMESH
    */
   struct ElementSubType { ElementType SMDS_ElementType;
                           boolean     isPoly;
-                          long        nbNodesInElement; };
+                          short       nbNodesInElement; };
 
   typedef sequence<ElementSubType> types_array;
 
@@ -261,18 +282,24 @@ module SMESH
 
   interface SMESH_Mesh;
 
-  interface SMESH_IDSource
+  interface SMESH_IDSource : SALOME::GenericObj
   {
     /*!
      * Returns a sequence of all element IDs
      */
-    long_array GetIDs();
+    smIdType_array GetIDs();
+
+    /*!
+     * Returns number of mesh elements of each \a EntityType
+     * @return array of number of elements per \a EntityType
+     */
+    smIdType_array GetMeshInfo();
 
     /*!
-     * Returns statistic of mesh elements
-     * @return array of number enityties by index of EntityType
+     * Returns number of mesh elements of each \a ElementType
+     * @return array of number of elements per \a ElementType
      */
-    long_array GetMeshInfo();
+    smIdType_array GetNbElementsByType();
 
     /*!
      * Returns types of elements it contains.
@@ -290,6 +317,11 @@ module SMESH
      * 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_Group;
@@ -302,7 +334,7 @@ module SMESH
   typedef sequence<SMESH_subMesh>     submesh_array;
   typedef sequence<submesh_array>     submesh_array_array;
 
-  interface SMESH_Mesh : SALOME::GenericObj, SMESH_IDSource
+  interface SMESH_Mesh : SMESH_IDSource
   {
     /*!
      * Return true if there is a geometry to be meshed
@@ -311,12 +343,18 @@ module SMESH
       raises (SALOME::SALOME_Exception);
 
     /*!
-     * Get geom shape to mesh. A result sould not be nil. Use HasShapeToMesh()
+     * Get geom shape to mesh. A result should not be nil. Use HasShapeToMesh()
      * to know if a returned shape 
      */
     GEOM::GEOM_Object GetShapeToMesh()
       raises (SALOME::SALOME_Exception);
 
+    /*!
+     * Replaces a shape in the mesh
+     */
+    void ReplaceShape(in GEOM::GEOM_Object theNewGeom)
+      raises (SALOME::SALOME_Exception);
+
     /*!
      * Return false if the mesh is not yet fully loaded from the study file
      */
@@ -351,7 +389,7 @@ module SMESH
      * 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
-     * adress a specific subMesh...
+     * address a specific subMesh...
      */
     SMESH_subMesh GetSubMesh(in GEOM::GEOM_Object aSubObject, in string name)
       raises (SALOME::SALOME_Exception);
@@ -367,7 +405,7 @@ module SMESH
      * Create a group
      */
     SMESH_Group CreateGroup( in ElementType elem_type,
-                            in string      name )
+                             in string      name )
       raises (SALOME::SALOME_Exception);
 
     /*!
@@ -469,14 +507,35 @@ module SMESH
       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.
+     *  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);
+
+    /*!
+     * Distribute all faces of the mesh among groups using sharp edges and optionally
+     * existing 1D elements as group boundaries.
+     *  \param [in] sharpAngle - edge is considered sharp if an angle between normals of
+     *              adjacent faces is more than \a sharpAngle in degrees.
+     *  \param [in] createEdges - to create 1D elements for detected sharp edges.
+     *  \param [in] useExistingEdges - to use existing edges as group boundaries
+     *  \return ListOfGroups - the created groups
      */
-    SMESH_Group CreateDimGroup( in ListOfGroups aListOfGroups,
-                                in ElementType  anElemType,
-                                in string       name )
+    ListOfGroups FaceGroupsSeparatedByEdges( in double  sharpAngle,
+                                             in boolean createEdges,
+                                             in boolean useExistingEdges )
       raises (SALOME::SALOME_Exception);
 
     /*!
@@ -486,45 +545,36 @@ module SMESH
       raises (SALOME::SALOME_Exception);
 
     /*!
-     * Add hypothesis to the mesh, under a particular Sub-shape
+     * 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 : sub-shape 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 sub-shape
-     *   (and all previous hypothesis on the sub-shape)
-     * - NOK if the hypothesis is not compatible with the sub-shape
-     *   (or one previous hypothesis on the sub-shape)
-     * 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 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
@@ -532,8 +582,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);
 
@@ -563,11 +611,6 @@ module SMESH
      */
     long GetId();
 
-    /*!
-     * Get the study Id
-     */
-    long GetStudyId();
-
     /*!
      * Obtain instance of SMESH_MeshEditor
      */
@@ -594,50 +637,82 @@ module SMESH
     boolean HasDuplicatedGroupNamesMED();
 
     /*!
-     * Export Mesh to different MED Formats
+     * Export a Mesh to MED file.
      * @params
-     * - file : name of the MED file
+     * - fileName : 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.
-     * - version : 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.
      * - overwrite : boolean parameter for overwriting/not overwriting the file, if it exists
-     */
-    void ExportToMEDX( in string      file, 
-                       in boolean     auto_groups, 
-                       in MED_VERSION version, 
-                       in boolean     overwrite ) raises (SALOME::SALOME_Exception);
-
-    /*!
-     * Export a part of Mesh into a MED file
+     * - version : define the version of MED file format, coded with major and minor digits (release digit not used)
+     *           for instance med 3.2.1 is coded 3*10+2 = 32, med 4.0.0 is coded 4*10+0 = 40.
+     *           The rules of compatibility to write a mesh in an older version than the current version
+     *           depend on the current version. For instance, with med 4.0 it is possible to write/append
+     *           med files in 4.0.0 (default format) or 3.2.1 or 3.3.1 formats.
+     *           The minor must be between 0 and the current minor version of MED file library.
+     *           If version is equal to -1, the version is not changed (default).
+     * - 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 ExportMED( in string  fileName,
+                   in boolean auto_groups,
+                   in long    version,
+                   in boolean overwrite,
+                   in boolean autoDimension) raises (SALOME::SALOME_Exception);
+
+    long long ExportMEDCoupling(in boolean auto_groups,
+                                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
+     * - fileName : name of the MED file
      * - overwrite : boolean parameter for overwriting/not overwriting the file, if it exists
-     */
-    void ExportPartToMED( in SMESH_IDSource meshPart, 
-                          in string         file, 
-                          in boolean        auto_groups,
-                          in MED_VERSION    version,
-                          in boolean        overwrite ) raises (SALOME::SALOME_Exception);
-
-    /*!
-     * Export Mesh to different MED Formats
-     * 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 ExportToMEDX with MED_VERSION parameter equal to MED_V2_1
-     * 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);
+     * - version : define the version of MED file format, coded with major and minor digits (release digit not used)
+     *           for instance med 3.2.1 is coded 3*10+2 = 32, med 4.0.0 is coded 4*10+0 = 40.
+     *           The rules of compatibility to write a mesh in an older version than the current version
+     *           depend on the current version. For instance, with med 4.0 it is possible to write/append
+     *           med files in 4.0.0 (default format) or 3.2.1 or 3.3.1 formats.
+     *           The minor must be between 0 and the current minor version of MED file library.
+     *           If version is equal to -1, the version is not changed (default).
+     * - 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.
+     * - ZTolerance : tolerance in Z direction. If Z coordinate of a node is close to zero
+     *                within a given tolerance, the coordinate is set to zero.
+     *                If @a ZTolerance is negative, the node coordinates are kept as is.
+     * - saveNumbers : enable saving numbers of nodes and cells.
+     */
+    void ExportPartToMED( in SMESH_IDSource     meshPart,
+                          in string             fileName,
+                          in boolean            auto_groups,
+                          in long               version,
+                          in boolean            overwrite,
+                          in boolean            autoDimension,
+                          in GEOM::ListOfFields fields,
+                          in string             geomAssocFields,
+                          in double             ZTolerance,
+                          in boolean            saveNumbers) raises (SALOME::SALOME_Exception);
+
+    long long ExportPartToMEDCoupling( in SMESH_IDSource     meshPart,
+                                       in boolean            auto_groups,
+                                       in boolean            autoDimension,
+                                       in GEOM::ListOfFields fields,
+                                       in string             geomAssocFields,
+                                       in double             ZTolerance,
+                                       in boolean            saveNumbers) raises (SALOME::SALOME_Exception);
 
     /*!
      * Export Mesh to SAUV formatted file
@@ -645,148 +720,167 @@ module SMESH
      */
     void ExportSAUV( 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);
-
+    string GetVersionString(in long minor, in short nbDigits);
+    
+    /*!
+     *  Return the list of med versions compatibles for write/append,
+     *  encoded in 10*major+minor (for instance, code for med 3.2.1 is 32)
+     */
+    long_array GetMEDVersionsCompatibleForAppend();
+    
     /*!
      * 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 ExportDAT( in string  file,
+                    in boolean renumer) raises (SALOME::SALOME_Exception);
+    void ExportUNV( in string  file,
+                    in boolean renumer ) 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 ) raises (SALOME::SALOME_Exception);
+                     in boolean        overwrite,
+                     in boolean        groupElemsByType) raises (SALOME::SALOME_Exception);
     void ExportGMF( in SMESH_IDSource  meshPart, 
-                    in string          file ) raises (SALOME::SALOME_Exception);
+                    in string          file,
+                    in boolean         withRequiredGroups) raises (SALOME::SALOME_Exception);
     void ExportPartToDAT( in SMESH_IDSource meshPart, 
-                          in string         file ) raises (SALOME::SALOME_Exception);
+                          in string         file,
+                          in boolean        renumer ) raises (SALOME::SALOME_Exception);
     void ExportPartToUNV( in SMESH_IDSource meshPart, 
-                          in string         file ) raises (SALOME::SALOME_Exception);
+                          in string         file,
+                          in boolean        renumer ) raises (SALOME::SALOME_Exception);
     void ExportPartToSTL( in SMESH_IDSource meshPart,
                           in string         file,
                           in boolean        isascii ) raises (SALOME::SALOME_Exception);
-
     /*!
-     * Get MED Mesh
+     * Return computation progress [0.,1]
      */
-    SALOME_MED::MESH GetMEDMesh()
-      raises (SALOME::SALOME_Exception);
+    double GetComputeProgress();
 
     /*!
-     * Get informations about mesh contents
+     * Get information about mesh contents
      */
-    long NbNodes()
+    smIdType NbNodes()
+      raises (SALOME::SALOME_Exception);
+
+    smIdType NbElements()
+      raises (SALOME::SALOME_Exception);
+
+    smIdType Nb0DElements()
       raises (SALOME::SALOME_Exception);
 
-    long NbElements()
+    smIdType NbBalls()
       raises (SALOME::SALOME_Exception);
 
-    long Nb0DElements()
+    smIdType NbEdges()
       raises (SALOME::SALOME_Exception);
 
-    long NbBalls()
+    smIdType NbEdgesOfOrder(in ElementOrder order)
       raises (SALOME::SALOME_Exception);
 
-    long NbEdges()
+    smIdType NbFaces()
       raises (SALOME::SALOME_Exception);
 
-    long NbEdgesOfOrder(in ElementOrder order)
+    smIdType NbFacesOfOrder(in ElementOrder order)
       raises (SALOME::SALOME_Exception);
 
-    long NbFaces()
+    smIdType NbTriangles()
       raises (SALOME::SALOME_Exception);
 
-    long NbFacesOfOrder(in ElementOrder order)
+    smIdType NbTrianglesOfOrder(in ElementOrder order)
       raises (SALOME::SALOME_Exception);
 
-    long NbTriangles()
+    smIdType NbBiQuadTriangles()
       raises (SALOME::SALOME_Exception);
 
-    long NbTrianglesOfOrder(in ElementOrder order)
+    smIdType NbQuadrangles()
       raises (SALOME::SALOME_Exception);
 
-    long NbQuadrangles()
+    smIdType NbQuadranglesOfOrder(in ElementOrder order)
       raises (SALOME::SALOME_Exception);
 
-    long NbQuadranglesOfOrder(in ElementOrder order)
+    smIdType NbBiQuadQuadrangles()
       raises (SALOME::SALOME_Exception);
 
-    long NbBiQuadQuadrangles()
+    smIdType NbPolygons()
       raises (SALOME::SALOME_Exception);
 
-    long NbPolygons()
+    smIdType NbPolygonsOfOrder(in ElementOrder order)
       raises (SALOME::SALOME_Exception);
 
-    long NbVolumes()
+    smIdType NbVolumes()
       raises (SALOME::SALOME_Exception);
 
-    long NbVolumesOfOrder(in ElementOrder order)
+    smIdType NbVolumesOfOrder(in ElementOrder order)
       raises (SALOME::SALOME_Exception);
 
-    long NbTetras()
+    smIdType NbTetras()
       raises (SALOME::SALOME_Exception);
 
-    long NbTetrasOfOrder(in ElementOrder order)
+    smIdType NbTetrasOfOrder(in ElementOrder order)
       raises (SALOME::SALOME_Exception);
 
-    long NbHexas()
+    smIdType NbHexas()
       raises (SALOME::SALOME_Exception);
 
-    long NbHexasOfOrder(in ElementOrder order)
+    smIdType NbHexasOfOrder(in ElementOrder order)
       raises (SALOME::SALOME_Exception);
 
-    long NbTriQuadraticHexas()
+    smIdType NbTriQuadraticHexas()
       raises (SALOME::SALOME_Exception);
 
-    long NbPyramids()
+    smIdType NbPyramids()
       raises (SALOME::SALOME_Exception);
 
-    long NbPyramidsOfOrder(in ElementOrder order)
+    smIdType NbPyramidsOfOrder(in ElementOrder order)
       raises (SALOME::SALOME_Exception);
 
-    long NbPrisms()
+    smIdType NbPrisms()
       raises (SALOME::SALOME_Exception);
 
-    long NbPrismsOfOrder(in ElementOrder order)
+    smIdType NbPrismsOfOrder(in ElementOrder order)
       raises (SALOME::SALOME_Exception);
 
-    long NbHexagonalPrisms()
+    smIdType NbHexagonalPrisms()
       raises (SALOME::SALOME_Exception);
 
-    long NbPolyhedrons()
+    smIdType NbPolyhedrons()
       raises (SALOME::SALOME_Exception);
 
-    long NbSubMesh()
+    smIdType NbSubMesh()
       raises (SALOME::SALOME_Exception);
 
-    long_array GetElementsId()
+    smIdType_array GetElementsId()
       raises (SALOME::SALOME_Exception);
 
-    long_array GetElementsByType( in ElementType theType )
+    smIdType_array GetElementsByType( in ElementType theType )
       raises (SALOME::SALOME_Exception);
 
-    long_array GetNodesId()
+    smIdType_array GetNodesId()
       raises (SALOME::SALOME_Exception);
     
     /*!
      * Returns type of mesh element
      */    
-    ElementType GetElementType( in long id, in boolean iselem )
+    ElementType GetElementType( in smIdType id, in boolean iselem )
+      raises (SALOME::SALOME_Exception);
+
+    EntityType GetElementGeomType( in smIdType id )
       raises (SALOME::SALOME_Exception);
 
-    EntityType GetElementGeomType( in long id )
+    GeometryType GetElementShape( in smIdType id )
       raises (SALOME::SALOME_Exception);
 
-    long_array GetSubMeshElementsId(in long ShapeID)
+    smIdType_array GetSubMeshElementsId(in long ShapeID)
       raises (SALOME::SALOME_Exception);
 
-    long_array GetSubMeshNodesId(in long ShapeID, in boolean all )
+    smIdType_array GetSubMeshNodesId(in long ShapeID, in boolean all )
       raises (SALOME::SALOME_Exception);
     
     ElementType GetSubMeshElementType(in long ShapeID)
@@ -797,6 +891,11 @@ module SMESH
      * 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
      */
@@ -822,106 +921,121 @@ module SMESH
      * 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);
+    double_array GetNodeXYZ(in smIdType 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);
+    smIdType_array GetNodeInverseElements(in smIdType id, in ElementType elemType);
 
     /*!
      * \brief Return position of a node on shape
      */
-    NodePosition GetNodePosition(in long NodeID);
+    NodePosition GetNodePosition(in smIdType NodeID);
+
+    /*!
+     * \brief Return position of an element on shape
+     */
+    ElementPosition GetElementPosition(in smIdType ElemID);
 
     /*!
      * 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);
+    long GetShapeID(in smIdType 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);
+    long GetShapeIDForElem(in smIdType id);
 
     /*!
      * Returns number of nodes for given element
      * If there is not element for given ID - returns -1
      */
-    long GetElemNbNodes(in long id);
+    short GetElemNbNodes(in smIdType id);
 
     /*!
      * Returns IDs of nodes of given element
      */
-    long_array GetElemNodes(in long id);
+    smIdType_array GetElemNodes(in smIdType 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);
+    smIdType GetElemNode(in smIdType id, in short index);
 
     /*!
      * Returns true if given node is medium node
      * in given quadratic element
      */
-    boolean IsMediumNode(in long ide, in long idn);
+    boolean IsMediumNode(in smIdType ide, in smIdType idn);
 
     /*!
      * Returns true if given node is medium node
      * in one of quadratic elements
      */
-    boolean IsMediumNodeOfAnyElem(in long idn, in ElementType elem_type);
+    boolean IsMediumNodeOfAnyElem(in smIdType idn, in ElementType elem_type);
 
     /*!
      * Returns number of edges for given element
      */
-    long ElemNbEdges(in long id);
+    long ElemNbEdges(in smIdType id);
 
     /*!
      * Returns number of faces for given element
      */
-    long ElemNbFaces(in long id);
+    long ElemNbFaces(in smIdType id);
 
     /*!
      * Returns nodes of given face (counted from zero) for given volumic element.
      */
-    long_array GetElemFaceNodes(in long elemId, in short faceIndex);
+    smIdType_array GetElemFaceNodes(in smIdType elemId, in short faceIndex);
+
+    /*!
+     * 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);
 
     /*!
      * Returns an element based on all given nodes.
      */
-    long FindElementByNodes(in long_array nodes);
+    smIdType FindElementByNodes(in smIdType_array nodes);
+
+    /*!
+     * Return elements including all given nodes.
+     */
+    smIdType_array GetElementsByNodes(in smIdType_array nodes, in ElementType elem_type);
 
     /*!
      * Returns true if given element is polygon
      */
-    boolean IsPoly(in long id);
+    boolean IsPoly(in smIdType id);
 
     /*!
      * Returns true if given element is quadratic
      */
-    boolean IsQuadratic(in long id);
+    boolean IsQuadratic(in smIdType id);
 
     /*!
      * Returns diameter of a ball discrete element or zero in case of an invalid \a id
      */
-    double GetBallDiameter(in long id);
+    double GetBallDiameter(in smIdType 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);
+    double_array BaryCenter(in smIdType id);
 
     /*! Gets information about imported MED file */
-    SALOME_MED::MedFileInfo GetMEDFileInfo();
+    MedFileInfo GetMEDFileInfo();
 
     /*!
      *  Sets list of notebook variables used for Mesh operations separated by ":" symbol
@@ -940,42 +1054,42 @@ module SMESH
     string_array GetLastParameters();
   };
 
-  interface SMESH_subMesh : SALOME::GenericObj, SMESH_IDSource
+  interface SMESH_subMesh : SMESH_IDSource
   {
     /*!
      *
      */
-    long GetNumberOfElements()
+    smIdType GetNumberOfElements()
       raises (SALOME::SALOME_Exception);
 
     /*!
      *
      */
-    long GetNumberOfNodes( in boolean all )
+    smIdType GetNumberOfNodes( in boolean all )
       raises (SALOME::SALOME_Exception);
 
     /*!
      *
      */
-    long_array GetElementsId()
+    smIdType_array GetElementsId()
       raises (SALOME::SALOME_Exception);
 
     /*!
      *
      */
-    long_array GetElementsByType( in ElementType theType )
+    smIdType_array GetElementsByType( in ElementType theType )
       raises (SALOME::SALOME_Exception);
     
     /*!
-     * Return type of submesh element
+     * Returns type of mesh element (same as SMESH_Mesh::GetElementType() )
      */
-    ElementType GetElementType( in long id, in boolean iselem )
+    ElementType GetElementType( in smIdType id, in boolean iselem )
       raises (SALOME::SALOME_Exception);
 
     /*!
      *
      */
-    long_array GetNodesId()
+    smIdType_array GetNodesId()
       raises (SALOME::SALOME_Exception);
 
     /*!
@@ -991,15 +1105,9 @@ module SMESH
       raises (SALOME::SALOME_Exception);
 
     /*!
-     * Get the internal Id
+     * Get the internal persisten Id
      */
     long GetId();
-
-    /*!
-     * Get MED subMesh
-     */
-    SALOME_MED::FAMILY GetFamily()
-      raises (SALOME::SALOME_Exception);
   };
 
 };