Salome HOME
PAL0023627: [IMACS] ASERIS: project point to the mesh
[modules/smesh.git] / src / SMESH_I / SMESH_MeshEditor_i.hxx
index 87682048b943b4f3a414934a7b1351f5a89ca9a9..28d5e730737ebab69b01d20af413c25b1e6d9e68 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2014  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2016  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
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
+//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's classes
 //  File   : SMESH_MeshEditor_i.hxx
 //  Author : Nicolas REJNERI
 //  Module : SMESH
 #include "SMESH_PythonDump.hxx"
 #include "SMESH_MeshEditor.hxx"
 #include <list>
+#include <string>
 
 class SMESH_Mesh_i;
 
 namespace MeshEditor_I {
   struct TPreviewMesh;
+  struct ExtrusionParams;
 }
 
-class SMESH_MeshEditor_i: public POA_SMESH::SMESH_MeshEditor
+class SMESH_I_EXPORT SMESH_MeshEditor_i: public POA_SMESH::SMESH_MeshEditor
 {
 public:
   SMESH_MeshEditor_i(SMESH_Mesh_i * theMesh, bool isPreview);
@@ -56,6 +58,8 @@ public:
    */
   int GetMeshId() const { return myMesh->GetId(); }
 
+  SMESH::SMESH_Mesh_ptr GetMesh();
+
   // --- CORBA
 
   /*!
@@ -79,7 +83,7 @@ public:
    */
   void ClearLastCreated() throw (SALOME::SALOME_Exception);
   /*!
-   * \brief Returns description of an error/warning occured during the last operation
+   * \brief Returns description of an error/warning occurred during the last operation
    */
   SMESH::ComputeError* GetLastError() throw (SALOME::SALOME_Exception);
 
@@ -104,7 +108,7 @@ public:
    */
   CORBA::Long AddNode(CORBA::Double x, CORBA::Double y, CORBA::Double z)
     throw (SALOME::SALOME_Exception);
-  CORBA::Long Add0DElement(CORBA::Long IDOfNode)
+  CORBA::Long Add0DElement(CORBA::Long IDOfNode, CORBA::Boolean DuplicateElements)
     throw (SALOME::SALOME_Exception);
   CORBA::Long AddBall(CORBA::Long IDOfNodem, CORBA::Double diameter)
     throw (SALOME::SALOME_Exception);
@@ -114,6 +118,8 @@ public:
     throw (SALOME::SALOME_Exception);
   CORBA::Long AddPolygonalFace(const SMESH::long_array & IDsOfNodes)
     throw (SALOME::SALOME_Exception);
+  CORBA::Long AddQuadPolygonalFace(const SMESH::long_array & IDsOfNodes)
+    throw (SALOME::SALOME_Exception);
   CORBA::Long AddVolume(const SMESH::long_array & IDsOfNodes)
     throw (SALOME::SALOME_Exception);
   CORBA::Long AddPolyhedralVolume(const SMESH::long_array & IDsOfNodes,
@@ -128,11 +134,13 @@ public:
    *  \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.
+   *  \param theDuplicateElements to add one more 0D element to a node or not
    *  \return an object (a new group or a temporary SMESH_IDSource) holding
    *          ids of new and/or found 0D elements.
    */
   SMESH::SMESH_IDSource_ptr Create0DElementsOnAllNodes(SMESH::SMESH_IDSource_ptr theObject,
-                                                       const char*               theGroupName)
+                                                       const char*               theGroupName,
+                                                       CORBA::Boolean            theDuplicateElements)
     throw (SALOME::SALOME_Exception);
 
   /*!
@@ -203,8 +211,20 @@ public:
                          const SMESH::DirStruct&   theDirection,
                          CORBA::Long               theFace,
                          const SMESH::PointStruct& thePoint) throw (SALOME::SALOME_Exception);
+  /*!
+   * \brief Reorient faces basing on orientation of adjacent volumes.
+   * \param faces - a list of objects containing face to reorient
+   * \param volumes - an object containing volumes.
+   * \param outsideNormal - to orient faces to have their normal
+   *        pointing either \a outside or \a inside the adjacent volumes.
+   * \return number of reoriented faces.
+   */
+  CORBA::Long Reorient2DBy3D(const SMESH::ListOfIDSources & faces,
+                             SMESH::SMESH_IDSource_ptr      volumes,
+                             CORBA::Boolean                 outsideNormal)
+    throw (SALOME::SALOME_Exception);
 
-  // Split/Join faces
+  // Split/Join
   CORBA::Boolean TriToQuad       (const SMESH::long_array &   IDsOfElements,
                                   SMESH::NumericalFunctor_ptr Criterion,
                                   CORBA::Double               MaxAngle)
@@ -239,6 +259,8 @@ public:
                                           CORBA::Short               methodFlags,
                                           CORBA::Boolean             allDomains)
     throw (SALOME::SALOME_Exception);
