Salome HOME
0051564: TC6.6.0: Extrusion work incorrect
[modules/smesh.git] / idl / SMESH_MeshEditor.idl
index c010980be7c1d91457cfe57f33a88a64a03fdbd1..3425d89e2e092b5221f33ff80f2d7236ee55cac6 100644 (file)
@@ -1,42 +1,68 @@
-//  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2012  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
+// 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 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.
+// 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
+// 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
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
-
 //  File   : SMESH_MeshEditor.idl
-//
+
 #ifndef _SMESH_MESHEDITOR_IDL_
 #define _SMESH_MESHEDITOR_IDL_
 
 #include "SMESH_Mesh.idl"
+#include "SMESH_Gen.idl"
 
 module SMESH
 {
   enum Bnd_Dimension { BND_2DFROM3D, BND_1DFROM3D, BND_1DFROM2D };
-  
+
   /*!
    * This interface makes modifications on the Mesh - removing elements and nodes etc.
    */
   interface NumericalFunctor;
+
   interface SMESH_MeshEditor
   {
+   /*!
+    * Return data of mesh edition preview which is computed provided
+    * that the editor was obtained trough SMESH_Mesh::GetMeshEditPreviewer()
+    */
+    MeshPreviewStruct GetPreviewData();
+
+   /*!
+    * If during last operation of MeshEditor some nodes were
+    * created this method returns list of their IDs, if new nodes
+    * not created - returns empty list
+    */
+    long_array GetLastCreatedNodes();
+
+   /*!
+    * If during last operation of MeshEditor some elements were
+    * created this method returns list of their IDs, if new elements
+    * not created - returns empty list
+    */
+    long_array GetLastCreatedElems();
+
+    /*!
+     * \brief Returns description of an error/warning occured during the last operation
+     */
+    ComputeError GetLastError();
+
     /*!
      * \brief Wrap a sequence of ids in a SMESH_IDSource
      * \param IDsOfElements list of mesh elements identifiers
@@ -57,7 +83,7 @@ module SMESH
      * \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
@@ -65,7 +91,7 @@ module SMESH
     long RemoveOrphanNodes();
 
     /*!
-     * \brief Add new node.
+     * \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
@@ -74,14 +100,20 @@ module SMESH
     long AddNode(in double x, in double y, in double z);
 
     /*!
-     *  Create 0D element on the given node.
+     *  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).
+     *  Create a ball element on the given node.
+     *  \param IdOfNode Node IDs for creation of element.
+     */
+    long AddBall(in long IDOfNode, in double diameter);
+
+    /*!
+     *  Create an edge, either linear and quadratic (this is determed
+     *  by number of given nodes, two or three).
      *  \param IdsOfNodes List of node IDs for creation of element.
      *  Needed order of nodes in this list corresponds to description
      *  of MED. This description is located by the following link:
@@ -119,7 +151,6 @@ module SMESH
      */
     long AddPolyhedralVolume (in long_array IdsOfNodes,
                               in long_array Quantities);
-
     /*!
      *  Create volume of many faces, giving IDs of existing faces.
      *  \param IdsOfFaces List of face IDs for volume creation.
@@ -128,6 +159,19 @@ module SMESH
      */
     long AddPolyhedralVolumeByFaces (in long_array IdsOfFaces);
 
+    /*!
+     * Create 0D elements on all nodes of the given object except those 
+     * nodes on which a 0D element already exists.
+     *  \param theObject object on whose nodes 0D elements will be created.
+     *  \param theGroupName optional name of a group to add 0D elements created
+     *         and/or found on nodes of \a theObject.
+     *  \return an object (a new group or a temporary SMESH_IDSource) holding
+     *          ids of new and/or found 0D elements.
+     */
+    SMESH_IDSource Create0DElementsOnAllNodes(in SMESH_IDSource theObject,
+                                              in string         theGroupName)
+      raises (SALOME::SALOME_Exception);
+
     /*!
      * \brief Bind a node to a vertex
       * \param NodeID - node ID
@@ -177,6 +221,19 @@ module SMESH
     boolean Reorient(in long_array IDsOfElements);
 
     boolean ReorientObject(in SMESH_IDSource theObject);
+    /*!
+     * \brief Reorient faces contained in \a the2Dgroup.
+     * \param the2Dgroup - the mesh or its part to reorient
+     * \param theDirection - desired direction of normal of \a theFace
+     * \param theFace - ID of face whose orientation is checked.
+     *        It can be < 1 then \a thePoint is used to find a face.
+     * \param thePoint - is used to find a face if \a theFace < 1.
+     * \return number of reoriented elements.
+     */
+    long Reorient2D(in SMESH_IDSource the2Dgroup,
+                    in DirStruct      theDirection,
+                    in long           theFace,
+                    in PointStruct    thePoint) raises (SALOME::SALOME_Exception);
 
     /*!
      * \brief Fuse neighbour triangles into quadrangles.
@@ -187,8 +244,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.
@@ -196,8 +253,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.
@@ -206,7 +263,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.
@@ -214,7 +271,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.
@@ -223,7 +280,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.
@@ -231,7 +288,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.
@@ -241,7 +298,7 @@ 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
@@ -264,10 +321,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,
@@ -285,6 +342,13 @@ module SMESH
 
     boolean ConvertFromQuadratic();
 
+    void ConvertToQuadraticObject(in boolean        theForce3d, 
+                                  in SMESH_IDSource theObject) 
+      raises (SALOME::SALOME_Exception);
+
+    void ConvertFromQuadraticObject(in SMESH_IDSource theObject)
+      raises (SALOME::SALOME_Exception);
+
     void RenumberNodes();
 
     void RenumberElements();
@@ -318,10 +382,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
@@ -339,19 +403,19 @@ module SMESH
      * \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);
+                               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);
+                                                 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
@@ -360,19 +424,19 @@ module SMESH
      * \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);
+                               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);
+                                                 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
@@ -382,6 +446,15 @@ module SMESH
     void ExtrusionSweep(in long_array      IDsOfElements,
                         in DirStruct       StepVector,
                         in long            NbOfSteps);
+    /*!
+     * \brief Genarate dim+1 elements by extrusion of elements along vector
+     * \param IDsOfElements - elements to sweep
+     * \param StepVector - vector giving direction and distance of an extrusion step
+     * \param NbOfSteps - number of elements to generate from one element
+     */
+    void ExtrusionSweep0D(in long_array    IDsOfElements,
+                        in DirStruct       StepVector,
+                        in long            NbOfSteps);
     /*!
      * \brief Same as previous but additionally create groups of elements
      *  generated from elements belonging to preexisting groups
@@ -390,7 +463,13 @@ module SMESH
                                           in DirStruct       StepVector,
                                           in long            NbOfSteps);
    /*!
-    * Generate new elements by extrusion of theElements 
+     * \brief Same as previous but elements are nodes
+     */
+    ListOfGroups ExtrusionSweepMakeGroups0D(in long_array      IDsOfElements,
+                                          in DirStruct       StepVector,
+                                          in long            NbOfSteps);
+   /*!
+    * 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
@@ -399,8 +478,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
@@ -412,22 +491,29 @@ 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 ExtrusionSweepObject0D(in SMESH_IDSource theObject,
+                                in DirStruct      StepVector,
+                                in long           NbOfSteps);
+    ListOfGroups ExtrusionSweepObject0DMakeGroups(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);
@@ -443,37 +529,37 @@ module SMESH
       };
 
     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);
+                                     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);
+                                        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,
@@ -485,13 +571,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,
@@ -503,47 +589,47 @@ module SMESH
                                                     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);
+                                               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);
+                                                      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);
+                                               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);
+                                                      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,
@@ -566,9 +652,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);
@@ -589,8 +675,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,
@@ -625,9 +711,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);
@@ -641,8 +727,8 @@ 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,
@@ -657,7 +743,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.
@@ -669,7 +755,7 @@ 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
@@ -688,6 +774,16 @@ module SMESH
      */
     long_array FindElementsByPoint(in double x, in double y, in double z, in ElementType type);
 
+    /*!
+     * Searching among the given elements, 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 FindAmongElementsByPoint(in SMESH_IDSource elements,
+                                        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.
@@ -714,8 +810,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,
@@ -728,8 +824,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,
@@ -745,94 +841,84 @@ module SMESH
     */
     boolean ChangeElemNodes(in long ide, in long_array newIDs);
 
-   /*!
-    * Return data of mesh edition preview which is computed provided 
-    * that the editor was obtained trough SMESH_Mesh::GetMeshEditPreviewer()
-    */
-    MeshPreviewStruct GetPreviewData();
-
-   /*!
-    * If during last operation of MeshEditor some nodes were
-    * created this method returns list of it's IDs, if new nodes
-    * not creared - returns empty list
-    */
-    long_array GetLastCreatedNodes();
-
-   /*!
-    * If during last operation of MeshEditor some elements were
-    * created this method returns list of it's IDs, if new elements
-    * not creared - returns empty list
-    */
-    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 
+     * \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 ); 
+     */
+    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 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, 
+     * \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 
+     * 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 );
+    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, 
+     * \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
+     * Works as DoubleNodeGroups() described above, but returns a new group with
+     * newly created nodes.
+     * \param theNodes - list of groups of nodes to be doubled
+     * \param theModifiedElems - list of groups of elements to be updated.
+     * \return a new group with newly created nodes
+     * \sa DoubleNodeGroups()
+     */
+    SMESH_Group DoubleNodeGroupsNew( 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 
+     * \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 ); 
+                            in long_array theAffectedElems );
 
     /*!
      * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
@@ -844,7 +930,7 @@ module SMESH
      *        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 );
@@ -858,14 +944,13 @@ module SMESH
      *        should be associated to.
      * \return TRUE if operation has been completed successfully, FALSE otherwise
      * \sa DoubleNodes(), DoubleNodeGroups(), DoubleNodeElemGroupNew()
-    */
-    boolean DoubleNodeElemGroup( in SMESH_GroupBase theElems, 
+     */
+    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 
+     * 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
@@ -873,11 +958,29 @@ module SMESH
      *        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 );
