Salome HOME
c3b0a42865dd01bd0be3cb9f6fb70b31978e5d2f
[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                                              CORBA::Boolean                 toMakeGroups)
334     throw (SALOME::SALOME_Exception);
335
336   SMESH::ListOfGroups* ExtrusionByNormal(const SMESH::ListOfIDSources& objects,
337                                          CORBA::Double                 stepSize,
338                                          CORBA::Long                   nbOfSteps,
339                                          CORBA::Boolean                byAverageNormal,
340                                          CORBA::Boolean                useInputElemsOnly,
341                                          CORBA::Boolean                makeGroups,
342                                          CORBA::Short                  dim)
343     throw (SALOME::SALOME_Exception);
344   SMESH::ListOfGroups*  AdvancedExtrusion(const SMESH::long_array & theIDsOfElements,
345                                           const SMESH::DirStruct &  theStepVector,
346                                           CORBA::Long               theNbOfSteps,
347                                           CORBA::Long               theExtrFlags,
348                                           CORBA::Double             theSewTolerance,
349                                           CORBA::Boolean            theMakeGroups)
350     throw (SALOME::SALOME_Exception);
351
352   SMESH::ListOfGroups*
353     ExtrusionAlongPathObjects(const SMESH::ListOfIDSources & nodes,
354                               const SMESH::ListOfIDSources & edges,
355                               const SMESH::ListOfIDSources & faces,
356                               SMESH::SMESH_IDSource_ptr      PathMesh,
357                               GEOM::GEOM_Object_ptr          PathShape,
358                               CORBA::Long                    NodeStart,
359                               CORBA::Boolean                 HasAngles,
360                               const SMESH::double_array &    Angles,
361                               CORBA::Boolean                 LinearVariation,
362                               CORBA::Boolean                 HasRefPoint,
363                               const SMESH::PointStruct &     RefPoint,
364                               bool                           MakeGroups,
365                               SMESH::SMESH_MeshEditor::Extrusion_Error& Error)
366     throw (SALOME::SALOME_Exception);
367
368   SMESH::double_array* LinearAnglesVariation(SMESH::SMESH_Mesh_ptr       PathMesh,
369                                                GEOM::GEOM_Object_ptr       PathShape,
370                                                const SMESH::double_array & Angles);
371
372   void Mirror(const SMESH::long_array &           IDsOfElements,
373               const SMESH::AxisStruct &           Axis,
374               SMESH::SMESH_MeshEditor::MirrorType MirrorType,
375               CORBA::Boolean                      Copy)
376     throw (SALOME::SALOME_Exception);
377   void MirrorObject(SMESH::SMESH_IDSource_ptr           theObject,
378                     const SMESH::AxisStruct &           Axis,
379                     SMESH::SMESH_MeshEditor::MirrorType MirrorType,
380                     CORBA::Boolean                      Copy)
381     throw (SALOME::SALOME_Exception);
382   void Translate(const SMESH::long_array & IDsOfElements,
383                  const SMESH::DirStruct &   Vector,
384                  CORBA::Boolean            Copy)
385     throw (SALOME::SALOME_Exception);
386   void TranslateObject(SMESH::SMESH_IDSource_ptr  theObject,
387                        const SMESH::DirStruct &   Vector,
388                        CORBA::Boolean             Copy)
389     throw (SALOME::SALOME_Exception);
390   void Rotate(const SMESH::long_array & IDsOfElements,
391               const SMESH::AxisStruct &  Axis,
392               CORBA::Double             Angle,
393               CORBA::Boolean            Copy)
394     throw (SALOME::SALOME_Exception);
395   void RotateObject(SMESH::SMESH_IDSource_ptr  theObject,
396                     const SMESH::AxisStruct &  Axis,
397                     CORBA::Double              Angle,
398                     CORBA::Boolean             Copy)
399     throw (SALOME::SALOME_Exception);
400
401   SMESH::ListOfGroups* MirrorMakeGroups(const SMESH::long_array&            IDsOfElements,
402                                         const SMESH::AxisStruct&            Mirror,
403                                         SMESH::SMESH_MeshEditor::MirrorType MirrorType)
404     throw (SALOME::SALOME_Exception);
405   SMESH::ListOfGroups* MirrorObjectMakeGroups(SMESH::SMESH_IDSource_ptr           Object,
406                                               const SMESH::AxisStruct&            Mirror,
407                                               SMESH::SMESH_MeshEditor::MirrorType MirrorType)
408     throw (SALOME::SALOME_Exception);
409   SMESH::ListOfGroups* TranslateMakeGroups(const SMESH::long_array& IDsOfElements,
410                                            const SMESH::DirStruct&  Vector)
411     throw (SALOME::SALOME_Exception);
412   SMESH::ListOfGroups* TranslateObjectMakeGroups(SMESH::SMESH_IDSource_ptr Object,
413                                                  const SMESH::DirStruct&   Vector)
414     throw (SALOME::SALOME_Exception);
415   SMESH::ListOfGroups* RotateMakeGroups(const SMESH::long_array& IDsOfElements,
416                                         const SMESH::AxisStruct& Axis,
417                                         CORBA::Double            AngleInRadians)
418     throw (SALOME::SALOME_Exception);
419   SMESH::ListOfGroups* RotateObjectMakeGroups(SMESH::SMESH_IDSource_ptr Object,
420                                               const SMESH::AxisStruct&  Axis,
421                                               CORBA::Double             AngleInRadians)
422     throw (SALOME::SALOME_Exception);
423
424   SMESH::SMESH_Mesh_ptr MirrorMakeMesh(const SMESH::long_array&            IDsOfElements,
425                                        const SMESH::AxisStruct&            Mirror,
426                                        SMESH::SMESH_MeshEditor::MirrorType MirrorType,
427                                        CORBA::Boolean                      CopyGroups,
428                                        const char*                         MeshName)
429     throw (SALOME::SALOME_Exception);
430   SMESH::SMESH_Mesh_ptr MirrorObjectMakeMesh(SMESH::SMESH_IDSource_ptr           Object,
431                                              const SMESH::AxisStruct&            Mirror,
432                                              SMESH::SMESH_MeshEditor::MirrorType MirrorType,
433                                              CORBA::Boolean                      CopyGroups,
434                                              const char*                         MeshName)
435     throw (SALOME::SALOME_Exception);
436   SMESH::SMESH_Mesh_ptr TranslateMakeMesh(const SMESH::long_array& IDsOfElements,
437                                           const SMESH::DirStruct&  Vector,
438                                           CORBA::Boolean           CopyGroups,
439                                           const char*              MeshName)
440     throw (SALOME::SALOME_Exception);
441   SMESH::SMESH_Mesh_ptr TranslateObjectMakeMesh(SMESH::SMESH_IDSource_ptr Object,
442                                                 const SMESH::DirStruct&   Vector,
443                                                 CORBA::Boolean            CopyGroups,
444                                                 const char*               MeshName)
445     throw (SALOME::SALOME_Exception);
446   SMESH::SMESH_Mesh_ptr RotateMakeMesh(const SMESH::long_array& IDsOfElements,
447                                        const SMESH::AxisStruct& Axis,
448                                        CORBA::Double            AngleInRadians,
449                                        CORBA::Boolean           CopyGroups,
450                                        const char*              MeshName)
451     throw (SALOME::SALOME_Exception);
452   SMESH::SMESH_Mesh_ptr RotateObjectMakeMesh(SMESH::SMESH_IDSource_ptr Object,
453                                              const SMESH::AxisStruct&  Axis,
454                                              CORBA::Double             AngleInRadians,
455                                              CORBA::Boolean            CopyGroups,
456                                              const char*               MeshName)
457     throw (SALOME::SALOME_Exception);
458
459   void Scale(SMESH::SMESH_IDSource_ptr  theObject,
460              const SMESH::PointStruct&  thePoint,
461              const SMESH::double_array& theScaleFact,
462              CORBA::Boolean             theCopy)
463     throw (SALOME::SALOME_Exception);
464
465   SMESH::ListOfGroups* ScaleMakeGroups(SMESH::SMESH_IDSource_ptr  theObject,
466                                        const SMESH::PointStruct&  thePoint,
467                                        const SMESH::double_array& theScaleFact)
468     throw (SALOME::SALOME_Exception);
469
470   SMESH::SMESH_Mesh_ptr ScaleMakeMesh(SMESH::SMESH_IDSource_ptr Object,
471                                       const SMESH::PointStruct& Point,
472                                       const SMESH::double_array& theScaleFact,
473                                       CORBA::Boolean            CopyGroups,
474                                       const char*               MeshName)
475     throw (SALOME::SALOME_Exception);
476
477   void FindCoincidentNodes (CORBA::Double                  Tolerance,
478                             SMESH::array_of_long_array_out GroupsOfNodes,
479                             CORBA::Boolean                 SeparateCornersAndMedium)
480     throw (SALOME::SALOME_Exception);
481   void FindCoincidentNodesOnPart(SMESH::SMESH_IDSource_ptr      Object,
482                                  CORBA::Double                  Tolerance,
483                                  SMESH::array_of_long_array_out GroupsOfNodes,
484                                  CORBA::Boolean                 SeparateCornersAndMedium)
485     throw (SALOME::SALOME_Exception);
486   void FindCoincidentNodesOnPartBut(SMESH::SMESH_IDSource_ptr      Object,
487                                     CORBA::Double                  Tolerance,
488                                     SMESH::array_of_long_array_out GroupsOfNodes,
489                                     const SMESH::ListOfIDSources&  ExceptSubMeshOrGroups,
490                                     CORBA::Boolean                 SeparateCornersAndMedium)
491     throw (SALOME::SALOME_Exception);
492   void MergeNodes (const SMESH::array_of_long_array& GroupsOfNodes,
493                    const SMESH::ListOfIDSources&     NodesToKeep )
494     throw (SALOME::SALOME_Exception);
495   void FindEqualElements(SMESH::SMESH_IDSource_ptr      Object,
496                          SMESH::array_of_long_array_out GroupsOfElementsID)
497     throw (SALOME::SALOME_Exception);
498   void MergeElements(const SMESH::array_of_long_array& GroupsOfElementsID)
499     throw (SALOME::SALOME_Exception);
500   void MergeEqualElements()
501     throw (SALOME::SALOME_Exception);
502   CORBA::Long MoveClosestNodeToPoint(CORBA::Double x,
503                                      CORBA::Double y,
504                                      CORBA::Double z,
505                                      CORBA::Long   nodeID)
506     throw (SALOME::SALOME_Exception);
507   /*!
508    * \brief Return ID of node closest to a given point
509    */
510   CORBA::Long FindNodeClosestTo(CORBA::Double x,
511                                 CORBA::Double y,
512                                 CORBA::Double z)
513     throw (SALOME::SALOME_Exception);
514   /*!
515    * Return elements of given type where the given point is IN or ON.
516    * 'ALL' type means elements of any type excluding nodes
517    */
518   SMESH::long_array* FindElementsByPoint(CORBA::Double      x,
519                                          CORBA::Double      y,
520                                          CORBA::Double      z,
521                                          SMESH::ElementType type)
522     throw (SALOME::SALOME_Exception);
523   /*!
524    * Searching among the given elements, return elements of given type 
525    * where the given point is IN or ON.
526    * 'ALL' type means elements of any type excluding nodes
527    */
528   SMESH::long_array* FindAmongElementsByPoint(SMESH::SMESH_IDSource_ptr elements,
529                                               CORBA::Double             x,
530                                               CORBA::Double             y,
531                                               CORBA::Double             z,
532                                               SMESH::ElementType        type)
533     throw (SALOME::SALOME_Exception);
534
535   /*!
536    * Return point state in a closed 2D mesh in terms of TopAbs_State enumeration.
537    * TopAbs_UNKNOWN state means that either mesh is wrong or the analysis fails.
538    */
539   CORBA::Short GetPointState(CORBA::Double x, CORBA::Double y, CORBA::Double z)
540     throw (SALOME::SALOME_Exception);
541
542   SMESH::CoincidentFreeBorders* FindCoincidentFreeBorders(CORBA::Double tolerance);
543   CORBA::Short SewCoincidentFreeBorders(const SMESH::CoincidentFreeBorders& freeBorders,
544                                         CORBA::Boolean                      createPolygons,
545                                         CORBA::Boolean                      createPolyedrs)
546     throw (SALOME::SALOME_Exception);
547
548   SMESH::SMESH_MeshEditor::Sew_Error
549   SewFreeBorders(CORBA::Long FirstNodeID1,
550                  CORBA::Long SecondNodeID1,
551                  CORBA::Long LastNodeID1,
552                  CORBA::Long FirstNodeID2,
553                  CORBA::Long SecondNodeID2,
554                  CORBA::Long LastNodeID2,
555                  CORBA::Boolean CreatePolygons,
556                  CORBA::Boolean CreatePolyedrs) throw (SALOME::SALOME_Exception);
557   SMESH::SMESH_MeshEditor::Sew_Error
558   SewConformFreeBorders(CORBA::Long FirstNodeID1,
559                         CORBA::Long SecondNodeID1,
560                         CORBA::Long LastNodeID1,
561                         CORBA::Long FirstNodeID2,
562                         CORBA::Long SecondNodeID2) throw (SALOME::SALOME_Exception);
563   SMESH::SMESH_MeshEditor::Sew_Error
564   SewBorderToSide(CORBA::Long FirstNodeIDOnFreeBorder,
565                   CORBA::Long SecondNodeIDOnFreeBorder,
566                   CORBA::Long LastNodeIDOnFreeBorder,
567                   CORBA::Long FirstNodeIDOnSide,
568                   CORBA::Long LastNodeIDOnSide,
569                   CORBA::Boolean CreatePolygons,
570                   CORBA::Boolean CreatePolyedrs) throw (SALOME::SALOME_Exception);
571   SMESH::SMESH_MeshEditor::Sew_Error
572   SewSideElements(const SMESH::long_array& IDsOfSide1Elements,
573                   const SMESH::long_array& IDsOfSide2Elements,
574                   CORBA::Long NodeID1OfSide1ToMerge,
575                   CORBA::Long NodeID1OfSide2ToMerge,
576                   CORBA::Long NodeID2OfSide1ToMerge,
577                   CORBA::Long NodeID2OfSide2ToMerge) throw (SALOME::SALOME_Exception);
578
579   /*!
580    * Set new nodes for given element.
581    * If number of nodes is not corresponded to type of
582    * element - returns false
583    */
584   CORBA::Boolean ChangeElemNodes(CORBA::Long ide, const SMESH::long_array& newIDs)
585     throw (SALOME::SALOME_Exception);
586
587   SMESH::SMESH_Group_ptr DoubleElements(SMESH::SMESH_IDSource_ptr theElements,
588                                         const char*               theGroupName)
589     throw (SALOME::SALOME_Exception);
590
591   CORBA::Boolean DoubleNodes( const SMESH::long_array& theNodes,
592                               const SMESH::long_array& theModifiedElems )
593     throw (SALOME::SALOME_Exception);
594
595   CORBA::Boolean DoubleNode( CORBA::Long theNodeId,
596                              const SMESH::long_array& theModifiedElems )
597     throw (SALOME::SALOME_Exception);
598
599   CORBA::Boolean DoubleNodeGroup( SMESH::SMESH_GroupBase_ptr theNodes,
600                                   SMESH::SMESH_GroupBase_ptr theModifiedElems )
601     throw (SALOME::SALOME_Exception);
602
603   /*!
604    * \brief Creates a hole in a mesh by doubling the nodes of some particular elements.
605    * Works as DoubleNodeGroup(), but returns a new group with newly created nodes.
606    * \param theNodes - group of nodes to be doubled.
607    * \param theModifiedElems - group of elements to be updated.
608    * \return a new group with newly created nodes
609    * \sa DoubleNodeGroup()
610    */
611   SMESH::SMESH_Group_ptr DoubleNodeGroupNew( SMESH::SMESH_GroupBase_ptr theNodes,
612                                              SMESH::SMESH_GroupBase_ptr theModifiedElems )
613     throw (SALOME::SALOME_Exception);
614
615   CORBA::Boolean DoubleNodeGroups( const SMESH::ListOfGroups& theNodes,
616                                    const SMESH::ListOfGroups& theModifiedElems )
617     throw (SALOME::SALOME_Exception);
618
619   SMESH::SMESH_Group_ptr DoubleNodeGroupsNew( const SMESH::ListOfGroups& theNodes,
620                                               const SMESH::ListOfGroups& theModifiedElems )
621     throw (SALOME::SALOME_Exception);
622
623   /*!
624    * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
625    * \param theElems - the list of elements (edges or faces) to be replicated
626    *       The nodes for duplication could be found from these elements
627    * \param theNodesNot - list of nodes to NOT replicate
628    * \param theAffectedElems - the list of elements (cells and edges) to which the 
629    *       replicated nodes should be associated to.
630    * \return TRUE if operation has been completed successfully, FALSE otherwise
631    * \sa DoubleNodeGroup(), DoubleNodeGroups()
632    */
633   CORBA::Boolean DoubleNodeElem( const SMESH::long_array& theElems, 
634                                  const SMESH::long_array& theNodesNot,
635                                  const SMESH::long_array& theAffectedElems )
636     throw (SALOME::SALOME_Exception);
637
638   /*!
639    * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
640    * \param theElems - the list of elements (edges or faces) to be replicated
641    *        The nodes for duplication could be found from these elements
642    * \param theNodesNot - list of nodes to NOT replicate
643    * \param theShape - shape to detect affected elements (element which geometric center
644    *        located on or inside shape).
645    *        The replicated nodes should be associated to affected elements.
646    * \return TRUE if operation has been completed successfully, FALSE otherwise
647    * \sa DoubleNodeGroupInRegion(), DoubleNodeGroupsInRegion()
648    */
649   CORBA::Boolean DoubleNodeElemInRegion( const SMESH::long_array& theElems, 
650                                          const SMESH::long_array& theNodesNot,
651                                          GEOM::GEOM_Object_ptr    theShape )
652     throw (SALOME::SALOME_Exception);
653
654   /*!
655    * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
656    * \param theElems - group of of elements (edges or faces) to be replicated
657    * \param theNodesNot - group of nodes not to replicated
658    * \param theAffectedElems - group of elements to which the replicated nodes
659    *        should be associated to.
660    * \return TRUE if operation has been completed successfully, FALSE otherwise
661    * \sa DoubleNodes(), DoubleNodeGroups(), DoubleNodeElemGroupNew()
662    */
663   CORBA::Boolean DoubleNodeElemGroup( SMESH::SMESH_GroupBase_ptr theElems,
664                                       SMESH::SMESH_GroupBase_ptr theNodesNot,
665                                       SMESH::SMESH_GroupBase_ptr theAffectedElems )
666     throw (SALOME::SALOME_Exception);
667
668   /*!
669    * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
670    * Works as DoubleNodeElemGroup(), but returns a new group with newly created elements.
671    * \param theElems - group of of elements (edges or faces) to be replicated
672    * \param theNodesNot - group of nodes not to replicated
673    * \param theAffectedElems - group of elements to which the replicated nodes
674    *        should be associated to.
675    * \return a new group with newly created elements
676    * \sa DoubleNodeElemGroup()
677    */
678   SMESH::SMESH_Group_ptr DoubleNodeElemGroupNew( SMESH::SMESH_GroupBase_ptr theElems,
679                                                  SMESH::SMESH_GroupBase_ptr theNodesNot,
680                                                  SMESH::SMESH_GroupBase_ptr theAffectedElems )
681     throw (SALOME::SALOME_Exception);
682
683   SMESH::ListOfGroups*   DoubleNodeElemGroup2New(SMESH::SMESH_GroupBase_ptr theElems,
684                                                  SMESH::SMESH_GroupBase_ptr theNodesNot,
685                                                  SMESH::SMESH_GroupBase_ptr theAffectedElems,
686                                                  CORBA::Boolean             theElemGroupNeeded,
687                                                  CORBA::Boolean             theNodeGroupNeeded)
688     throw (SALOME::SALOME_Exception);
689   
690   /*!
691    * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
692    * \param theElems - group of of elements (edges or faces) to be replicated
693    * \param theNodesNot - group of nodes not to replicated
694    * \param theShape - shape to detect affected elements (element which geometric center
695    *        located on or inside shape).
696    *        The replicated nodes should be associated to affected elements.
697    * \return TRUE if operation has been completed successfully, FALSE otherwise
698    * \sa DoubleNodesInRegion(), DoubleNodeGroupsInRegion()
699    */
700   CORBA::Boolean DoubleNodeElemGroupInRegion( SMESH::SMESH_GroupBase_ptr theElems,
701                                               SMESH::SMESH_GroupBase_ptr theNodesNot,
702                                               GEOM::GEOM_Object_ptr      theShape )
703     throw (SALOME::SALOME_Exception);
704
705   /*!
706    * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
707    * This method provided for convenience works as DoubleNodes() described above.
708    * \param theElems - list of groups of elements (edges or faces) to be replicated
709    * \param theNodesNot - list of groups of nodes not to replicated
710    * \param theAffectedElems - group of elements to which the replicated nodes
711    *        should be associated to.
712    * \return TRUE if operation has been completed successfully, FALSE otherwise
713    * \sa DoubleNodeGroup(), DoubleNodes(), DoubleNodeElemGroupsNew()
714    */
715   CORBA::Boolean DoubleNodeElemGroups( const SMESH::ListOfGroups& theElems,
716                                        const SMESH::ListOfGroups& theNodesNot,
717                                        const SMESH::ListOfGroups& theAffectedElems )
718     throw (SALOME::SALOME_Exception);
719
720   /*!
721    * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
722    * Works as DoubleNodeElemGroups(), but returns a new group with newly created elements.
723    * \param theElems - list of groups of elements (edges or faces) to be replicated
724    * \param theNodesNot - list of groups of nodes not to replicated
725    * \param theAffectedElems - group of elements to which the replicated nodes
726    *        should be associated to.
727    * \return a new group with newly created elements
728    * \sa DoubleNodeElemGroups()
729    */
730   SMESH::SMESH_Group_ptr DoubleNodeElemGroupsNew( const SMESH::ListOfGroups& theElems,
731                                                   const SMESH::ListOfGroups& theNodesNot,
732                                                   const SMESH::ListOfGroups& theAffectedElems )
733     throw (SALOME::SALOME_Exception);
734
735   SMESH::ListOfGroups*   DoubleNodeElemGroups2New(const SMESH::ListOfGroups& theElems,
736                                                   const SMESH::ListOfGroups& theNodesNot,
737                                                   const SMESH::ListOfGroups& theAffectedElems,
738                                                   CORBA::Boolean             theElemGroupNeeded,
739                                                   CORBA::Boolean             theNodeGroupNeeded)
740     throw (SALOME::SALOME_Exception);
741
742   /*!
743    * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
744    * This method provided for convenience works as DoubleNodes() described above.
745    * \param theElems - list of groups of elements (edges or faces) to be replicated
746    * \param theNodesNot - list of groups of nodes not to replicated
747    * \param theShape - shape to detect affected elements (element which geometric center
748    *        located on or inside shape).
749    *        The replicated nodes should be associated to affected elements.
750    * \return TRUE if operation has been completed successfully, FALSE otherwise
751    * \sa DoubleNodeGroupInRegion(), DoubleNodesInRegion()
752    */
753   CORBA::Boolean DoubleNodeElemGroupsInRegion( const SMESH::ListOfGroups& theElems,
754                                                const SMESH::ListOfGroups& theNodesNot,
755                                                GEOM::GEOM_Object_ptr      theShape )
756     throw (SALOME::SALOME_Exception);
757
758   /*!
759    * \brief Identify the elements that will be affected by node duplication (actual duplication is not performed.
760    * This method is the first step of DoubleNodeElemGroupsInRegion.
761    * \param theElems - list of groups of elements (edges or faces) to be replicated
762    * \param theNodesNot - list of groups of nodes not to replicated
763    * \param theShape - shape to detect affected elements (element which geometric center
764    *        located on or inside shape).
765    *        The replicated nodes should be associated to affected elements.
766    * \return groups of affected elements
767    * \sa DoubleNodeElemGroupsInRegion()
768    */
769   SMESH::ListOfGroups* AffectedElemGroupsInRegion( const SMESH::ListOfGroups& theElems,
770                                                    const SMESH::ListOfGroups& theNodesNot,
771                                                    GEOM::GEOM_Object_ptr      theShape )
772     throw (SALOME::SALOME_Exception);
773
774   /*!
775    * \brief Double nodes on shared faces between groups of volumes and create flat elements on demand.
776    * The list of groups must describe a partition of the mesh volumes.
777    * The nodes of the internal faces at the boundaries of the groups are doubled.
778    * In option, the internal faces are replaced by flat elements.
779    * Triangles are transformed in prisms, and quadrangles in hexahedrons.
780    * \param theDomains - list of groups of volumes
781    * \param createJointElems - if TRUE, create the elements
782    * \param onAllBoundaries - if TRUE, the nodes and elements are also create on
783    *        the boundary between \a theDomains and the rest mesh
784    * \return TRUE if operation has been completed successfully, FALSE otherwise
785    */
786   CORBA::Boolean DoubleNodesOnGroupBoundaries( const SMESH::ListOfGroups& theDomains,
787                                                CORBA::Boolean             createJointElems,
788                                                CORBA::Boolean             onAllBoundaries )
789     throw (SALOME::SALOME_Exception);
790   /*!
791    * \brief Double nodes on some external faces and create flat elements.
792    * Flat elements are mainly used by some types of mechanic calculations.
793    *
794    * Each group of the list must be constituted of faces.
795    * Triangles are transformed in prisms, and quadrangles in hexahedrons.
796    * @param theGroupsOfFaces - list of groups of faces
797    * @return TRUE if operation has been completed successfully, FALSE otherwise
798    */
799   CORBA::Boolean CreateFlatElementsOnFacesGroups( const SMESH::ListOfGroups& theGroupsOfFaces )
800     throw (SALOME::SALOME_Exception);
801
802   /*!
803    *  \brief identify all the elements around a geom shape, get the faces delimiting the hole
804    *  Build groups of volume to remove, groups of faces to replace on the skin of the object,
805    *  groups of faces to remove insidethe object, (idem edges).
806    *  Build ordered list of nodes at the border of each group of faces to replace (to be used to build a geom subshape)
807    */
808   void CreateHoleSkin(CORBA::Double radius,
809                       GEOM::GEOM_Object_ptr theShape,
810                       const char* groupName,
811                       const SMESH::double_array& theNodesCoords,
812                       SMESH::array_of_long_array_out GroupsOfNodes)
813   throw (SALOME::SALOME_Exception);
814
815   /*!
816    * \brief Generated skin mesh (containing 2D cells) from 3D mesh
817    * The created 2D mesh elements based on nodes of free faces of boundary volumes
818    * \return TRUE if operation has been completed successfully, FALSE otherwise
819    */
820   CORBA::Boolean Make2DMeshFrom3D()
821     throw (SALOME::SALOME_Exception);
822
823   SMESH::SMESH_Mesh_ptr MakeBoundaryMesh(SMESH::SMESH_IDSource_ptr elements,
824                                          SMESH::Bnd_Dimension      dimension,
825                                          const char*               groupName,
826                                          const char*               meshName,
827                                          CORBA::Boolean            toCopyElements,
828                                          CORBA::Boolean            toCopyMissingBondary,
829                                          SMESH::SMESH_Group_out    group)
830     throw (SALOME::SALOME_Exception);
831
832   CORBA::Long MakeBoundaryElements(SMESH::Bnd_Dimension dimension,
833                                    const char* groupName,
834                                    const char* meshName,
835                                    CORBA::Boolean toCopyAll,
836                                    const SMESH::ListOfIDSources& groups,
837                                    SMESH::SMESH_Mesh_out mesh,
838                                    SMESH::SMESH_Group_out group)
839     throw (SALOME::SALOME_Exception);
840
841 private: //!< private methods
842
843   ::SMESH_MeshEditor& getEditor();
844
845   SMESHDS_Mesh * getMeshDS() { return myMesh->GetMeshDS(); }
846
847   MeshEditor_I::TPreviewMesh * getPreviewMesh( SMDSAbs_ElementType previewType = SMDSAbs_All );
848
849   void declareMeshModified( bool isReComputeSafe );
850
851   /*!
852    * \brief Clear myLastCreated* or myPreviewData
853    */
854   void initData(bool deleteSearchers=true);
855
856   /*!
857    * \brief Return groups by their IDs
858    */
859   SMESH::ListOfGroups* getGroups(const std::list<int>* groupIDs)
860     throw (SALOME::SALOME_Exception);
861
862   SMESH::ListOfGroups* mirror(TIDSortedElemSet &                  IDsOfElements,
863                               const SMESH::AxisStruct &           Axis,
864                               SMESH::SMESH_MeshEditor::MirrorType MirrorType,
865                               CORBA::Boolean                      Copy,
866                               bool                                MakeGroups,
867                               ::SMESH_Mesh*                       TargetMesh=0)
868     throw (SALOME::SALOME_Exception);
869   SMESH::ListOfGroups* translate(TIDSortedElemSet        & IDsOfElements,
870                                  const SMESH::DirStruct &  Vector,
871                                  CORBA::Boolean            Copy,
872                                  bool                      MakeGroups,
873                                  ::SMESH_Mesh*             TargetMesh=0)
874     throw (SALOME::SALOME_Exception);
875   SMESH::ListOfGroups* rotate(TIDSortedElemSet &           IDsOfElements,
876                               const SMESH::AxisStruct &  Axis,
877                               CORBA::Double             Angle,
878                               CORBA::Boolean            Copy,
879                               bool                      MakeGroups,
880                               ::SMESH_Mesh*             TargetMesh=0)
881     throw (SALOME::SALOME_Exception);
882
883   SMESH::ListOfGroups* scale(SMESH::SMESH_IDSource_ptr   theObject,
884                              const SMESH::PointStruct&   thePoint,
885                              const SMESH::double_array&  theScaleFact,
886                              CORBA::Boolean              theCopy,
887                              bool                        theMakeGroups,
888                              ::SMESH_Mesh*               theTargetMesh=0)
889     throw (SALOME::SALOME_Exception);
890
891   void convertToQuadratic(CORBA::Boolean            theForce3d,
892                           CORBA::Boolean            theToBiQuad,
893                           SMESH::SMESH_IDSource_ptr theObject = SMESH::SMESH_IDSource::_nil())
894     throw (SALOME::SALOME_Exception);
895
896   SMESH::SMESH_Mesh_ptr makeMesh(const char* theMeshName);
897
898   void dumpGroupsList(SMESH::TPythonDump &        theDumpPython,
899                       const SMESH::ListOfGroups * theGroupList);
900
901   std::string generateGroupName(const std::string& thePrefix);
902
903   void prepareIdSource(SMESH::SMESH_IDSource_ptr theObject);
904
905
906   enum IDSource_Error { IDSource_OK, IDSource_INVALID, IDSource_EMPTY };
907
908   bool idSourceToSet(SMESH::SMESH_IDSource_ptr  theIDSource,
909                      const SMESHDS_Mesh*        theMeshDS,
910                      TIDSortedElemSet&          theElemSet,
911                      const SMDSAbs_ElementType  theType,
912                      const bool                 emptyIfIsMesh = false,
913                      IDSource_Error*            error = 0);
914
915   void findCoincidentNodes( TIDSortedNodeSet &             Nodes,
916                             CORBA::Double                  Tolerance,
917                             SMESH::array_of_long_array_out GroupsOfNodes,
918                             CORBA::Boolean                 SeparateCornersAndMedium);
919
920
921
922  private: //!< fields
923
924   SMESH_Mesh_i*                myMesh_i;
925   SMESH_Mesh *                 myMesh;
926   ::SMESH_MeshEditor           myEditor;
927
928   bool                         myIsPreviewMode;
929   MeshEditor_I::TPreviewMesh * myPreviewMesh;
930   ::SMESH_MeshEditor *         myPreviewEditor;
931   SMESH::MeshPreviewStruct_var myPreviewData;
932
933   // temporary IDSources
934   struct _IDSource;
935   // std::list< _IDSource* >      myAuxIDSources;
936   // void                         deleteAuxIDSources();
937 };
938
939 #endif