+  void           SplitBiQuadraticIntoLinear(const SMESH::ListOfIDSources& elems)
+    throw (SALOME::SALOME_Exception);
 
   CORBA::Boolean Smooth(const SMESH::long_array &              IDsOfElements,
                         const SMESH::long_array &              IDsOfFixedNodes,
@@ -295,109 +317,62 @@ public:
   void RenumberNodes() throw (SALOME::SALOME_Exception);
   void RenumberElements() throw (SALOME::SALOME_Exception);
 
-  void RotationSweep(const SMESH::long_array & IDsOfElements,
-                     const SMESH::AxisStruct & Axis,
-                     CORBA::Double             AngleInRadians,
-                     CORBA::Long               NbOfSteps,
-                     CORBA::Double             Tolerance)
-    throw (SALOME::SALOME_Exception);
-  void RotationSweepObject(SMESH::SMESH_IDSource_ptr theObject,
-                           const SMESH::AxisStruct & Axis,
-                           CORBA::Double             AngleInRadians,
-                           CORBA::Long               NbOfSteps,
-                           CORBA::Double             Tolerance)
-    throw (SALOME::SALOME_Exception);
-  void RotationSweepObject1D(SMESH::SMESH_IDSource_ptr theObject,
-                             const SMESH::AxisStruct & Axis,
-                             CORBA::Double             AngleInRadians,
-                             CORBA::Long               NbOfSteps,
-                             CORBA::Double             Tolerance)
-    throw (SALOME::SALOME_Exception);
-  void RotationSweepObject2D(SMESH::SMESH_IDSource_ptr theObject,
-                             const SMESH::AxisStruct & Axis,
-                             CORBA::Double             AngleInRadians,
-                             CORBA::Long               NbOfSteps,
-                             CORBA::Double             Tolerance)
-    throw (SALOME::SALOME_Exception);
-
-  void ExtrusionSweep(const SMESH::long_array & IDsOfElements,
-                      const SMESH::DirStruct &  StepVector,
-                      CORBA::Long               NbOfSteps)
-    throw (SALOME::SALOME_Exception);
-  void ExtrusionSweep0D(const SMESH::long_array & IDsOfElements,
-                      const SMESH::DirStruct &  StepVector,
-                      CORBA::Long               NbOfSteps)
-    throw (SALOME::SALOME_Exception);
-
-  void ExtrusionSweepObject(SMESH::SMESH_IDSource_ptr theObject,
-                            const SMESH::DirStruct &  StepVector,
-                            CORBA::Long               NbOfSteps)
-    throw (SALOME::SALOME_Exception);
-
-  void ExtrusionSweepObject0D(SMESH::SMESH_IDSource_ptr theObject,
-                              const SMESH::DirStruct &  StepVector,
-                              CORBA::Long               NbOfSteps)
-    throw (SALOME::SALOME_Exception);
-  void ExtrusionSweepObject1D(SMESH::SMESH_IDSource_ptr theObject,
-                              const SMESH::DirStruct &  StepVector,
-                              CORBA::Long               NbOfSteps)
-    throw (SALOME::SALOME_Exception);
-  void ExtrusionSweepObject2D(SMESH::SMESH_IDSource_ptr theObject,
-                              const SMESH::DirStruct &  StepVector,
-                              CORBA::Long               NbOfSteps)
-    throw (SALOME::SALOME_Exception);
-  void AdvancedExtrusion(const SMESH::long_array & theIDsOfElements,
-                         const SMESH::DirStruct &  theStepVector,
-                         CORBA::Long               theNbOfSteps,
-                         CORBA::Long               theExtrFlags,
-                         CORBA::Double             theSewTolerance)
-    throw (SALOME::SALOME_Exception);
-
-  SMESH::SMESH_MeshEditor::Extrusion_Error
-  ExtrusionAlongPath(const SMESH::long_array &   IDsOfElements,
-                     SMESH::SMESH_Mesh_ptr       PathMesh,
-                     GEOM::GEOM_Object_ptr       PathShape,
-                     CORBA::Long                 NodeStart,
-                     CORBA::Boolean              HasAngles,
-                     const SMESH::double_array & Angles,
-                     CORBA::Boolean              HasRefPoint,
-                     const SMESH::PointStruct &  RefPoint)
-    throw (SALOME::SALOME_Exception);
-
-  SMESH::SMESH_MeshEditor::Extrusion_Error
-  ExtrusionAlongPathObject(SMESH::SMESH_IDSource_ptr   theObject,
-                           SMESH::SMESH_Mesh_ptr       PathMesh,
-                           GEOM::GEOM_Object_ptr       PathShape,
-                           CORBA::Long                 NodeStart,
-                           CORBA::Boolean              HasAngles,
-                           const SMESH::double_array & Angles,
-                           CORBA::Boolean              HasRefPoint,
-                           const SMESH::PointStruct &  RefPoint)
-    throw (SALOME::SALOME_Exception);
-  SMESH::SMESH_MeshEditor::Extrusion_Error
-  ExtrusionAlongPathObject1D(SMESH::SMESH_IDSource_ptr   theObject,
-                             SMESH::SMESH_Mesh_ptr       PathMesh,
-                             GEOM::GEOM_Object_ptr       PathShape,
-                             CORBA::Long                 NodeStart,
-                             CORBA::Boolean              HasAngles,
-                             const SMESH::double_array & Angles,
-                             CORBA::Boolean              HasRefPoint,
-                             const SMESH::PointStruct &  RefPoint)
-    throw (SALOME::SALOME_Exception);
-  SMESH::SMESH_MeshEditor::Extrusion_Error
-  ExtrusionAlongPathObject2D(SMESH::SMESH_IDSource_ptr   theObject,
-                             SMESH::SMESH_Mesh_ptr       PathMesh,
-                             GEOM::GEOM_Object_ptr       PathShape,
-                             CORBA::Long                 NodeStart,
-                             CORBA::Boolean              HasAngles,
-                             const SMESH::double_array & Angles,
-                             CORBA::Boolean              HasRefPoint,
-                             const SMESH::PointStruct &  RefPoint)
+  SMESH::ListOfGroups* RotationSweepObjects(const SMESH::ListOfIDSources & nodes,
+                                            const SMESH::ListOfIDSources & edges,
+                                            const SMESH::ListOfIDSources & faces,
+                                            const SMESH::AxisStruct &      Axis,
+                                            CORBA::Double                  AngleInRadians,
+                                            CORBA::Long                    NbOfSteps,
+                                            CORBA::Double                  Tolerance,
+                                            CORBA::Boolean                 toMakeGroups)
+    throw (SALOME::SALOME_Exception);
+
+  SMESH::ListOfGroups* ExtrusionSweepObjects(const SMESH::ListOfIDSources & nodes,
+                                             const SMESH::ListOfIDSources & edges,
+                                             const SMESH::ListOfIDSources & faces,
+                                             const SMESH::DirStruct &       stepVector,
+                                             CORBA::Long                    nbOfSteps,
+                                             const SMESH::double_array &    theScaleFactors,
+                                             CORBA::Boolean                 theLinearVariation,
+                                             const SMESH::double_array &    theBasePoint,
+                                             CORBA::Boolean                 toMakeGroups)
+    throw (SALOME::SALOME_Exception);
+
+  SMESH::ListOfGroups* ExtrusionByNormal(const SMESH::ListOfIDSources& objects,
+                                         CORBA::Double                 stepSize,
+                                         CORBA::Long                   nbOfSteps,
+                                         CORBA::Boolean                byAverageNormal,
+                                         CORBA::Boolean                useInputElemsOnly,
+                                         CORBA::Boolean                makeGroups,
+                                         CORBA::Short                  dim)
+    throw (SALOME::SALOME_Exception);
+  SMESH::ListOfGroups*  AdvancedExtrusion(const SMESH::long_array & theIDsOfElements,
+                                          const SMESH::DirStruct &  theStepVector,
+                                          CORBA::Long               theNbOfSteps,
+                                          CORBA::Long               theExtrFlags,
+                                          CORBA::Double             theSewTolerance,
+                                          CORBA::Boolean            theMakeGroups)
+    throw (SALOME::SALOME_Exception);
+
+  SMESH::ListOfGroups*
+    ExtrusionAlongPathObjects(const SMESH::ListOfIDSources & nodes,
+                              const SMESH::ListOfIDSources & edges,
+                              const SMESH::ListOfIDSources & faces,
+                              SMESH::SMESH_IDSource_ptr      PathMesh,
+                              GEOM::GEOM_Object_ptr          PathShape,
+                              CORBA::Long                    NodeStart,
+                              CORBA::Boolean                 HasAngles,
+                              const SMESH::double_array &    Angles,
+                              CORBA::Boolean                 LinearVariation,
+                              CORBA::Boolean                 HasRefPoint,
+                              const SMESH::PointStruct &     RefPoint,
+                              bool                           MakeGroups,
+                              SMESH::SMESH_MeshEditor::Extrusion_Error& Error)
     throw (SALOME::SALOME_Exception);
 
   SMESH::double_array* LinearAnglesVariation(SMESH::SMESH_Mesh_ptr       PathMesh,
-                                             GEOM::GEOM_Object_ptr       PathShape,
-                                             const SMESH::double_array & Angles);
+                                               GEOM::GEOM_Object_ptr       PathShape,
+                                               const SMESH::double_array & Angles);
 
   void Mirror(const SMESH::long_array &           IDsOfElements,
               const SMESH::AxisStruct &           Axis,
@@ -428,128 +403,6 @@ public:
                     CORBA::Boolean             Copy)
     throw (SALOME::SALOME_Exception);
 
