Salome HOME
0020832: EDF 1359 SMESH : Automatic meshing of boundary layers
[modules/smesh.git] / idl / SMESH_MeshEditor.idl
index 121f8a307bbcdc023e62cbd537f1a35477b35f5c..e4e504e1ae8f30906d4c03a6f4511cdf6ec57184 100644 (file)
@@ -1,4 +1,6 @@
-//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  Copyright (C) 2007-2010  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
 //  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
-//
-//
+//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 //  File   : SMESH_MeshEditor.idl
-//  $Header$
 
 #ifndef _SMESH_MESHEDITOR_IDL_
 #define _SMESH_MESHEDITOR_IDL_
 
 module SMESH
 {
-  /*!
-   * Structure used in mesh edit preview data
-   */
-  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; };
+  enum Bnd_Dimension { BND_2DFROM3D, BND_1DFROM3D, BND_1DFROM2D };
 
   /*!
    * This interface makes modifications on the Mesh - removing elements and nodes etc.
@@ -51,12 +36,48 @@ module SMESH
   interface NumericalFunctor;
   interface SMESH_MeshEditor
   {
+    /*!
+     * \brief Wrap a sequence of ids in a SMESH_IDSource
+     * \param IDsOfElements list of mesh elements identifiers
+     * \return new ID source object
+     */
+    SMESH_IDSource MakeIDSource(in long_array IDsOfElements, in ElementType type);
+
+    /*!
+     * \brief Remove mesh elements specified by their identifiers.
+     * \param IDsOfElements list of mesh elements identifiers
+     * \return \c true if elements are correctly removed or \c false otherwise
+     */
     boolean RemoveElements(in long_array IDsOfElements);
 
+    /*!
+     * \brief Remove mesh nodes specified by their identifiers.
+     * \param IDsOfNodes list of mesh nodes identifiers
+     * \return \c true if nodes are correctly removed or \c false otherwise
+     */
     boolean RemoveNodes(in long_array IDsOfNodes);
 
+    /*!
+     * \brief Remove all orphan nodes.
+     * \return number of removed nodes
+     */
+    long RemoveOrphanNodes();
+
+    /*!
+     * \brief Add new node.
+     * \param x X coordinate of new node
+     * \param y Y coordinate of new node
+     * \param z Z coordinate of new node
+     * \return integer identifier of new node
+     */
     long AddNode(in double x, in double y, in double z);
 
+    /*!
+     *  Create 0D element on the given node.
+     *  \param IdOfNode Node IDs for creation of element.
+     */
+    long Add0DElement(in long IDOfNode);
+
     /*!
      *  Create edge, either linear and quadratic (this is determed
      *  by number of given nodes).
@@ -165,8 +186,8 @@ module SMESH
      * \return TRUE in case of success, FALSE otherwise.
      */
     boolean TriToQuad (in long_array       IDsOfElements,
-                      in NumericalFunctor Criterion,
-                      in double           MaxAngle);
+                       in NumericalFunctor Criterion,
+                       in double           MaxAngle);
 
     /*!
      * \brief Fuse neighbour triangles into quadrangles.
@@ -174,8 +195,8 @@ module SMESH
      * Behaves like the above method, taking list of elements from \a theObject
      */
     boolean TriToQuadObject (in SMESH_IDSource   theObject,
-                            in NumericalFunctor Criterion,
-                            in double           MaxAngle);
+                             in NumericalFunctor Criterion,
+                             in double           MaxAngle);
 
     /*!
      * \brief Split quadrangles into triangles.
@@ -184,7 +205,7 @@ module SMESH
      * \return TRUE in case of success, FALSE otherwise.
      */
     boolean QuadToTri (in long_array       IDsOfElements,
-                      in NumericalFunctor Criterion);
+                       in NumericalFunctor Criterion);
 
     /*!
      * \brief Split quadrangles into triangles.
@@ -192,7 +213,7 @@ module SMESH
      * Behaves like the above method, taking list of elements from \a theObject
      */
     boolean QuadToTriObject (in SMESH_IDSource   theObject,
-                            in NumericalFunctor Criterion);
+                             in NumericalFunctor Criterion);
 
     /*!
      * \brief Split quadrangles into triangles.
@@ -201,7 +222,7 @@ module SMESH
      * \return TRUE in case of success, FALSE otherwise.
      */
     boolean SplitQuad (in long_array IDsOfElements,
-                      in boolean    Diag13);
+                       in boolean    Diag13);
 
     /*!
      * \brief Split quadrangles into triangles.
@@ -209,7 +230,7 @@ module SMESH
      * Behaves like the above method, taking list of elements from \a theObject
      */
     boolean SplitQuadObject (in SMESH_IDSource theObject,
-                            in boolean        Diag13);
+                             in boolean        Diag13);
 
     /*!
      *  Find better splitting of the given quadrangle.
@@ -219,7 +240,19 @@ module SMESH
      *          diagonal is better, 0 if error occurs.
      */
     long BestSplit (in long             IDOfQuad,
-                   in NumericalFunctor Criterion);
+                    in NumericalFunctor Criterion);
+
+    /*!
+     * \brief Split volumic elements into tetrahedrons
+     *  \param elems - elements to split
+     *  \param methodFlags - flags passing splitting method:
+     *         1 - split the hexahedron into 5 tetrahedrons
+     *         2 - split the hexahedron into 6 tetrahedrons
+     *         3 - split the hexahedron into 24 tetrahedrons
+     */
+    void SplitVolumesIntoTetra(in SMESH_IDSource elems, in short methodFlags)
+      raises (SALOME::SALOME_Exception);
+
 
     enum Smooth_Method { LAPLACIAN_SMOOTH, CENTROIDAL_SMOOTH };
 
