Salome HOME
Merge branch 'abn/configuration'
[modules/smesh.git] / src / SMESH_I / SMESH_MeshEditor_i.hxx
1 // Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
10 //
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 // Lesser General Public License for more details.
15 //
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19 //
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22
23 //  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
24 //  File   : SMESH_MeshEditor_i.hxx
25 //  Author : Nicolas REJNERI
26 //  Module : SMESH
27 //
28 #ifndef _SMESH_MESHEDITOR_I_HXX_
29 #define _SMESH_MESHEDIOTR_I_HXX_
30
31 #include "SMESH.hxx"
32
33 #include <SALOMEconfig.h>
34 #include CORBA_SERVER_HEADER(SMESH_MeshEditor)
35
36 #include "SMESH_Mesh.hxx"
37 #include "SMESH_PythonDump.hxx"
38 #include "SMESH_MeshEditor.hxx"
39 #include <list>
40 #include <string>
41
42 class SMESH_Mesh_i;
43
44 namespace MeshEditor_I {
45   struct TPreviewMesh;
46   struct ExtrusionParams;
47 }
48
49 class SMESH_I_EXPORT SMESH_MeshEditor_i: public POA_SMESH::SMESH_MeshEditor
50 {
51 public:
52   SMESH_MeshEditor_i(SMESH_Mesh_i * theMesh, bool isPreview);
53
54   virtual ~ SMESH_MeshEditor_i();
55   /*!
56    * \brief Return edited mesh ID
57    * \retval int - mesh ID
58    */
59   int GetMeshId() const { return myMesh->GetId(); }
60
61   SMESH::SMESH_Mesh_ptr GetMesh();
62
63   // --- CORBA
64
65   /*!
66    * Return data of mesh edition preview
67    */
68   SMESH::MeshPreviewStruct* GetPreviewData() throw (SALOME::SALOME_Exception);
69   /*!
70    * If during last operation of MeshEditor some nodes were
71    * created this method returns list of their IDs, if new nodes
72    * not created - returns an empty list
73    */
74   SMESH::long_array* GetLastCreatedNodes() throw (SALOME::SALOME_Exception);
75   /*!
76    * If during last operation of MeshEditor some elements were
77    * created this method returns list of their IDs, if new elements
78    * not created - returns an empty list
79    */
80   SMESH::long_array* GetLastCreatedElems() throw (SALOME::SALOME_Exception);
81   /*!
82    * \brief Clears sequences of last created elements and nodes 
83    */
84   void ClearLastCreated() throw (SALOME::SALOME_Exception);
85   /*!
86    * \brief Returns description of an error/warning occured during the last operation
87    */
88   SMESH::ComputeError* GetLastError() throw (SALOME::SALOME_Exception);
89
90   /*!
91    * \brief Wrap a sequence of ids in a SMESH_IDSource
92    */
93   SMESH::SMESH_IDSource_ptr MakeIDSource(const SMESH::long_array& IDsOfElements,
94                                          SMESH::ElementType       type);
95   static bool               IsTemporaryIDSource( SMESH::SMESH_IDSource_ptr& idSource );
96   static CORBA::Long*       GetTemporaryIDs( SMESH::SMESH_IDSource_ptr& idSource, int& nbIds );
97
98   CORBA::Boolean RemoveElements(const SMESH::long_array & IDsOfElements)
99     throw (SALOME::SALOME_Exception);
100   CORBA::Boolean RemoveNodes   (const SMESH::long_array & IDsOfNodes)
101     throw (SALOME::SALOME_Exception);
102   CORBA::Long    RemoveOrphanNodes()
103     throw (SALOME::SALOME_Exception);
104
105   /*!
106    * Methods for creation new elements.
107    * Returns ID of created element or 0 if element not created
108    */
109   CORBA::Long AddNode(CORBA::Double x, CORBA::Double y, CORBA::Double z)
110     throw (SALOME::SALOME_Exception);
111   CORBA::Long Add0DElement(CORBA::Long IDOfNode)
112     throw (SALOME::SALOME_Exception);
113   CORBA::Long AddBall(CORBA::Long IDOfNodem, CORBA::Double diameter)
114     throw (SALOME::SALOME_Exception);
115   CORBA::Long AddEdge(const SMESH::long_array & IDsOfNodes)
116     throw (SALOME::SALOME_Exception);
117   CORBA::Long AddFace(const SMESH::long_array & IDsOfNodes)
118     throw (SALOME::SALOME_Exception);
119   CORBA::Long AddPolygonalFace(const SMESH::long_array & IDsOfNodes)
120     throw (SALOME::SALOME_Exception);
121   CORBA::Long AddQuadPolygonalFace(const SMESH::long_array & IDsOfNodes)
122     throw (SALOME::SALOME_Exception);
123   CORBA::Long AddVolume(const SMESH::long_array & IDsOfNodes)
124     throw (SALOME::SALOME_Exception);
125   CORBA::Long AddPolyhedralVolume(const SMESH::long_array & IDsOfNodes,
126                                   const SMESH::long_array & Quantities)
127     throw (SALOME::SALOME_Exception);
128   CORBA::Long AddPolyhedralVolumeByFaces(const SMESH::long_array & IdsOfFaces)
129     throw (SALOME::SALOME_Exception);
130
131   /*!
132    * \brief Create 0D elements on all nodes of the given object except those 
133    *        nodes on which a 0D element already exists.
134    *  \param theObject object on whose nodes 0D elements will be created.
135    *  \param theGroupName optional name of a group to add 0D elements created
136    *         and/or found on nodes of \a theObject.
137    *  \return an object (a new group or a temporary SMESH_IDSource) holding
138    *          ids of new and/or found 0D elements.
139    */
140   SMESH::SMESH_IDSource_ptr Create0DElementsOnAllNodes(SMESH::SMESH_IDSource_ptr theObject,
141                                                        const char*               theGroupName)
142     throw (SALOME::SALOME_Exception);
143
144   /*!
145    * \brief Bind a node to a vertex
146    * \param NodeID - node ID
147    * \param VertexID - vertex ID available through GEOM_Object.GetSubShapeIndices()[0]
148    */
149   void SetNodeOnVertex(CORBA::Long NodeID, CORBA::Long VertexID)
150     throw (SALOME::SALOME_Exception);
151   /*!
152    * \brief Store node position on an edge
153    * \param NodeID - node ID
154    * \param EdgeID - edge ID available through GEOM_Object.GetSubShapeIndices()[0]
155    * \param paramOnEdge - parameter on edge where the node is located
156    */
157   void SetNodeOnEdge(CORBA::Long NodeID, CORBA::Long EdgeID,
158                      CORBA::Double paramOnEdge)
159     throw (SALOME::SALOME_Exception);
160   /*!
161    * \brief Store node position on a face
162    * \param NodeID - node ID
163    * \param FaceID - face ID available through GEOM_Object.GetSubShapeIndices()[0]
164    * \param u - U parameter on face where the node is located
165    * \param v - V parameter on face where the node is located
166    */
167   void SetNodeOnFace(CORBA::Long NodeID, CORBA::Long FaceID,
168                      CORBA::Double u, CORBA::Double v)
169     throw (SALOME::SALOME_Exception);
170   /*!
171    * \brief Bind a node to a solid
172    * \param NodeID - node ID
173    * \param SolidID - vertex ID available through GEOM_Object.GetSubShapeIndices()[0]
174    */
175   void SetNodeInVolume(CORBA::Long NodeID, CORBA::Long SolidID)
176     throw (SALOME::SALOME_Exception);
177   /*!
178    * \brief Bind an element to a shape
179    * \param ElementID - element ID
180    * \param ShapeID - shape ID available through GEOM_Object.GetSubShapeIndices()[0]
181    */
182   void SetMeshElementOnShape(CORBA::Long ElementID, CORBA::Long ShapeID)
183     throw (SALOME::SALOME_Exception);
184
185
186   CORBA::Boolean MoveNode(CORBA::Long NodeID,
187                           CORBA::Double x, CORBA::Double y, CORBA::Double z)
188     throw (SALOME::SALOME_Exception);
189
190   CORBA::Boolean InverseDiag(CORBA::Long NodeID1, CORBA::Long NodeID2)
191     throw (SALOME::SALOME_Exception);
192   CORBA::Boolean DeleteDiag(CORBA::Long NodeID1, CORBA::Long NodeID2)
193     throw (SALOME::SALOME_Exception);
194   CORBA::Boolean Reorient(const SMESH::long_array & IDsOfElements)
195     throw (SALOME::SALOME_Exception);
196   CORBA::Boolean ReorientObject(SMESH::SMESH_IDSource_ptr theObject)
197     throw (SALOME::SALOME_Exception);
198
199   /*!
200    * \brief Reorient faces contained in \a the2Dgroup.
201    * \param the2Dgroup - the mesh or its part to reorient
202    * \param theDirection - desired direction of normal of \a theFace
203    * \param theFace - ID of face whose orientation is checked.
204    *        It can be < 1 then \a thePoint is used to find a face.
205    * \param thePoint - is used to find a face if \a theFace < 1.
206    * \return number of reoriented elements.
207    */
208   CORBA::Long Reorient2D(SMESH::SMESH_IDSource_ptr the2Dgroup,
209                          const SMESH::DirStruct&   theDirection,
210                          CORBA::Long               theFace,
211                          const SMESH::PointStruct& thePoint) throw (SALOME::SALOME_Exception);
212   /*!
213    * \brief Reorient faces basing on orientation of adjacent volumes.
214    * \param faces - a list of objects containing face to reorient
215    * \param volumes - an object containing volumes.
216    * \param outsideNormal - to orient faces to have their normal
217    *        pointing either \a outside or \a inside the adjacent volumes.
218    * \return number of reoriented faces.
219    */
220   CORBA::Long Reorient2DBy3D(const SMESH::ListOfIDSources & faces,
221                              SMESH::SMESH_IDSource_ptr      volumes,
222                              CORBA::Boolean                 outsideNormal)
223     throw (SALOME::SALOME_Exception);
224
225   // Split/Join
226   CORBA::Boolean TriToQuad       (const SMESH::long_array &   IDsOfElements,
227                                   SMESH::NumericalFunctor_ptr Criterion,
228                                   CORBA::Double               MaxAngle)
229     throw (SALOME::SALOME_Exception);
230   CORBA::Boolean TriToQuadObject (SMESH::SMESH_IDSource_ptr   theObject,
231                                   SMESH::NumericalFunctor_ptr Criterion,
232                                   CORBA::Double               MaxAngle)
233     throw (SALOME::SALOME_Exception);
234   CORBA::Boolean QuadToTri       (const SMESH::long_array &   IDsOfElements,
235                                   SMESH::NumericalFunctor_ptr Criterion)
236     throw (SALOME::SALOME_Exception);
237   CORBA::Boolean QuadToTriObject (SMESH::SMESH_IDSource_ptr   theObject,
238                                   SMESH::NumericalFunctor_ptr Criterion)
239     throw (SALOME::SALOME_Exception);
240   void           QuadTo4Tri      (SMESH::SMESH_IDSource_ptr   theObject)
241     throw (SALOME::SALOME_Exception);
242   CORBA::Boolean SplitQuad       (const SMESH::long_array &   IDsOfElements,
243                                   CORBA::Boolean              Diag13)
244     throw (SALOME::SALOME_Exception);
245   CORBA::Boolean SplitQuadObject (SMESH::SMESH_IDSource_ptr   theObject,
246                                   CORBA::Boolean              Diag13)
247     throw (SALOME::SALOME_Exception);
248   CORBA::Long    BestSplit       (CORBA::Long                 IDOfQuad,
249                                   SMESH::NumericalFunctor_ptr Criterion)
250     throw (SALOME::SALOME_Exception);
251   void           SplitVolumesIntoTetra(SMESH::SMESH_IDSource_ptr elems,
252                                        CORBA::Short             methodFlags)
253     throw (SALOME::SALOME_Exception);
254   void           SplitHexahedraIntoPrisms(SMESH::SMESH_IDSource_ptr  elems,
255                                           const SMESH::PointStruct & startHexPoint,
256                                           const SMESH::DirStruct&    facetToSplitNormal,
257                                           CORBA::Short               methodFlags,
258                                           CORBA::Boolean             allDomains)
259     throw (SALOME::SALOME_Exception);
260   void           SplitBiQuadraticIntoLinear(const SMESH::ListOfIDSources& elems)
261     throw (SALOME::SALOME_Exception);
262
263   CORBA::Boolean Smooth(const SMESH::long_array &              IDsOfElements,
264                         const SMESH::long_array &              IDsOfFixedNodes,
265                         CORBA::Long                            MaxNbOfIterations,
266                         CORBA::Double                          MaxAspectRatio,
267                         SMESH::SMESH_MeshEditor::Smooth_Method Method)
268     throw (SALOME::SALOME_Exception);
269   CORBA::Boolean SmoothObject(SMESH::SMESH_IDSource_ptr              theObject,
270                               const SMESH::long_array &              IDsOfFixedNodes,
271                               CORBA::Long                            MaxNbOfIterations,
272                               CORBA::Double                          MaxAspectRatio,
273                               SMESH::SMESH_MeshEditor::Smooth_Method Method)
274     throw (SALOME::SALOME_Exception);
275   CORBA::Boolean SmoothParametric(const SMESH::long_array &              IDsOfElements,
276                                   const SMESH::long_array &              IDsOfFixedNodes,
277                                   CORBA::Long                            MaxNbOfIterations,
278                                   CORBA::Double                          MaxAspectRatio,
279                                   SMESH::SMESH_MeshEditor::Smooth_Method Method)
280     throw (SALOME::SALOME_Exception);
281   CORBA::Boolean SmoothParametricObject(SMESH::SMESH_IDSource_ptr              theObject,
282                                         const SMESH::long_array &              IDsOfFixedNodes,
283                                         CORBA::Long                            MaxNbOfIterations,
284                                         CORBA::Double                          MaxAspectRatio,
285                                         SMESH::SMESH_MeshEditor::Smooth_Method Method)
286     throw (SALOME::SALOME_Exception);
287   CORBA::Boolean smooth(const SMESH::long_array &              IDsOfElements,
288                         const SMESH::long_array &              IDsOfFixedNodes,
289                         CORBA::Long                            MaxNbOfIterations,
290                         CORBA::Double                          MaxAspectRatio,
291                         SMESH::SMESH_MeshEditor::Smooth_Method Method,
292                         bool                                   IsParametric)
293     throw (SALOME::SALOME_Exception);
294   CORBA::Boolean smoothObject(SMESH::SMESH_IDSource_ptr              theObject,
295                               const SMESH::long_array &              IDsOfFixedNodes,
296                               CORBA::Long                            MaxNbOfIterations,
297                               CORBA::Double                          MaxAspectRatio,
298                               SMESH::SMESH_MeshEditor::Smooth_Method Method,
299                               bool                                   IsParametric)
300     throw (SALOME::SALOME_Exception);
301
302   CORBA::Boolean ConvertFromQuadratic()
303     throw (SALOME::SALOME_Exception);
304   void           ConvertFromQuadraticObject(SMESH::SMESH_IDSource_ptr theObject)
305     throw (SALOME::SALOME_Exception);
306   void           ConvertToQuadratic(CORBA::Boolean Force3d)
307     throw (SALOME::SALOME_Exception);
308   void           ConvertToQuadraticObject(CORBA::Boolean            theForce3d,
309                                           SMESH::SMESH_IDSource_ptr theObject)
310     throw (SALOME::SALOME_Exception);
311   void           ConvertToBiQuadratic(CORBA::Boolean            theForce3d,
312                                       SMESH::SMESH_IDSource_ptr theObject)
313     throw (SALOME::SALOME_Exception);
314
315   void RenumberNodes() throw (SALOME::SALOME_Exception);
316   void RenumberElements() throw (SALOME::SALOME_Exception);
317
318   SMESH::ListOfGroups* RotationSweepObjects(const SMESH::ListOfIDSources & nodes,
319                                             const SMESH::ListOfIDSources & edges,
320                                             const SMESH::ListOfIDSources & faces,
321                                             const SMESH::AxisStruct &      Axis,
322                                             CORBA::Double                  AngleInRadians,
323                                             CORBA::Long                    NbOfSteps,
324                                             CORBA::Double                  Tolerance,
325                                             CORBA::Boolean                 toMakeGroups)
326     throw (SALOME::SALOME_Exception);
327
328   SMESH::ListOfGroups* ExtrusionSweepObjects(const SMESH::ListOfIDSources & nodes,
329                                              const SMESH::ListOfIDSources & edges,
330                                              const SMESH::ListOfIDSources & faces,
331                                              const SMESH::DirStruct &       stepVector,
332                                              CORBA::Long                    nbOfSteps,
333                                              const SMESH::double_array &    theScaleFactors,
334                                              CORBA::Boolean                 theLinearVariation,
335                                              const SMESH::double_array &    theBasePoint,
336                                              CORBA::Boolean                 toMakeGroups)
337     throw (SALOME::SALOME_Exception);
338
339   SMESH::ListOfGroups* ExtrusionByNormal(const SMESH::ListOfIDSources& objects,
340                                          CORBA::Double                 stepSize,
341                                          CORBA::Long                   nbOfSteps,
342                                          CORBA::Boolean                byAverageNormal,
343                                          CORBA::Boolean                useInputElemsOnly,
344                                          CORBA::Boolean                makeGroups,
345                                          CORBA::Short                  dim)
346     throw (SALOME::SALOME_Exception);
347   SMESH::ListOfGroups*  AdvancedExtrusion(const SMESH::long_array & theIDsOfElements,
348                                           const SMESH::DirStruct &  theStepVector,
349                                           CORBA::Long               theNbOfSteps,
350                                           CORBA::Long               theExtrFlags,
351                                           CORBA::Double             theSewTolerance,
352                                           CORBA::Boolean            theMakeGroups)
353     throw (SALOME::SALOME_Exception);
354
355   SMESH::ListOfGroups*
356     ExtrusionAlongPathObjects(const SMESH::ListOfIDSources & nodes,
357                               const SMESH::ListOfIDSources & edges,
358                               const SMESH::ListOfIDSources & faces,
359                               SMESH::SMESH_IDSource_ptr      PathMesh,
360                               GEOM::GEOM_Object_ptr          PathShape,
361                               CORBA::Long                    NodeStart,
362                               CORBA::Boolean                 HasAngles,
363                               const SMESH::double_array &    Angles,
364                               CORBA::Boolean                 LinearVariation,
365                               CORBA::Boolean                 HasRefPoint,
366                               const SMESH::PointStruct &     RefPoint,
367                               bool                           MakeGroups,
368                               SMESH::SMESH_MeshEditor::Extrusion_Error& Error)
369     throw (SALOME::SALOME_Exception);
370
371   SMESH::double_array* LinearAnglesVariation(SMESH::SMESH_Mesh_ptr       PathMesh,
372                                                GEOM::GEOM_Object_ptr       PathShape,
373                                                const SMESH::double_array & Angles);
374
375   void Mirror(const SMESH::long_array &           IDsOfElements,
376               const SMESH::AxisStruct &           Axis,
377               SMESH::SMESH_MeshEditor::MirrorType MirrorType,
378               CORBA::Boolean                      Copy)
379     throw (SALOME::SALOME_Exception);
380   void MirrorObject(SMESH::SMESH_IDSource_ptr           theObject,
381                     const SMESH::AxisStruct &           Axis,
382                     SMESH::SMESH_MeshEditor::MirrorType MirrorType,
383                     CORBA::Boolean                      Copy)
384     throw (SALOME::SALOME_Exception);
385   void Translate(const SMESH::long_array & IDsOfElements,
386                  const SMESH::DirStruct &   Vector,
387                  CORBA::Boolean            Copy)
388     throw (SALOME::SALOME_Exception);
389   void TranslateObject(SMESH::SMESH_IDSource_ptr  theObject,
390                        const SMESH::DirStruct &   Vector,
391                        CORBA::Boolean             Copy)
392     throw (SALOME::SALOME_Exception);
393   void Rotate(const SMESH::long_array & IDsOfElements,
394               const SMESH::AxisStruct &  Axis,
395               CORBA::Double             Angle,
396               CORBA::Boolean            Copy)
397     throw (SALOME::SALOME_Exception);
398   void RotateObject(SMESH::SMESH_IDSource_ptr  theObject,
399                     const SMESH::AxisStruct &  Axis,
400                     CORBA::Double              Angle,
401                     CORBA::Boolean             Copy)
402     throw (SALOME::SALOME_Exception);
403
404   SMESH::ListOfGroups* MirrorMakeGroups(const SMESH::long_array&            IDsOfElements,
405                                         const SMESH::AxisStruct&            Mirror,
406                                         SMESH::SMESH_MeshEditor::MirrorType MirrorType)
407     throw (SALOME::SALOME_Exception);
408   SMESH::ListOfGroups* MirrorObjectMakeGroups(SMESH::SMESH_IDSource_ptr           Object,
409                                               const SMESH::AxisStruct&            Mirror,
410                                               SMESH::SMESH_MeshEditor::MirrorType MirrorType)
411     throw (SALOME::SALOME_Exception);
412   SMESH::ListOfGroups* TranslateMakeGroups(const SMESH::long_array& IDsOfElements,
413                                            const SMESH::DirStruct&  Vector)
414     throw (SALOME::SALOME_Exception);
415   SMESH::ListOfGroups* TranslateObjectMakeGroups(SMESH::SMESH_IDSource_ptr Object,
416                                                  const SMESH::DirStruct&   Vector)
417     throw (SALOME::SALOME_Exception);
418   SMESH::ListOfGroups* RotateMakeGroups(const SMESH::long_array& IDsOfElements,
419                                         const SMESH::AxisStruct& Axis,
420                                         CORBA::Double            AngleInRadians)
421     throw (SALOME::SALOME_Exception);
422   SMESH::ListOfGroups* RotateObjectMakeGroups(SMESH::SMESH_IDSource_ptr Object,
423                                               const SMESH::AxisStruct&  Axis,
424                                               CORBA::Double             AngleInRadians)
425     throw (SALOME::SALOME_Exception);
426
427   SMESH::SMESH_Mesh_ptr MirrorMakeMesh(const SMESH::long_array&            IDsOfElements,
428                                        const SMESH::AxisStruct&            Mirror,
429                                        SMESH::SMESH_MeshEditor::MirrorType MirrorType,
430                                        CORBA::Boolean                      CopyGroups,
431                                        const char*                         MeshName)
432     throw (SALOME::SALOME_Exception);
433   SMESH::SMESH_Mesh_ptr MirrorObjectMakeMesh(SMESH::SMESH_IDSource_ptr           Object,
434                                              const SMESH::AxisStruct&            Mirror,
435                                              SMESH::SMESH_MeshEditor::MirrorType MirrorType,
436                                              CORBA::Boolean                      CopyGroups,
437                                              const char*                         MeshName)
438     throw (SALOME::SALOME_Exception);
439   SMESH::SMESH_Mesh_ptr TranslateMakeMesh(const SMESH::long_array& IDsOfElements,
440                                           const SMESH::DirStruct&  Vector,
441                                           CORBA::Boolean           CopyGroups,
442                                           const char*              MeshName)
443     throw (SALOME::SALOME_Exception);
444   SMESH::SMESH_Mesh_ptr TranslateObjectMakeMesh(SMESH::SMESH_IDSource_ptr Object,
445                                                 const SMESH::DirStruct&   Vector,
446                                                 CORBA::Boolean            CopyGroups,
447                                                 const char*               MeshName)
448     throw (SALOME::SALOME_Exception);
449   SMESH::SMESH_Mesh_ptr RotateMakeMesh(const SMESH::long_array& IDsOfElements,
450                                        const SMESH::AxisStruct& Axis,
451                                        CORBA::Double            AngleInRadians,
452                                        CORBA::Boolean           CopyGroups,
453                                        const char*              MeshName)
454     throw (SALOME::SALOME_Exception);
455   SMESH::SMESH_Mesh_ptr RotateObjectMakeMesh(SMESH::SMESH_IDSource_ptr Object,
456                                              const SMESH::AxisStruct&  Axis,
457                                              CORBA::Double             AngleInRadians,
458                                              CORBA::Boolean            CopyGroups,
459                                              const char*               MeshName)
460     throw (SALOME::SALOME_Exception);
461
462   void Scale(SMESH::SMESH_IDSource_ptr  theObject,
463              const SMESH::PointStruct&  thePoint,
464              const SMESH::double_array& theScaleFact,
465              CORBA::Boolean             theCopy)
466     throw (SALOME::SALOME_Exception);
467
468   SMESH::ListOfGroups* ScaleMakeGroups(SMESH::SMESH_IDSource_ptr  theObject,
469                                        const SMESH::PointStruct&  thePoint,
470                                        const SMESH::double_array& theScaleFact)
471     throw (SALOME::SALOME_Exception);
472
473   SMESH::SMESH_Mesh_ptr ScaleMakeMesh(SMESH::SMESH_IDSource_ptr Object,
474                                       const SMESH::PointStruct& Point,
475                                       const SMESH::double_array& theScaleFact,
476                                       CORBA::Boolean            CopyGroups,
477                                       const char*               MeshName)
478     throw (SALOME::SALOME_Exception);
479
480   void FindCoincidentNodes (CORBA::Double                  Tolerance,
481                             SMESH::array_of_long_array_out GroupsOfNodes,
482                             CORBA::Boolean                 SeparateCornersAndMedium)
483     throw (SALOME::SALOME_Exception);
484   void FindCoincidentNodesOnPart(SMESH::SMESH_IDSource_ptr      Object,
485                                  CORBA::Double                  Tolerance,
486                                  SMESH::array_of_long_array_out GroupsOfNodes,
487                                  CORBA::Boolean                 SeparateCornersAndMedium)
488     throw (SALOME::SALOME_Exception);
489   void FindCoincidentNodesOnPartBut(SMESH::SMESH_IDSource_ptr      Object,
490                                     CORBA::Double                  Tolerance,
491                                     SMESH::array_of_long_array_out GroupsOfNodes,
492                                     const SMESH::ListOfIDSources&  ExceptSubMeshOrGroups,
493                                     CORBA::Boolean                 SeparateCornersAndMedium)
494     throw (SALOME::SALOME_Exception);
495   void MergeNodes (const SMESH::array_of_long_array& GroupsOfNodes,
496                    const SMESH::ListOfIDSources&     NodesToKeep )
497     throw (SALOME::SALOME_Exception);
498   void FindEqualElements(SMESH::SMESH_IDSource_ptr      Object,
499                          SMESH::array_of_long_array_out GroupsOfElementsID)
500     throw (SALOME::SALOME_Exception);
501   void MergeElements(const SMESH::array_of_long_array& GroupsOfElementsID)
502     throw (SALOME::SALOME_Exception);
503   void MergeEqualElements()
504     throw (SALOME::SALOME_Exception);
505   CORBA::Long MoveClosestNodeToPoint(CORBA::Double x,
506                                      CORBA::Double y,
507                                      CORBA::Double z,
508                                      CORBA::Long   nodeID)
509     throw (SALOME::SALOME_Exception);
510   /*!
511    * \brief Return ID of node closest to a given point
512    */
513   CORBA::Long FindNodeClosestTo(CORBA::Double x,
514                                 CORBA::Double y,
515                                 CORBA::Double z)
516     throw (SALOME::SALOME_Exception);
517   /*!
518    * Return elements of given type where the given point is IN or ON.
519    * 'ALL' type means elements of any type excluding nodes
520    */
521   SMESH::long_array* FindElementsByPoint(CORBA::Double      x,
522                                          CORBA::Double      y,
523                                          CORBA::Double      z,
524                                          SMESH::ElementType type)
525     throw (SALOME::SALOME_Exception);
526   /*!
527    * Searching among the given elements, return elements of given type 
528    * where the given point is IN or ON.
529    * 'ALL' type means elements of any type excluding nodes
530    */
531   SMESH::long_array* FindAmongElementsByPoint(SMESH::SMESH_IDSource_ptr elements,
532                                               CORBA::Double             x,
533                                               CORBA::Double             y,
534                                               CORBA::Double             z,
535                                               SMESH::ElementType        type)
536     throw (SALOME::SALOME_Exception);
537
538   /*!
539    * Return point state in a closed 2D mesh in terms of TopAbs_State enumeration.
540    * TopAbs_UNKNOWN state means that either mesh is wrong or the analysis fails.
541    */
542   CORBA::Short GetPointState(CORBA::Double x, CORBA::Double y, CORBA::Double z)
543     throw (SALOME::SALOME_Exception);
544
545   SMESH::CoincidentFreeBorders* FindCoincidentFreeBorders(CORBA::Double tolerance);
546   CORBA::Short SewCoincidentFreeBorders(const SMESH::CoincidentFreeBorders& freeBorders,
547                                         CORBA::Boolean                      createPolygons,
548                                         CORBA::Boolean                      createPolyedrs)
549     throw (SALOME::SALOME_Exception);
550
551   SMESH::SMESH_MeshEditor::Sew_Error
552   SewFreeBorders(CORBA::Long FirstNodeID1,
553                  CORBA::Long SecondNodeID1,
554                  CORBA::Long LastNodeID1,
555                  CORBA::Long FirstNodeID2,
556                  CORBA::Long SecondNodeID2,
557                  CORBA::Long LastNodeID2,
558                  CORBA::Boolean CreatePolygons,
559                  CORBA::Boolean CreatePolyedrs) throw (SALOME::SALOME_Exception);
560   SMESH::SMESH_MeshEditor::Sew_Error
561   SewConformFreeBorders(CORBA::Long FirstNodeID1,
562                         CORBA::Long SecondNodeID1,
563                         CORBA::Long LastNodeID1,
564                         CORBA::Long FirstNodeID2,
565                         CORBA::Long SecondNodeID2) throw (SALOME::SALOME_Exception);
566   SMESH::SMESH_MeshEditor::Sew_Error
567   SewBorderToSide(CORBA::Long FirstNodeIDOnFreeBorder,
568                   CORBA::Long SecondNodeIDOnFreeBorder,
569                   CORBA::Long LastNodeIDOnFreeBorder,
570                   CORBA::Long FirstNodeIDOnSide,
571                   CORBA::Long LastNodeIDOnSide,
572                   CORBA::Boolean CreatePolygons,
573                   CORBA::Boolean CreatePolyedrs) throw (SALOME::SALOME_Exception);
574   SMESH::SMESH_MeshEditor::Sew_Error
575   SewSideElements(const SMESH::long_array& IDsOfSide1Elements,
576                   const SMESH::long_array& IDsOfSide2Elements,
577                   CORBA::Long NodeID1OfSide1ToMerge,
578                   CORBA::Long NodeID1OfSide2ToMerge,
579                   CORBA::Long NodeID2OfSide1ToMerge,
580                   CORBA::Long NodeID2OfSide2ToMerge) throw (SALOME::SALOME_Exception);
581
582   /*!
583    * Set new nodes for given element.
584    * If number of nodes is not corresponded to type of
585    * element - returns false
586    */
587   CORBA::Boolean ChangeElemNodes(CORBA::Long ide, const SMESH::long_array& newIDs)
588     throw (SALOME::SALOME_Exception);
589
590   SMESH::SMESH_Group_ptr DoubleElements(SMESH::SMESH_IDSource_ptr theElements,
591                                         const char*               theGroupName)
592     throw (SALOME::SALOME_Exception);
593
594   CORBA::Boolean DoubleNodes( const SMESH::long_array& theNodes,
595                               const SMESH::long_array& theModifiedElems )
596     throw (SALOME::SALOME_Exception);
597
598   CORBA::Boolean DoubleNode( CORBA::Long theNodeId,
599                              const SMESH::long_array& theModifiedElems )
600     throw (SALOME::SALOME_Exception);
601
602   CORBA::Boolean DoubleNodeGroup( SMESH::SMESH_GroupBase_ptr theNodes,
603                                   SMESH::SMESH_GroupBase_ptr theModifiedElems )
604     throw (SALOME::SALOME_Exception);
605
606   /*!
607    * \brief Creates a hole in a mesh by doubling the nodes of some particular elements.
608    * Works as DoubleNodeGroup(), but returns a new group with newly created nodes.
609    * \param theNodes - group of nodes to be doubled.
610    * \param theModifiedElems - group of elements to be updated.
611    * \return a new group with newly created nodes
612    * \sa DoubleNodeGroup()
613    */
614   SMESH::SMESH_Group_ptr DoubleNodeGroupNew( SMESH::SMESH_GroupBase_ptr theNodes,
615                                              SMESH::SMESH_GroupBase_ptr theModifiedElems )
616     throw (SALOME::SALOME_Exception);
617
618   CORBA::Boolean DoubleNodeGroups( const SMESH::ListOfGroups& theNodes,
619                                    const SMESH::ListOfGroups& theModifiedElems )
620     throw (SALOME::SALOME_Exception);
621
622   SMESH::SMESH_Group_ptr DoubleNodeGroupsNew( const SMESH::ListOfGroups& theNodes,
623                                               const SMESH::ListOfGroups& theModifiedElems )
624     throw (SALOME::SALOME_Exception);
625
626   /*!
627    * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
628    * \param theElems - the list of elements (edges or faces) to be replicated
629    *       The nodes for duplication could be found from these elements
630    * \param theNodesNot - list of nodes to NOT replicate
631    * \param theAffectedElems - the list of elements (cells and edges) to which the 
632    *       replicated nodes should be associated to.
633    * \return TRUE if operation has been completed successfully, FALSE otherwise
634    * \sa DoubleNodeGroup(), DoubleNodeGroups()
635    */
636   CORBA::Boolean DoubleNodeElem( const SMESH::long_array& theElems, 
637                                  const SMESH::long_array& theNodesNot,
638                                  const SMESH::long_array& theAffectedElems )
639     throw (SALOME::SALOME_Exception);
640
641   /*!
642    * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
643    * \param theElems - the list of elements (edges or faces) to be replicated
644    *        The nodes for duplication could be found from these elements
645    * \param theNodesNot - list of nodes to NOT replicate
646    * \param theShape - shape to detect affected elements (element which geometric center
647    *        located on or inside shape).
648    *        The replicated nodes should be associated to affected elements.
649    * \return TRUE if operation has been completed successfully, FALSE otherwise
650    * \sa DoubleNodeGroupInRegion(), DoubleNodeGroupsInRegion()
651    */
652   CORBA::Boolean DoubleNodeElemInRegion( const SMESH::long_array& theElems, 
653                                          const SMESH::long_array& theNodesNot,
654                                          GEOM::GEOM_Object_ptr    theShape )
655     throw (SALOME::SALOME_Exception);
656
657   /*!
658    * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
659    * \param theElems - group of of elements (edges or faces) to be replicated
660    * \param theNodesNot - group of nodes not to replicated
661    * \param theAffectedElems - group of elements to which the replicated nodes
662    *        should be associated to.
663    * \return TRUE if operation has been completed successfully, FALSE otherwise
664    * \sa DoubleNodes(), DoubleNodeGroups(), DoubleNodeElemGroupNew()
665    */
666   CORBA::Boolean DoubleNodeElemGroup( SMESH::SMESH_GroupBase_ptr theElems,
667                                       SMESH::SMESH_GroupBase_ptr theNodesNot,
668                                       SMESH::SMESH_GroupBase_ptr theAffectedElems )
669     throw (SALOME::SALOME_Exception);
670
671   /*!
672    * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
673    * Works as DoubleNodeElemGroup(), but returns a new group with newly created elements.
674    * \param theElems - group of of elements (edges or faces) to be replicated
675    * \param theNodesNot - group of nodes not to replicated
676    * \param theAffectedElems - group of elements to which the replicated nodes
677    *        should be associated to.
678    * \return a new group with newly created elements
679    * \sa DoubleNodeElemGroup()
680    */
681   SMESH::SMESH_Group_ptr DoubleNodeElemGroupNew( SMESH::SMESH_GroupBase_ptr theElems,
682                                                  SMESH::SMESH_GroupBase_ptr theNodesNot,
683                                                  SMESH::SMESH_GroupBase_ptr theAffectedElems )
684     throw (SALOME::SALOME_Exception);
685
686   SMESH::ListOfGroups*   DoubleNodeElemGroup2New(SMESH::SMESH_GroupBase_ptr theElems,
687                                                  SMESH::SMESH_GroupBase_ptr theNodesNot,
688                                                  SMESH::SMESH_GroupBase_ptr theAffectedElems,
689                                                  CORBA::Boolean             theElemGroupNeeded,
690                                                  CORBA::Boolean             theNodeGroupNeeded)
691     throw (SALOME::SALOME_Exception);
692   
693   /*!
694    * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
695    * \param theElems - group of of elements (edges or faces) to be replicated
696    * \param theNodesNot - group of nodes not to replicated
697    * \param theShape - shape to detect affected elements (element which geometric center
698    *        located on or inside shape).
699    *        The replicated nodes should be associated to affected elements.
700    * \return TRUE if operation has been completed successfully, FALSE otherwise
701    * \sa DoubleNodesInRegion(), DoubleNodeGroupsInRegion()
702    */
703   CORBA::Boolean DoubleNodeElemGroupInRegion( SMESH::SMESH_GroupBase_ptr theElems,
704                                               SMESH::SMESH_GroupBase_ptr theNodesNot,
705                                               GEOM::GEOM_Object_ptr      theShape )
706     throw (SALOME::SALOME_Exception);
707
708   /*!
709    * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
710    * This method provided for convenience works as DoubleNodes() described above.
711    * \param theElems - list of groups of elements (edges or faces) to be replicated
712    * \param theNodesNot - list of groups of nodes not to replicated
713    * \param theAffectedElems - group of elements to which the replicated nodes
714    *        should be associated to.
715    * \return TRUE if operation has been completed successfully, FALSE otherwise
716    * \sa DoubleNodeGroup(), DoubleNodes(), DoubleNodeElemGroupsNew()
717    */
718   CORBA::Boolean DoubleNodeElemGroups( const SMESH::ListOfGroups& theElems,
719                                        const SMESH::ListOfGroups& theNodesNot,
720                                        const SMESH::ListOfGroups& theAffectedElems )
721     throw (SALOME::SALOME_Exception);
722
723   /*!
724    * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
725    * Works as DoubleNodeElemGroups(), but returns a new group with newly created elements.
726    * \param theElems - list of groups of elements (edges or faces) to be replicated
727    * \param theNodesNot - list of groups of nodes not to replicated
728    * \param theAffectedElems - group of elements to which the replicated nodes
729    *        should be associated to.
730    * \return a new group with newly created elements
731    * \sa DoubleNodeElemGroups()
732    */
733   SMESH::SMESH_Group_ptr DoubleNodeElemGroupsNew( const SMESH::ListOfGroups& theElems,
734                                                   const SMESH::ListOfGroups& theNodesNot,
735                                                   const SMESH::ListOfGroups& theAffectedElems )
736     throw (SALOME::SALOME_Exception);
737
738   SMESH::ListOfGroups*   DoubleNodeElemGroups2New(const SMESH::ListOfGroups& theElems,
739                                                   const SMESH::ListOfGroups& theNodesNot,
740                                                   const SMESH::ListOfGroups& theAffectedElems,
741                                                   CORBA::Boolean             theElemGroupNeeded,
742                                                   CORBA::Boolean             theNodeGroupNeeded)
743     throw (SALOME::SALOME_Exception);
744
745   /*!
746    * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
747    * This method provided for convenience works as DoubleNodes() described above.
748    * \param theElems - list of groups of elements (edges or faces) to be replicated
749    * \param theNodesNot - list of groups of nodes not to replicated
750    * \param theShape - shape to detect affected elements (element which geometric center
751    *        located on or inside shape).
752    *        The replicated nodes should be associated to affected elements.
753    * \return TRUE if operation has been completed successfully, FALSE otherwise
754    * \sa DoubleNodeGroupInRegion(), DoubleNodesInRegion()
755    */
756   CORBA::Boolean DoubleNodeElemGroupsInRegion( const SMESH::ListOfGroups& theElems,
757                                                const SMESH::ListOfGroups& theNodesNot,
758                                                GEOM::GEOM_Object_ptr      theShape )
759     throw (SALOME::SALOME_Exception);
760
761   /*!
762    * \brief Identify the elements that will be affected by node duplication (actual duplication is not performed.
763    * This method is the first step of DoubleNodeElemGroupsInRegion.
764    * \param theElems - list of groups of elements (edges or faces) to be replicated
765    * \param theNodesNot - list of groups of nodes not to replicated
766    * \param theShape - shape to detect affected elements (element which geometric center
767    *        located on or inside shape).
768    *        The replicated nodes should be associated to affected elements.
769    * \return groups of affected elements
770    * \sa DoubleNodeElemGroupsInRegion()
771    */
772   SMESH::ListOfGroups* AffectedElemGroupsInRegion( const SMESH::ListOfGroups& theElems,
773                                                    const SMESH::ListOfGroups& theNodesNot,
774                                                    GEOM::GEOM_Object_ptr      theShape )
775     throw (SALOME::SALOME_Exception);
776
777   /*!
778    * \brief Double nodes on shared faces between groups of volumes and create flat elements on demand.
779    * The list of groups must describe a partition of the mesh volumes.
780    * The nodes of the internal faces at the boundaries of the groups are doubled.
781    * In option, the internal faces are replaced by flat elements.
782    * Triangles are transformed in prisms, and quadrangles in hexahedrons.
783    * \param theDomains - list of groups of volumes
784    * \param createJointElems - if TRUE, create the elements
785    * \param onAllBoundaries - if TRUE, the nodes and elements are also create on
786    *        the boundary between \a theDomains and the rest mesh
787    * \return TRUE if operation has been completed successfully, FALSE otherwise
788    */
789   CORBA::Boolean DoubleNodesOnGroupBoundaries( const SMESH::ListOfGroups& theDomains,
790                                                CORBA::Boolean             createJointElems,
791                                                CORBA::Boolean             onAllBoundaries )
792     throw (SALOME::SALOME_Exception);
793   /*!
794    * \brief Double nodes on some external faces and create flat elements.
795    * Flat elements are mainly used by some types of mechanic calculations.
796    *
797    * Each group of the list must be constituted of faces.
798    * Triangles are transformed in prisms, and quadrangles in hexahedrons.
799    * @param theGroupsOfFaces - list of groups of faces
800    * @return TRUE if operation has been completed successfully, FALSE otherwise
801    */
802   CORBA::Boolean CreateFlatElementsOnFacesGroups( const SMESH::ListOfGroups& theGroupsOfFaces )
803     throw (SALOME::SALOME_Exception);
804
805   /*!
806    *  \brief identify all the elements around a geom shape, get the faces delimiting the hole
807    *  Build groups of volume to remove, groups of faces to replace on the skin of the object,
808    *  groups of faces to remove insidethe object, (idem edges).
809    *  Build ordered list of nodes at the border of each group of faces to replace (to be used to build a geom subshape)
810    */
811   void CreateHoleSkin(CORBA::Double radius,
812                       GEOM::GEOM_Object_ptr theShape,
813                       const char* groupName,
814                       const SMESH::double_array& theNodesCoords,
815                       SMESH::array_of_long_array_out GroupsOfNodes)
816   throw (SALOME::SALOME_Exception);
817
818   /*!
819    * \brief Generated skin mesh (containing 2D cells) from 3D mesh
820    * The created 2D mesh elements based on nodes of free faces of boundary volumes
821    * \return TRUE if operation has been completed successfully, FALSE otherwise
822    */
823   CORBA::Boolean Make2DMeshFrom3D()
824     throw (SALOME::SALOME_Exception);
825
826   SMESH::SMESH_Mesh_ptr MakeBoundaryMesh(SMESH::SMESH_IDSource_ptr elements,
827                                          SMESH::Bnd_Dimension      dimension,
828                                          const char*               groupName,
829                                          const char*               meshName,
830                                          CORBA::Boolean            toCopyElements,
831                                          CORBA::Boolean            toCopyMissingBondary,
832                                          SMESH::SMESH_Group_out    group)
833     throw (SALOME::SALOME_Exception);
834
835   CORBA::Long MakeBoundaryElements(SMESH::Bnd_Dimension dimension,
836                                    const char* groupName,
837                                    const char* meshName,
838                                    CORBA::Boolean toCopyAll,
839                                    const SMESH::ListOfIDSources& groups,
840                                    SMESH::SMESH_Mesh_out mesh,
841                                    SMESH::SMESH_Group_out group)
842     throw (SALOME::SALOME_Exception);
843
844 private: //!< private methods
845
846   ::SMESH_MeshEditor& getEditor();
847
848   SMESHDS_Mesh * getMeshDS() { return myMesh->GetMeshDS(); }
849
850   MeshEditor_I::TPreviewMesh * getPreviewMesh( SMDSAbs_ElementType previewType = SMDSAbs_All );
851
852   void declareMeshModified( bool isReComputeSafe );
853
854   /*!
855    * \brief Clear myLastCreated* or myPreviewData
856    */
857   void initData(bool deleteSearchers=true);
858
859   /*!
860    * \brief Return groups by their IDs
861    */
862   SMESH::ListOfGroups* getGroups(const std::list<int>* groupIDs)
863     throw (SALOME::SALOME_Exception);
864
865   SMESH::ListOfGroups* mirror(TIDSortedElemSet &                  IDsOfElements,
866                               const SMESH::AxisStruct &           Axis,
867                               SMESH::SMESH_MeshEditor::MirrorType MirrorType,
868                               CORBA::Boolean                      Copy,
869                               bool                                MakeGroups,
870                               ::SMESH_Mesh*                       TargetMesh=0)
871     throw (SALOME::SALOME_Exception);
872   SMESH::ListOfGroups* translate(TIDSortedElemSet        & IDsOfElements,
873                                  const SMESH::DirStruct &  Vector,
874                                  CORBA::Boolean            Copy,
875                                  bool                      MakeGroups,
876                                  ::SMESH_Mesh*             TargetMesh=0)
877     throw (SALOME::SALOME_Exception);
878   SMESH::ListOfGroups* rotate(TIDSortedElemSet &           IDsOfElements,
879                               const SMESH::AxisStruct &  Axis,
880                               CORBA::Double             Angle,
881                               CORBA::Boolean            Copy,
882                               bool                      MakeGroups,
883                               ::SMESH_Mesh*             TargetMesh=0)
884     throw (SALOME::SALOME_Exception);
885
886   SMESH::ListOfGroups* scale(SMESH::SMESH_IDSource_ptr   theObject,
887                              const SMESH::PointStruct&   thePoint,
888                              const SMESH::double_array&  theScaleFact,
889                              CORBA::Boolean              theCopy,
890                              bool                        theMakeGroups,
891                              ::SMESH_Mesh*               theTargetMesh=0)
892     throw (SALOME::SALOME_Exception);
893
894   void convertToQuadratic(CORBA::Boolean            theForce3d,
895                           CORBA::Boolean            theToBiQuad,
896                           SMESH::SMESH_IDSource_ptr theObject = SMESH::SMESH_IDSource::_nil())
897     throw (SALOME::SALOME_Exception);
898
899   SMESH::SMESH_Mesh_ptr makeMesh(const char* theMeshName);
900
901   void dumpGroupsList(SMESH::TPythonDump &        theDumpPython,
902                       const SMESH::ListOfGroups * theGroupList);
903
904   std::string generateGroupName(const std::string& thePrefix);
905
906   void prepareIdSource(SMESH::SMESH_IDSource_ptr theObject);
907
908
909   enum IDSource_Error { IDSource_OK, IDSource_INVALID, IDSource_EMPTY };
910
911   bool idSourceToSet(SMESH::SMESH_IDSource_ptr  theIDSource,
912                      const SMESHDS_Mesh*        theMeshDS,
913                      TIDSortedElemSet&          theElemSet,
914                      const SMDSAbs_ElementType  theType,
915                      const bool                 emptyIfIsMesh = false,
916                      IDSource_Error*            error = 0);
917
918   void findCoincidentNodes( TIDSortedNodeSet &             Nodes,
919                             CORBA::Double                  Tolerance,
920                             SMESH::array_of_long_array_out GroupsOfNodes,
921                             CORBA::Boolean                 SeparateCornersAndMedium);
922
923
924
925  private: //!< fields
926
927   SMESH_Mesh_i*                myMesh_i;
928   SMESH_Mesh *                 myMesh;
929   ::SMESH_MeshEditor           myEditor;
930
931   bool                         myIsPreviewMode;
932   MeshEditor_I::TPreviewMesh * myPreviewMesh;
933   ::SMESH_MeshEditor *         myPreviewEditor;
934   SMESH::MeshPreviewStruct_var myPreviewData;
935
936   // temporary IDSources
937   struct _IDSource;
938   // std::list< _IDSource* >      myAuxIDSources;
939   // void                         deleteAuxIDSources();
940 };
941
942 #endif