-  SMESH::ListOfGroups* RotationSweepMakeGroups(const SMESH::long_array& IDsOfElements,
-                                               const SMESH::AxisStruct& Axix,
-                                               CORBA::Double            AngleInRadians,
-                                               CORBA::Long              NbOfSteps,
-                                               CORBA::Double            Tolerance)
-    throw (SALOME::SALOME_Exception);
-  SMESH::ListOfGroups* RotationSweepObjectMakeGroups(SMESH::SMESH_IDSource_ptr Object,
-                                                     const SMESH::AxisStruct&  Axix,
-                                                     CORBA::Double             AngleInRadians,
-                                                     CORBA::Long               NbOfSteps,
-                                                     CORBA::Double             Tolerance)
-    throw (SALOME::SALOME_Exception);
-  SMESH::ListOfGroups* RotationSweepObject1DMakeGroups(SMESH::SMESH_IDSource_ptr Object,
-                                                       const SMESH::AxisStruct&  Axix,
-                                                       CORBA::Double             AngleInRadians,
-                                                       CORBA::Long               NbOfSteps,
-                                                       CORBA::Double             Tolerance)
-    throw (SALOME::SALOME_Exception);
-  SMESH::ListOfGroups* RotationSweepObject2DMakeGroups(SMESH::SMESH_IDSource_ptr Object,
-                                                       const SMESH::AxisStruct&  Axix,
-                                                       CORBA::Double             AngleInRadians,
-                                                       CORBA::Long               NbOfSteps,
-                                                       CORBA::Double             Tolerance)
-    throw (SALOME::SALOME_Exception);
-  SMESH::ListOfGroups* ExtrusionSweepMakeGroups(const SMESH::long_array& IDsOfElements,
-                                                const SMESH::DirStruct&  StepVector,
-                                                CORBA::Long              NbOfSteps)
-    throw (SALOME::SALOME_Exception);
-  SMESH::ListOfGroups* ExtrusionSweepMakeGroups0D(const SMESH::long_array& IDsOfElements,
-                                                const SMESH::DirStruct&  StepVector,
-                                                CORBA::Long              NbOfSteps)
-    throw (SALOME::SALOME_Exception);
-
-  SMESH::ListOfGroups* AdvancedExtrusionMakeGroups(const SMESH::long_array& IDsOfElements,
-                                                   const SMESH::DirStruct&  StepVector,
-                                                   CORBA::Long              NbOfSteps,
-                                                   CORBA::Long              ExtrFlags,
-                                                   CORBA::Double            SewTolerance)
-    throw (SALOME::SALOME_Exception);
-  SMESH::ListOfGroups* ExtrusionSweepObjectMakeGroups(SMESH::SMESH_IDSource_ptr Object,
-                                                      const SMESH::DirStruct&   StepVector,
-                                                      CORBA::Long               NbOfSteps)
-    throw (SALOME::SALOME_Exception);
-  SMESH::ListOfGroups* ExtrusionSweepObject0DMakeGroups(SMESH::SMESH_IDSource_ptr Object,
-                                                        const SMESH::DirStruct&   StepVector,
-                                                        CORBA::Long               NbOfSteps)
-    throw (SALOME::SALOME_Exception);
-  SMESH::ListOfGroups* ExtrusionSweepObject1DMakeGroups(SMESH::SMESH_IDSource_ptr Object,
-                                                        const SMESH::DirStruct&   StepVector,
-                                                        CORBA::Long               NbOfSteps)
-    throw (SALOME::SALOME_Exception);
-  SMESH::ListOfGroups* ExtrusionSweepObject2DMakeGroups(SMESH::SMESH_IDSource_ptr Object,
-                                                        const SMESH::DirStruct&   StepVector,
-                                                        CORBA::Long               NbOfSteps)
-    throw (SALOME::SALOME_Exception);
-  SMESH::ListOfGroups* ExtrusionAlongPathMakeGroups(const SMESH::long_array&   IDsOfElements,
-                                                    SMESH::SMESH_Mesh_ptr      PathMesh,
-                                                    GEOM::GEOM_Object_ptr      PathShape,
-                                                    CORBA::Long                NodeStart,
-                                                    CORBA::Boolean             HasAngles,
-                                                    const SMESH::double_array& Angles,
-                                                    CORBA::Boolean             HasRefPoint,
-                                                    const SMESH::PointStruct&  RefPoint,
-                                                    SMESH::SMESH_MeshEditor::Extrusion_Error& Error)
-    throw (SALOME::SALOME_Exception);
-  SMESH::ListOfGroups* ExtrusionAlongPathObjectMakeGroups(SMESH::SMESH_IDSource_ptr  Object,
-                                                          SMESH::SMESH_Mesh_ptr      PathMesh,
-                                                          GEOM::GEOM_Object_ptr      PathShape,
-                                                          CORBA::Long                NodeStart,
-                                                          CORBA::Boolean             HasAngles,
-                                                          const SMESH::double_array& Angles,
-                                                          CORBA::Boolean             HasRefPoint,
-                                                          const SMESH::PointStruct&  RefPoint,
-                                                          SMESH::SMESH_MeshEditor::Extrusion_Error& Error)
-    throw (SALOME::SALOME_Exception);
-  SMESH::ListOfGroups* ExtrusionAlongPathObject1DMakeGroups(SMESH::SMESH_IDSource_ptr  Object,
-                                                            SMESH::SMESH_Mesh_ptr      PathMesh,
-                                                            GEOM::GEOM_Object_ptr      PathShape,
-                                                            CORBA::Long                NodeStart,
-                                                            CORBA::Boolean             HasAngles,
-                                                            const SMESH::double_array& Angles,
-                                                            CORBA::Boolean             HasRefPoint,
-                                                            const SMESH::PointStruct&  RefPoint,
-                                                            SMESH::SMESH_MeshEditor::Extrusion_Error& Error)
-    throw (SALOME::SALOME_Exception);
-  SMESH::ListOfGroups* ExtrusionAlongPathObject2DMakeGroups(SMESH::SMESH_IDSource_ptr  Object,
-                                                            SMESH::SMESH_Mesh_ptr      PathMesh,
-                                                            GEOM::GEOM_Object_ptr      PathShape,
-                                                            CORBA::Long                NodeStart,
-                                                            CORBA::Boolean             HasAngles,
-                                                            const SMESH::double_array& Angles,
-                                                            CORBA::Boolean             HasRefPoint,
-                                                            const SMESH::PointStruct&  RefPoint,
-                                                            SMESH::SMESH_MeshEditor::Extrusion_Error& Error)
-    throw (SALOME::SALOME_Exception);
-
-  // skl 04.06.2009 
-  SMESH::ListOfGroups* ExtrusionAlongPathObjX(SMESH::SMESH_IDSource_ptr  Object,
-                                              SMESH::SMESH_IDSource_ptr  Path,
-                                              CORBA::Long                NodeStart,
-                                              CORBA::Boolean             HasAngles,
-                                              const SMESH::double_array& Angles,
-                                              CORBA::Boolean             LinearVariation,
-                                              CORBA::Boolean             HasRefPoint,
-                                              const SMESH::PointStruct&  RefPoint,
-                                              CORBA::Boolean             MakeGroups,
-                                              SMESH::ElementType         ElemType,
-                                              SMESH::SMESH_MeshEditor::Extrusion_Error& Error)
-    throw (SALOME::SALOME_Exception);
-  SMESH::ListOfGroups* ExtrusionAlongPathX(const SMESH::long_array&   IDsOfElements,
-                                           SMESH::SMESH_IDSource_ptr  Path,
-                                           CORBA::Long                NodeStart,
-                                           CORBA::Boolean             HasAngles,
-                                           const SMESH::double_array& Angles,
-                                           CORBA::Boolean             LinearVariation,
-                                           CORBA::Boolean             HasRefPoint,
-                                           const SMESH::PointStruct&  RefPoint,
-                                           CORBA::Boolean             MakeGroups,
-                                           SMESH::ElementType         ElemType,
-                                           SMESH::SMESH_MeshEditor::Extrusion_Error& Error)
-    throw (SALOME::SALOME_Exception);
-
   SMESH::ListOfGroups* MirrorMakeGroups(const SMESH::long_array&            IDsOfElements,
                                         const SMESH::AxisStruct&            Mirror,
                                         SMESH::SMESH_MeshEditor::MirrorType MirrorType)