@@ -230,10 +263,10 @@ module SMESH
                    in Smooth_Method Method);
 
     boolean SmoothObject(in SMESH_IDSource  theObject,
-                        in long_array      IDsOfFixedNodes,
-                        in long            MaxNbOfIterations,
-                        in double          MaxAspectRatio,
-                        in Smooth_Method   Method);
+                         in long_array      IDsOfFixedNodes,
+                         in long            MaxNbOfIterations,
+                         in double          MaxAspectRatio,
+                         in Smooth_Method   Method);
 
     boolean SmoothParametric(in long_array    IDsOfElements,
                              in long_array    IDsOfFixedNodes,
@@ -284,10 +317,10 @@ module SMESH
      * \param NbOfSteps - number of elements to generate from one element
      */
     void RotationSweepObject(in SMESH_IDSource  theObject,
-                            in AxisStruct      Axix,
-                            in double          AngleInRadians,
-                            in long            NbOfSteps,
-                            in double          Tolerance);
+                             in AxisStruct      Axix,
+                             in double          AngleInRadians,
+                             in long            NbOfSteps,
+                             in double          Tolerance);
     /*!
      * \brief Same as previous but additionally create groups of elements
      *  generated from elements belonging to preexisting groups
@@ -297,6 +330,48 @@ module SMESH
                                                in double          AngleInRadians,
                                                in long            NbOfSteps,
                                                in double          Tolerance);
+    /*!
+     * \brief Genarate dim+1 elements by rotation of the object around axis
+     * \param theObject - object containing elements to ratate
+     * \param Axix - rotation axis
+     * \param AngleInRadians - rotation angle
+     * \param NbOfSteps - number of elements to generate from one element
+     */
+    void RotationSweepObject1D(in SMESH_IDSource  theObject,
+                               in AxisStruct      Axix,
+                               in double          AngleInRadians,
+                               in long            NbOfSteps,
+                               in double          Tolerance);
+    /*!
+     * \brief Same as previous but additionally create groups of elements
+     *  generated from elements belonging to preexisting groups
+     */
+    ListOfGroups RotationSweepObject1DMakeGroups(in SMESH_IDSource  theObject,
+                                                 in AxisStruct      Axix,
+                                                 in double          AngleInRadians,
+                                                 in long            NbOfSteps,
+                                                 in double          Tolerance);
+    /*!
+     * \brief Genarate dim+1 elements by rotation of the object around axis
+     * \param theObject - object containing elements to ratate
+     * \param Axix - rotation axis
+     * \param AngleInRadians - rotation angle
+     * \param NbOfSteps - number of elements to generate from one element
+     */
+    void RotationSweepObject2D(in SMESH_IDSource  theObject,
+                               in AxisStruct      Axix,
+                               in double          AngleInRadians,
+                               in long            NbOfSteps,
+                               in double          Tolerance);
+    /*!
+     * \brief Same as previous but additionally create groups of elements
+     *  generated from elements belonging to preexisting groups
+     */
+    ListOfGroups RotationSweepObject2DMakeGroups(in SMESH_IDSource  theObject,
+                                                 in AxisStruct      Axix,
+                                                 in double          AngleInRadians,
+                                                 in long            NbOfSteps,
+                                                 in double          Tolerance);
     /*!
      * \brief Genarate dim+1 elements by extrusion of elements along vector
      * \param IDsOfElements - elements to sweep
@@ -314,7 +389,7 @@ module SMESH
                                           in DirStruct       StepVector,
                                           in long            NbOfSteps);
    /*!
-    * Generate new elements by extrusion of theElements 
+    * Generate new elements by extrusion of theElements
     * by StepVector by NbOfSteps
     * param ExtrFlags set flags for performing extrusion
     * param SewTolerance - uses for comparing locations of nodes if flag
@@ -323,8 +398,8 @@ module SMESH
     void AdvancedExtrusion(in long_array      IDsOfElements,
                            in DirStruct       StepVector,
                            in long            NbOfSteps,
-                          in long            ExtrFlags,
-                          in double          SewTolerance);
+                           in long            ExtrFlags,
+                           in double          SewTolerance);
     /*!
      * \brief Same as previous but additionally create groups of elements
      *  generated from elements belonging to preexisting groups
@@ -336,22 +411,22 @@ module SMESH
                                              in double          SewTolerance);
 
     void ExtrusionSweepObject(in SMESH_IDSource  theObject,
-                             in DirStruct       StepVector,
-                             in long            NbOfSteps);
+                              in DirStruct       StepVector,
+                              in long            NbOfSteps);
     ListOfGroups ExtrusionSweepObjectMakeGroups(in SMESH_IDSource  theObject,
                                                 in DirStruct       StepVector,
                                                 in long            NbOfSteps);
 
     void ExtrusionSweepObject1D(in SMESH_IDSource theObject,
-                               in DirStruct      StepVector,
-                               in long           NbOfSteps);
+                                in DirStruct      StepVector,
+                                in long           NbOfSteps);
     ListOfGroups ExtrusionSweepObject1DMakeGroups(in SMESH_IDSource theObject,
                                                   in DirStruct      StepVector,
                                                   in long           NbOfSteps);
 
     void ExtrusionSweepObject2D(in SMESH_IDSource theObject,
-                               in DirStruct      StepVector,
-                               in long           NbOfSteps);
+                                in DirStruct      StepVector,
+                                in long           NbOfSteps);
     ListOfGroups ExtrusionSweepObject2DMakeGroups(in SMESH_IDSource theObject,
                                                   in DirStruct      StepVector,
                                                   in long           NbOfSteps);
@@ -366,14 +441,38 @@ module SMESH
       EXTR_CANT_GET_TANGENT
       };
 
+    ListOfGroups ExtrusionAlongPathX(in long_array        IDsOfElements,
+                                     in SMESH_IDSource    Path,
+                                     in long              NodeStart,
+                                     in boolean           HasAngles,
+                                     in double_array      Angles,
+                                     in boolean           LinearVariation,
+                                     in boolean           HasRefPoint,
+                                     in PointStruct       RefPoint,
+                                     in boolean           MakeGroups,
+                                     in ElementType       ElemType,
+                                     out Extrusion_Error  Error);
+
+    ListOfGroups ExtrusionAlongPathObjX(in SMESH_IDSource    theObject,
+                                        in SMESH_IDSource    Path,
+                                        in long              NodeStart,
+                                        in boolean           HasAngles,
+                                        in double_array      Angles,
+                                        in boolean           LinearVariation,
+                                        in boolean           HasRefPoint,
+                                        in PointStruct       RefPoint,
+                                        in boolean           MakeGroups,
+                                        in ElementType       ElemType,
+                                        out Extrusion_Error  Error);
+
     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);
+                                       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);
     ListOfGroups ExtrusionAlongPathMakeGroups(in long_array        IDsOfElements,
                                               in SMESH_Mesh        PathMesh,
                                               in GEOM::GEOM_Object PathShape,
@@ -385,13 +484,13 @@ module SMESH
                                               out Extrusion_Error  Error);
 
     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);
+                                             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);
     ListOfGroups ExtrusionAlongPathObjectMakeGroups(in SMESH_IDSource    theObject,
                                                     in SMESH_Mesh        PathMesh,
                                                     in GEOM::GEOM_Object PathShape,
@@ -402,12 +501,48 @@ module SMESH
                                                     in PointStruct       RefPoint,
                                                     out Extrusion_Error  Error);
 
+    Extrusion_Error ExtrusionAlongPathObject1D(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);
+    ListOfGroups ExtrusionAlongPathObject1DMakeGroups(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,
+                                                      out Extrusion_Error  Error);
+
+    Extrusion_Error ExtrusionAlongPathObject2D(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);
+    ListOfGroups ExtrusionAlongPathObject2DMakeGroups(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,
+                                                      out Extrusion_Error  Error);
+
    /*!
     * Compute rotation angles for ExtrusionAlongPath as linear variation
     * of given angles along path steps
-    * param PathMesh mesh containing a 1D sub-mesh on the edge, along 
+    * param PathMesh mesh containing a 1D sub-mesh on the edge, along
     *                which proceeds the extrusion
-    * param PathShape is shape(edge); as the mesh can be complex, the edge 
+    * param PathShape is shape(edge); as the mesh can be complex, the edge
     *                 is used to define the sub-mesh for the path
     */
     double_array LinearAnglesVariation(in SMESH_Mesh        PathMesh,
@@ -430,9 +565,9 @@ module SMESH
                                in string     MeshName);
 
     void MirrorObject (in SMESH_IDSource theObject,
-                      in AxisStruct     Mirror,
-                      in MirrorType     Type,
-                      in boolean        Copy);
+                       in AxisStruct     Mirror,
+                       in MirrorType     Type,
+                       in boolean        Copy);
     ListOfGroups MirrorObjectMakeGroups (in SMESH_IDSource theObject,
                                          in AxisStruct     Mirror,
                                          in MirrorType     Type);