-    
+     */
+    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.
+     * Works as DoubleNodeElemGroup() described above, but returns two new groups:
+     * a group of newly created elements and a group of newly created nodes
+     * \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.
+     * \param theElemGroupNeeded - to create group of new elements or not
+     * \param theNodeGroupNeeded - to create group of new nodes or not
+     * \return two new groups of newly created elements (1st) and nodes (2nd)
+     * \sa DoubleNodeElemGroup()
+     */
+    ListOfGroups DoubleNodeElemGroup2New( in SMESH_GroupBase theElems,
+                                          in SMESH_GroupBase theNodesNot,
+                                          in SMESH_GroupBase theAffectedElems,
+                                          in boolean         theElemGroupNeeded,
+                                          in boolean         theNodeGroupNeeded);
+
     /*!
      * \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.
@@ -888,10 +991,10 @@ module SMESH
      *        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 );
+     */
+    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
@@ -901,11 +1004,43 @@ module SMESH
      * \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()
-    */
+     * \sa DoubleNodeGroup(), DoubleNodes(), DoubleNodeElemGroupsNew()
+     */
     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.
+     * Works as DoubleNodeElemGroups() described above, but returns a new group with
+     * newly created elements.
+     * \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 a new group with newly created elements
+     * \sa DoubleNodeElemGroups()
+     */
+    SMESH_Group DoubleNodeElemGroupsNew( in ListOfGroups theElems,
+                                         in ListOfGroups theNodesNot,
+                                         in ListOfGroups theAffectedElems );
+    /*!
+     * \brief Creates a hole in a mesh by doubling the nodes of some particular elements.
+     * Works as DoubleNodeElemGroups() described above, but returns two new groups:
+     * a group of newly created elements and a group of newly created nodes.
+     * \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.
+     * \param theElemGroupNeeded - to create group of new elements or not
+     * \param theNodeGroupNeeded - to create group of new nodes or not
+     * \return two new groups of newly created elements (1st) and nodes (2nd)
+     * \sa DoubleNodeElemGroups()
+     */
+    ListOfGroups DoubleNodeElemGroups2New( in ListOfGroups theElems,
+                                           in ListOfGroups theNodesNot,
+                                           in ListOfGroups theAffectedElems,
+                                           in boolean         theElemGroupNeeded,
+                                           in boolean         theNodeGroupNeeded );
 
     /*!
      * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
@@ -917,11 +1052,26 @@ module SMESH
      *        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 Identify the elements that will be affected by node duplication (actual duplication is not performed).
+     * This method is the first step of DoubleNodeElemGroupsInRegion.
+     * \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 groups of affected elements
+     * \sa DoubleNodeElemGroupsInRegion()
+     */
+    ListOfGroups AffectedElemGroupsInRegion( 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
@@ -933,24 +1083,86 @@ module SMESH
      * \brief Creates missing boundary elements
      *  \param elements - elements whose boundary is to be checked
      *  \param dimension - defines type of boundary elements to create
+     *    BND_1DFROM3D creates mesh edges on all borders of free facets of 3D elements.
      *  \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 
+     *                          else only boundary 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);
+    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);
+    /*!
+     * \brief Creates missing boundary elements around either the whole mesh or 
+     *    groups of 2D elements
+     *  \param dimension - defines type of boundary elements to create
+     *  \param groupName - a name of group to store all boundary elements in,
+     *    "" means not to create the group
+     *  \param meshName - a name of a new mesh, which is a copy of the initial 
+     *    mesh + created boundary elements; "" means not to create the new mesh
+     *  \param toCopyAll - if true, the whole initial mesh will be copied into
+     *    the new mesh else only boundary elements will be copied into the new mesh
+     *  \param groups - optional groups of 2D elements to make boundary around
+     *  \param mesh - returns the mesh where elements were added to
+     *  \param group - returns the created group, if any
+     *  \retval long - number of added boundary elements
+     */
+    long MakeBoundaryElements(in Bnd_Dimension   dimension,
+                              in string          groupName,
+                              in string          meshName,
+                              in boolean         toCopyAll,
+                              in ListOfIDSources groups,
+                              out SMESH_Mesh     mesh,
+                              out SMESH_Group    group) raises (SALOME::SALOME_Exception);
+
+    /*!
+     * \brief Double nodes on shared faces between groups of volumes and create flat elements on demand.
+     * Flat elements are mainly used by some types of mechanic calculations.
+     *
+     * 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 ) 
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     * \brief Double nodes on some external faces and create flat elements.
+     * Flat elements are mainly used by some types of mechanic calculations.
+     *
+     * Each group of the list must be constituted of faces.
+     * Triangles are transformed in prisms, and quadrangles in hexahedrons.
+     * \param theGroupsOfFaces - list of groups of faces
+     * \return TRUE if operation has been completed successfully, FALSE otherwise
+     */
+    boolean CreateFlatElementsOnFacesGroups( in ListOfGroups theGroupsOfFaces ); 
 
+    /*!
+     *  \brief identify all the elements around a geom shape, get the faces delimiting the hole
+     *  Build groups of volume to remove, groups of faces to replace on the skin of the object,
+     *  groups of faces to remove insidethe object, (idem edges).
+     *  Build ordered list of nodes at the border of each group of faces to replace (to be used to build a geom subshape)
+     */
+    void CreateHoleSkin(in double radius,
+                        in GEOM::GEOM_Object theShape,
+                        in string groupName,
+                        in double_array theNodesCoords,
+                        out array_of_long_array GroupsOfNodes) raises (SALOME::SALOME_Exception);
   };
 };