@@ -619,26 +472,39 @@ public:
                                        const SMESH::double_array& theScaleFact)
     throw (SALOME::SALOME_Exception);
 
-  SMESH::SMESH_Mesh_ptr ScaleMakeMesh(SMESH::SMESH_IDSource_ptr Object,
-                                      const SMESH::PointStruct& Point,
+  SMESH::SMESH_Mesh_ptr ScaleMakeMesh(SMESH::SMESH_IDSource_ptr  Object,
+                                      const SMESH::PointStruct&  Point,
                                       const SMESH::double_array& theScaleFact,
-                                      CORBA::Boolean            CopyGroups,
-                                      const char*               MeshName)
+                                      CORBA::Boolean             CopyGroups,
+                                      const char*                MeshName)
+    throw (SALOME::SALOME_Exception);
+
+  SMESH::SMESH_Mesh_ptr Offset( SMESH::SMESH_IDSource_ptr theObject,
+                                CORBA::Double             Value,
+                                CORBA::Boolean            CopyGroups,
+                                CORBA::Boolean            CopyElements,
+                                const char*               MeshName,
+                                SMESH::ListOfGroups_out   Groups)
     throw (SALOME::SALOME_Exception);
 
   void FindCoincidentNodes (CORBA::Double                  Tolerance,
-                            SMESH::array_of_long_array_out GroupsOfNodes)
+                            SMESH::array_of_long_array_out GroupsOfNodes,
+                            CORBA::Boolean                 SeparateCornersAndMedium)
     throw (SALOME::SALOME_Exception);
   void FindCoincidentNodesOnPart(SMESH::SMESH_IDSource_ptr      Object,
                                  CORBA::Double                  Tolerance,
-                                 SMESH::array_of_long_array_out GroupsOfNodes)
+                                 SMESH::array_of_long_array_out GroupsOfNodes,
+                                 CORBA::Boolean                 SeparateCornersAndMedium)
     throw (SALOME::SALOME_Exception);
   void FindCoincidentNodesOnPartBut(SMESH::SMESH_IDSource_ptr      Object,
                                     CORBA::Double                  Tolerance,
                                     SMESH::array_of_long_array_out GroupsOfNodes,
-                                    const SMESH::ListOfIDSources&  ExceptSubMeshOrGroups)
+                                    const SMESH::ListOfIDSources&  ExceptSubMeshOrGroups,
+                                    CORBA::Boolean                 SeparateCornersAndMedium)
     throw (SALOME::SALOME_Exception);