@@ -453,8 +588,8 @@ module SMESH
                                   in string     MeshName);
 
     void TranslateObject (in SMESH_IDSource theObject,
-                         in DirStruct      Vector,
-                         in boolean        Copy);
+                          in DirStruct      Vector,
+                          in boolean        Copy);
     ListOfGroups TranslateObjectMakeGroups (in SMESH_IDSource theObject,
                                             in DirStruct      Vector);
     SMESH_Mesh TranslateObjectMakeMesh (in SMESH_IDSource theObject,
@@ -462,6 +597,19 @@ module SMESH
                                         in boolean        CopyGroups,
                                         in string         MeshName);
 
+    void Scale (in SMESH_IDSource theObject,
+                in PointStruct    thePoint,
+                in double_array   theScaleFact,
+                in boolean        Copy);
+    ListOfGroups ScaleMakeGroups (in SMESH_IDSource theObject,
+                                  in PointStruct    thePoint,
+                                  in double_array   theScaleFact);
+    SMESH_Mesh ScaleMakeMesh (in SMESH_IDSource theObject,
+                              in PointStruct    thePoint,
+                              in double_array   theScaleFact,
+                              in boolean        CopyGroups,
+                              in string         MeshName);
+
     void Rotate (in long_array IDsOfElements,
                  in AxisStruct Axis,
                  in double     AngleInRadians,
@@ -476,9 +624,9 @@ module SMESH
                                in string     MeshName);
 
     void RotateObject (in SMESH_IDSource theObject,
-                      in AxisStruct     Axis,
-                      in double         AngleInRadians,
-                      in boolean        Copy);
+                       in AxisStruct     Axis,
+                       in double         AngleInRadians,
+                       in boolean        Copy);
     ListOfGroups RotateObjectMakeGroups (in SMESH_IDSource theObject,
                                          in AxisStruct     Axis,
                                          in double         AngleInRadians);