-  void MergeNodes (const SMESH::array_of_long_array& GroupsOfNodes)
+  void MergeNodes (const SMESH::array_of_long_array& GroupsOfNodes,
+                   const SMESH::ListOfIDSources&     NodesToKeep,
+                   CORBA::Boolean                    AvoidMakingHoles )
     throw (SALOME::SALOME_Exception);
   void FindEqualElements(SMESH::SMESH_IDSource_ptr      Object,
                          SMESH::array_of_long_array_out GroupsOfElementsID)
@@ -669,7 +535,7 @@ public:
                                          SMESH::ElementType type)
     throw (SALOME::SALOME_Exception);
   /*!
-   * Searching among the given elements, return elements of given 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
    */
@@ -680,6 +546,20 @@ public:
                                               SMESH::ElementType        type)
     throw (SALOME::SALOME_Exception);
 
+  /*!
+   * Project a point to a mesh object.
+   * Return ID of an element of given type where the given point is projected
+   * and coordinates of the projection point.
+   * In the case if nothing found, return -1 and []
+   */
+  CORBA::Long ProjectPoint(CORBA::Double             x,
+                           CORBA::Double             y,
+                           CORBA::Double             z,
+                           SMESH::SMESH_IDSource_ptr meshObject,
+                           SMESH::ElementType        type,
+                           SMESH::double_array_out   projecton)
+    throw (SALOME::SALOME_Exception);
+
   /*!
    * 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.
@@ -687,41 +567,69 @@ public:
   CORBA::Short GetPointState(CORBA::Double x, CORBA::Double y, CORBA::Double z)
     throw (SALOME::SALOME_Exception);
 
-  SMESH::SMESH_MeshEditor::Sew_Error
-  SewFreeBorders(CORBA::Long FirstNodeID1,
-                 CORBA::Long SecondNodeID1,
-                 CORBA::Long LastNodeID1,
-                 CORBA::Long FirstNodeID2,
-                 CORBA::Long SecondNodeID2,
-                 CORBA::Long LastNodeID2,
-                 CORBA::Boolean CreatePolygons,
-                 CORBA::Boolean CreatePolyedrs)
+  /*!
+   * Check if a 2D mesh is manifold
+   */
+  CORBA::Boolean IsManifold()
     throw (SALOME::SALOME_Exception);
-  SMESH::SMESH_MeshEditor::Sew_Error
-  SewConformFreeBorders(CORBA::Long FirstNodeID1,
-                        CORBA::Long SecondNodeID1,
-                        CORBA::Long LastNodeID1,
-                        CORBA::Long FirstNodeID2,
-                        CORBA::Long SecondNodeID2)
+
+  /*!
+   * Check if orientation of 2D elements is coherent
+   */
+  CORBA::Boolean IsCoherentOrientation2D()
     throw (SALOME::SALOME_Exception);
-  SMESH::SMESH_MeshEditor::Sew_Error
-  SewBorderToSide(CORBA::Long FirstNodeIDOnFreeBorder,
-                  CORBA::Long SecondNodeIDOnFreeBorder,
-                  CORBA::Long LastNodeIDOnFreeBorder,
-                  CORBA::Long FirstNodeIDOnSide,
-                  CORBA::Long LastNodeIDOnSide,
-                  CORBA::Boolean CreatePolygons,
-                  CORBA::Boolean CreatePolyedrs)
+
+  /*!
+   * Returns all or only closed FreeBorder's.
+   */
+  SMESH::ListOfFreeBorders* FindFreeBorders(CORBA::Boolean closedOnly)
     throw (SALOME::SALOME_Exception);
-  SMESH::SMESH_MeshEditor::Sew_Error
-  SewSideElements(const SMESH::long_array& IDsOfSide1Elements,
-                  const SMESH::long_array& IDsOfSide2Elements,
-                  CORBA::Long NodeID1OfSide1ToMerge,
-                  CORBA::Long NodeID1OfSide2ToMerge,
-                  CORBA::Long NodeID2OfSide1ToMerge,
-                  CORBA::Long NodeID2OfSide2ToMerge)
+
+  /*!
+   * Fill with 2D elements a hole defined by a FreeBorder.
+   * Optionally add new faces to a given group, which is returned
+   */
+  SMESH::SMESH_Group_ptr FillHole(const SMESH::FreeBorder& hole,
+                                  const char*              groupName)
     throw (SALOME::SALOME_Exception);
 