@@ -492,8 +640,13 @@ module SMESH
                               out array_of_long_array GroupsOfNodes);
 
     void FindCoincidentNodesOnPart (in  SMESH_IDSource      SubMeshOrGroup,
-                                   in  double              Tolerance,
-                                   out array_of_long_array GroupsOfNodes);
+                                    in  double              Tolerance,
+                                    out array_of_long_array GroupsOfNodes);
+
+    void FindCoincidentNodesOnPartBut (in  SMESH_IDSource      SubMeshOrGroup,
+                                       in  double              Tolerance,
+                                       out array_of_long_array GroupsOfNodes,
+                                       in  ListOfIDSources     ExceptSubMeshOrGroups);
 
     void MergeNodes (in array_of_long_array GroupsOfNodes);
 
@@ -503,7 +656,7 @@ module SMESH
      * \return List of groups of equal elements.
      */
     void FindEqualElements (in  SMESH_IDSource      MeshOrSubMeshOrGroup,
-                           out array_of_long_array GroupsOfElementsID);
+                            out array_of_long_array GroupsOfElementsID);
 
     /*!
      * \brief Merge elements in each given group.
@@ -515,13 +668,31 @@ module SMESH
      * \brief Merge equal elements in the whole mesh.
      */
     void MergeEqualElements();
-    
+
     /*!
      * If the given ID is a valid node ID (nodeID > 0), just move this node, else
      * move the node closest to the point to point's location and return ID of the node
      */
     long MoveClosestNodeToPoint(in double x, in double y, in double z, in long nodeID);
 
+    /*!
+     * Return ID of node closest to a given point
+     */
+    long FindNodeClosestTo(in double x, in double y, in double z);
+
+    /*!
+     * Return elements of given type where the given point is IN or ON.
+     *
+     * 'ALL' type means elements of any type excluding nodes and 0D elements
+     */
+    long_array FindElementsByPoint(in double x, in double y, in double z, in ElementType type);
+
+    /*!
+     * Return point state in a closed 2D mesh in terms of TopAbs_State enumeration.
+     * TopAbs_UNKNOWN state means that either mesh is wrong or the analysis fails.
+     */
+    short GetPointState(in double x, in double y, in double z);
+
     enum Sew_Error {
       SEW_OK,
       SEW_BORDER1_NOT_FOUND,
@@ -542,8 +713,8 @@ module SMESH
                               in long FirstNodeID2,
                               in long SecondNodeID2,
                               in long LastNodeID2,
-                             in boolean CreatePolygons,
-                             in boolean CreatePolyedrs);
+                              in boolean CreatePolygons,
+                              in boolean CreatePolyedrs);
 
     Sew_Error SewConformFreeBorders (in long FirstNodeID1,
                                      in long SecondNodeID1,
@@ -556,8 +727,8 @@ module SMESH
                                in long LastNodeIDOnFreeBorder,
                                in long FirstNodeIDOnSide,
                                in long LastNodeIDOnSide,
-                              in boolean CreatePolygons,
-                              in boolean CreatePolyedrs);
+                               in boolean CreatePolygons,
+                               in boolean CreatePolyedrs);
 
     Sew_Error SewSideElements (in long_array IDsOfSide1Elements,
                                in long_array IDsOfSide2Elements,
@@ -574,7 +745,7 @@ module SMESH
     boolean ChangeElemNodes(in long ide, in long_array newIDs);
 
    /*!
-    * Return data of mesh edition preview which is computed provided 
+    * Return data of mesh edition preview which is computed provided
     * that the editor was obtained trough SMESH_Mesh::GetMeshEditPreviewer()
     */
     MeshPreviewStruct GetPreviewData();
@@ -593,6 +764,205 @@ module SMESH
     */
     long_array GetLastCreatedElems();
 
+    /*!
+     * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
+     * \param theNodes - identifiers of nodes to be doubled
+     * \param theModifiedElems - identifiers of elements to be updated by the new (doubled)
+     *        nodes. If list of element identifiers is empty then nodes are doubled but
+     *        they not assigned to elements
+     *        \return TRUE if operation has been completed successfully, FALSE otherwise
+     * \sa DoubleNode(), DoubleNodeGroup(), DoubleNodeGroups()
+    */
+    boolean DoubleNodes( in long_array theNodes, in long_array theModifiedElems );
+
+    /*!
+    * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
+    * This method provided for convenience works as DoubleNodes() described above.
+    * \param theNodeId - identifier of node to be doubled.
+    * \param theModifiedElems - identifiers of elements to be updated.
+    * \return TRUE if operation has been completed successfully, FALSE otherwise
+    * \sa DoubleNodes(), DoubleNodeGroup(), DoubleNodeGroups()
+    */
+    boolean DoubleNode( in long theNodeId, in long_array theModifiedElems );
+
+    /*!
+    * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
+    * This method provided for convenience works as DoubleNodes() described above.
+    * \param theNodes - group of nodes to be doubled.
+    * \param theModifiedElems - group of elements to be updated.
+    * \return TRUE if operation has been completed successfully, FALSE otherwise
+    * \sa DoubleNode(), DoubleNodes(), DoubleNodeGroups(), DoubleNodeGroupNew()
+    */
+    boolean DoubleNodeGroup( in SMESH_GroupBase theNodes,
+                             in SMESH_GroupBase theModifiedElems );
+
+    /*!
+     * \brief Creates a hole in a mesh by doubling the nodes of some particular elements.
+     * Works as DoubleNodeGroup() described above, but returns a new group with
+     * newly created nodes.
+     * \param theNodes - group of nodes to be doubled.
+     * \param theModifiedElems - group of elements to be updated.
+     * \return a new group with newly created nodes
+     * \sa DoubleNodeGroup()
+     */
+    SMESH_Group DoubleNodeGroupNew( in SMESH_GroupBase theNodes,
+                                    in SMESH_GroupBase theModifiedElems );
+
+    /*!
+    \brief Creates a hole in a mesh by doubling the nodes of some particular elements
+    This method provided for convenience works as DoubleNodes() described above.
+    \param theNodes - list of groups of nodes to be doubled
+    \param theModifiedElems - list of groups of elements to be updated.
+    \return TRUE if operation has been completed successfully, FALSE otherwise
+    \sa DoubleNode(), DoubleNodeGroup(), DoubleNodes()
+    */
+    boolean DoubleNodeGroups( in ListOfGroups theNodes,
+                              in ListOfGroups theModifiedElems );
+
+    /*!
+     * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
+     * \param theElems - the list of elements (edges or faces) to be replicated
+     *        The nodes for duplication could be found from these elements
+     * \param theNodesNot - list of nodes to NOT replicate
+     * \param theAffectedElems - the list of elements (cells and edges) to which the
+     *        replicated nodes should be associated to.
+     * \return TRUE if operation has been completed successfully, FALSE otherwise
+     * \sa DoubleNodeGroup(), DoubleNodeGroups()
+    */
+    boolean DoubleNodeElem( in long_array theElems,
+                            in long_array theNodesNot,
+                            in long_array theAffectedElems );
+
+    /*!
+     * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
+     * \param theElems - the list of elements (edges or faces) to be replicated
+     *        The nodes for duplication could be found from these elements
+     * \param theNodesNot - list of nodes to NOT replicate
+     * \param theShape - shape to detect affected elements (element which geometric center
+     *        located on or inside shape).
+     *        The replicated nodes should be associated to affected elements.
+     * \return TRUE if operation has been completed successfully, FALSE otherwise
+     * \sa DoubleNodeGroupInRegion(), DoubleNodeGroupsInRegion()
+    */
+    boolean DoubleNodeElemInRegion( in long_array theElems,
+                                    in long_array theNodesNot,
+                                    in GEOM::GEOM_Object theShape );
+
+    /*!
+     * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
+     * This method provided for convenience works as DoubleNodes() described above.
+     * \param theElems - group of of elements (edges or faces) to be replicated
+     * \param theNodesNot - group of nodes not to replicated
+     * \param theAffectedElems - group of elements to which the replicated nodes
+     *        should be associated to.
+     * \return TRUE if operation has been completed successfully, FALSE otherwise
+     * \sa DoubleNodes(), DoubleNodeGroups(), DoubleNodeElemGroupNew()
+    */
+    boolean DoubleNodeElemGroup( in SMESH_GroupBase theElems,
+                                 in SMESH_GroupBase theNodesNot,
+                                 in SMESH_GroupBase theAffectedElems );
+
+    /*!
+     * \brief Creates a hole in a mesh by doubling the nodes of some particular elements.
+     * Works as DoubleNodeElemGroup() described above, but returns a new group with
+     * newly created elements.
+     * \param theElems - group of of elements (edges or faces) to be replicated
+     * \param theNodesNot - group of nodes not to replicated
+     * \param theAffectedElems - group of elements to which the replicated nodes
+     *        should be associated to.
+     * \return a new group with newly created elements
+     * \sa DoubleNodeElemGroup()
+    */
+    SMESH_Group DoubleNodeElemGroupNew( in SMESH_GroupBase theElems,
+                                        in SMESH_GroupBase theNodesNot,
+                                        in SMESH_GroupBase theAffectedElems );
+
+    /*!
+     * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
+     * This method provided for convenience works as DoubleNodes() described above.
+     * \param theElems - group of elements (edges or faces) to be replicated
+     * \param theNodesNot - group of nodes not to replicated
+     * \param theShape - shape to detect affected elements (element which geometric center
+     *        located on or inside shape).
+     *        The replicated nodes should be associated to affected elements.
+     * \return TRUE if operation has been completed successfully, FALSE otherwise
+     * \sa DoubleNodesInRegion(), DoubleNodeGroupsInRegion()
+    */
+    boolean DoubleNodeElemGroupInRegion( in SMESH_GroupBase theElems,
+                                     in SMESH_GroupBase theNodesNot,
+                                     in GEOM::GEOM_Object theShape );
+
+    /*!
+     * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
+     * This method provided for convenience works as DoubleNodes() described above.
+     * \param theElems - list of groups of elements (edges or faces) to be replicated
+     * \param theNodesNot - list of groups of nodes not to replicated
+     * \param theAffectedElems - group of elements to which the replicated nodes
+     *        should be associated to.
+     * \return TRUE if operation has been completed successfully, FALSE otherwise
+     * \sa DoubleNodeGroup(), DoubleNodes()
+    */
+    boolean DoubleNodeElemGroups( in ListOfGroups theElems,
+                                  in ListOfGroups theNodesNot,
+                                  in ListOfGroups theAffectedElems );
+
+    /*!
+     * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
+     * This method provided for convenience works as DoubleNodes() described above.
+     * \param theElems - list of groups of elements (edges or faces) to be replicated
+     * \param theNodesNot - list of groups of nodes not to replicated
+     * \param theShape - shape to detect affected elements (element which geometric center
+     *        located on or inside shape).
+     *        The replicated nodes should be associated to affected elements.
+     * \return TRUE if operation has been completed successfully, FALSE otherwise
+     * \sa DoubleNodeGroupInRegion(), DoubleNodesInRegion()
+    */
+    boolean DoubleNodeElemGroupsInRegion( in ListOfGroups theElems,
+                                          in ListOfGroups theNodesNot,
+                                          in GEOM::GEOM_Object theShape );
+
+    /*!
+     * \brief Generates skin mesh (containing 2D cells) from 3D mesh
+     * The created 2D mesh elements based on nodes of free faces of boundary volumes
+     * \return TRUE if operation has been completed successfully, FALSE otherwise
+     */
+    boolean Make2DMeshFrom3D();
+
+    /*!
+     * \brief Double nodes on shared faces between groups of volumes and create flat elements on demand.
+     * The list of groups must describe a partition of the mesh volumes.
+     * The nodes of the internal faces at the boundaries of the groups are doubled.
+     * In option, the internal faces are replaced by flat elements.
+     * Triangles are transformed in prisms, and quadrangles in hexahedrons.
+     * \param theDomains - list of groups of volumes
+     * \param createJointElems - if TRUE, create the elements
+     * \return TRUE if operation has been completed successfully, FALSE otherwise
+     */
+    boolean DoubleNodesOnGroupBoundaries( in ListOfGroups theDomains,
+                                          in boolean createJointElems );
+
+    /*!
+     * \brief Creates missing boundary elements
+     *  \param elements - elements whose boundary is to be checked
+     *  \param dimension - defines type of boundary elements to create
+     *  \param groupName - a name of group to store created boundary elements in,
+     *                     "" means not to create the group
+     *  \param meshName - a name of new mesh to store created boundary elements in,
+     *                     "" means not to create the new mesh
+     *  \param toCopyElements - if true, the checked elements will be copied into the new mesh
+     *  \param toCopyExistingBondary - if true, not only new but also pre-existing
+     *                                boundary elements will be copied into the new mesh
+     *  \param group - returns the create group, if any
+     *  \retval SMESH::SMESH_Mesh - the mesh where elements were added to
+     */
+    SMESH::SMESH_Mesh MakeBoundaryMesh(in SMESH_IDSource elements,
+                                       in Bnd_Dimension  dimension,
+                                       in string         groupName,
+                                       in string         meshName,
+                                       in boolean        toCopyElements,
+                                       in boolean        toCopyExistingBondary,
+                                       out SMESH_Group   group);
+
   };
 };