+  SMESH::CoincidentFreeBorders* FindCoincidentFreeBorders(CORBA::Double tolerance);
+  CORBA::Short SewCoincidentFreeBorders(const SMESH::CoincidentFreeBorders& freeBorders,
+                                        CORBA::Boolean                      createPolygons,
+                                        CORBA::Boolean                      createPolyedrs)
+    throw (SALOME::SALOME_Exception);
+
+  SMESH::SMESH_MeshEditor::Sew_Error
+    SewFreeBorders(CORBA::Long FirstNodeID1,
+                   CORBA::Long SecondNodeID1,
+                   CORBA::Long LastNodeID1,
+                   CORBA::Long FirstNodeID2,
+                   CORBA::Long SecondNodeID2,
+                   CORBA::Long LastNodeID2,
+                   CORBA::Boolean CreatePolygons,
+                   CORBA::Boolean CreatePolyedrs) throw (SALOME::SALOME_Exception);
+  SMESH::SMESH_MeshEditor::Sew_Error
+    SewConformFreeBorders(CORBA::Long FirstNodeID1,
+                          CORBA::Long SecondNodeID1,
+                          CORBA::Long LastNodeID1,
+                          CORBA::Long FirstNodeID2,
+                          CORBA::Long SecondNodeID2) throw (SALOME::SALOME_Exception);
+  SMESH::SMESH_MeshEditor::Sew_Error
+    SewBorderToSide(CORBA::Long FirstNodeIDOnFreeBorder,
+                    CORBA::Long SecondNodeIDOnFreeBorder,
+                    CORBA::Long LastNodeIDOnFreeBorder,
+                    CORBA::Long FirstNodeIDOnSide,
+                    CORBA::Long LastNodeIDOnSide,
+                    CORBA::Boolean CreatePolygons,
+                    CORBA::Boolean CreatePolyedrs) throw (SALOME::SALOME_Exception);
+  SMESH::SMESH_MeshEditor::Sew_Error
+    SewSideElements(const SMESH::long_array& IDsOfSide1Elements,
+                    const SMESH::long_array& IDsOfSide2Elements,
+                    CORBA::Long NodeID1OfSide1ToMerge,
+                    CORBA::Long NodeID1OfSide2ToMerge,
+                    CORBA::Long NodeID2OfSide1ToMerge,
+                    CORBA::Long NodeID2OfSide2ToMerge) throw (SALOME::SALOME_Exception);
+
   /*!
    * Set new nodes for given element.
    * If number of nodes is not corresponded to type of
@@ -923,12 +831,15 @@ public:
    * 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
+   * \param theDomains - list of groups of volumes
+   * \param createJointElems - if TRUE, create the elements
+   * \param onAllBoundaries - if TRUE, the nodes and elements are also create on
+   *        the boundary between \a theDomains and the rest mesh
+   * \return TRUE if operation has been completed successfully, FALSE otherwise
    */
   CORBA::Boolean DoubleNodesOnGroupBoundaries( const SMESH::ListOfGroups& theDomains,
-                                               CORBA::Boolean createJointElems )
+                                               CORBA::Boolean             createJointElems,
+                                               CORBA::Boolean             onAllBoundaries )
     throw (SALOME::SALOME_Exception);
   /*!
    * \brief Double nodes on some external faces and create flat elements.
@@ -953,7 +864,7 @@ public:
                       const char* groupName,
                       const SMESH::double_array& theNodesCoords,
                       SMESH::array_of_long_array_out GroupsOfNodes)
-  throw (SALOME::SALOME_Exception);
+    throw (SALOME::SALOME_Exception);
 
   /*!
    * \brief Generated skin mesh (containing 2D cells) from 3D mesh
@@ -981,7 +892,28 @@ public:
                                    SMESH::SMESH_Group_out group)
     throw (SALOME::SALOME_Exception);
 
-private: //!< private methods
+  /*!
+   * \brief Create a polyline consisting of 1D mesh elements each lying on a 2D element of
+   *        the initial mesh. Positions of new nodes are found by cutting the mesh by the
+   *        plane passing through pairs of points specified by each PolySegment structure.
+   *        If there are several paths connecting a pair of points, the shortest path is
+   *        selected by the module. Position of the cutting plane is defined by the two
+   *        points and an optional vector lying on the plane specified by a PolySegment.
+   *        By default the vector is defined by Mesh module as following. A middle point
+   *        of the two given points is computed. The middle point is projected to the mesh.
+   *        The vector goes from the middle point to the projection point. In case of planar
+   *        mesh, the vector is normal to the mesh.
+   *  \param [inout] segments - PolySegment's defining positions of cutting planes.
+   *        Return the used vector and position of the middle point.
+   *  \param [in] groupName - optional name of a group where created mesh segments will
+   *        be added.
+   */
+  void MakePolyLine(SMESH::ListOfPolySegments& segments,
+                    const char*               groupName)
+    throw (SALOME::SALOME_Exception);
+
+
+ private: //!< private methods
 
   ::SMESH_MeshEditor& getEditor();
 
@@ -1002,51 +934,6 @@ private: //!< private methods
   SMESH::ListOfGroups* getGroups(const std::list<int>* groupIDs)
     throw (SALOME::SALOME_Exception);
 
-  SMESH::ListOfGroups* rotationSweep(const SMESH::long_array & IDsOfElements,
-                                     const SMESH::AxisStruct & Axis,
-                                     CORBA::Double             AngleInRadians,
-                                     CORBA::Long               NbOfSteps,
-                                     CORBA::Double             Tolerance,
-                                     const bool                MakeGroups,
-                                     const SMDSAbs_ElementType ElementType=SMDSAbs_All)
-    throw (SALOME::SALOME_Exception);
-  SMESH::ListOfGroups* extrusionSweep(const SMESH::long_array & IDsOfElements,
-                                      const SMESH::DirStruct &  StepVector,
-                                      CORBA::Long               NbOfSteps,
-                                      bool                      MakeGroups,
-                                      const SMDSAbs_ElementType ElementType=SMDSAbs_All)
-    throw (SALOME::SALOME_Exception);
-  SMESH::ListOfGroups* advancedExtrusion(const SMESH::long_array & theIDsOfElements,
-                                         const SMESH::DirStruct &  theStepVector,
-                                         CORBA::Long               theNbOfSteps,
-                                         CORBA::Long               theExtrFlags,
-                                         CORBA::Double             theSewTolerance,
-                                         const bool                MakeGroups)
-    throw (SALOME::SALOME_Exception);
-  SMESH::ListOfGroups* extrusionAlongPath(const SMESH::long_array &   IDsOfElements,
-                                          SMESH::SMESH_Mesh_ptr       PathMesh,
-                                          GEOM::GEOM_Object_ptr       PathShape,
-                                          CORBA::Long                 NodeStart,
-                                          CORBA::Boolean              HasAngles,
-                                          const SMESH::double_array & Angles,
-                                          CORBA::Boolean              HasRefPoint,
-                                          const SMESH::PointStruct &  RefPoint,
-                                          const bool                  MakeGroups,
-                                          SMESH::SMESH_MeshEditor::Extrusion_Error & Error,
-                                          const SMDSAbs_ElementType   ElementType=SMDSAbs_All)
-    throw (SALOME::SALOME_Exception);
-  SMESH::ListOfGroups* extrusionAlongPathX(const SMESH::long_array &  IDsOfElements,
-                                           SMESH::SMESH_IDSource_ptr  Path,
-                                           CORBA::Long                NodeStart,
-                                           CORBA::Boolean             HasAngles,
-                                           const SMESH::double_array& Angles,
-                                           CORBA::Boolean             LinearVariation,
-                                           CORBA::Boolean             HasRefPoint,
-                                           const SMESH::PointStruct&  RefPoint,
-                                           bool                       MakeGroups,
-                                           const SMDSAbs_ElementType  ElementType,
-                                           SMESH::SMESH_MeshEditor::Extrusion_Error & theError)
-    throw (SALOME::SALOME_Exception);
   SMESH::ListOfGroups* mirror(TIDSortedElemSet &                  IDsOfElements,
                               const SMESH::AxisStruct &           Axis,
                               SMESH::SMESH_MeshEditor::MirrorType MirrorType,
@@ -1083,14 +970,31 @@ private: //!< private methods
 
   SMESH::SMESH_Mesh_ptr makeMesh(const char* theMeshName);
 
-  void dumpGroupsList(SMESH::TPythonDump & theDumpPython, 
+  void dumpGroupsList(SMESH::TPythonDump &        theDumpPython,
                       const SMESH::ListOfGroups * theGroupList);
 
-  string generateGroupName(const string& thePrefix);
+  std::string generateGroupName(const std::string& thePrefix);
 
   void prepareIdSource(SMESH::SMESH_IDSource_ptr theObject);
 
-private: //!< fields
+
+  enum IDSource_Error { IDSource_OK, IDSource_INVALID, IDSource_EMPTY };
+
+  bool idSourceToSet(SMESH::SMESH_IDSource_ptr  theIDSource,
+                     const SMESHDS_Mesh*        theMeshDS,
+                     TIDSortedElemSet&          theElemSet,
+                     const SMDSAbs_ElementType  theType,
+                     const bool                 emptyIfIsMesh = false,
+                     IDSource_Error*            error = 0);
+
+  void findCoincidentNodes( TIDSortedNodeSet &             Nodes,
+                            CORBA::Double                  Tolerance,
+                            SMESH::array_of_long_array_out GroupsOfNodes,
+                            CORBA::Boolean                 SeparateCornersAndMedium);
+
+
+
+ private: //!< fields
 
   SMESH_Mesh_i*                myMesh_i;
   SMESH_Mesh *                 myMesh;
@@ -1103,8 +1007,6 @@ private: //!< fields
 
   // temporary IDSources
   struct _IDSource;
-  // std::list< _IDSource* >      myAuxIDSources;
-  // void                         deleteAuxIDSources();
 };
 
 #endif