Salome HOME
Remove GEOM namespace from SMESH idl file
[modules/smesh.git] / idl / SMESH_Mesh.idl
1 //  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
2 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
3 //
4 //  This library is free software; you can redistribute it and/or
5 //  modify it under the terms of the GNU Lesser General Public
6 //  License as published by the Free Software Foundation; either
7 //  version 2.1 of the License.
8 //
9 //  This library is distributed in the hope that it will be useful,
10 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
11 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 //  Lesser General Public License for more details.
13 //
14 //  You should have received a copy of the GNU Lesser General Public
15 //  License along with this library; if not, write to the Free Software
16 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 //
18 //  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
19 //
20 //
21 //
22 //  File   : SMESH_Mesh.idl
23 //  Author : Paul RASCLE, EDF
24 //  $Header$
25
26 #ifndef _SMESH_MESH_IDL_
27 #define _SMESH_MESH_IDL_
28
29 #include "SALOME_Exception.idl"
30 #include "SALOME_GenericObj.idl"
31
32 #include "GEOM_Gen.idl"
33 #include "MED.idl"
34
35
36 module SMESH
37 {
38   interface SMESH_Hypothesis;
39   typedef sequence<SMESH_Hypothesis> ListOfHypothesis;
40
41   typedef sequence<double> double_array ;
42   typedef sequence<long> long_array ;
43   typedef sequence<string> string_array ;
44   typedef sequence<long_array> array_of_long_array ;
45
46   enum log_command
47     {
48       ADD_NODE,
49       ADD_EDGE,
50       ADD_TRIANGLE,
51       ADD_QUADRANGLE,
52       ADD_POLYGON,
53       ADD_TETRAHEDRON,
54       ADD_PYRAMID,
55       ADD_PRISM,
56       ADD_HEXAHEDRON,
57       ADD_POLYHEDRON,
58       REMOVE_NODE,
59       REMOVE_ELEMENT,
60       MOVE_NODE,
61       CHANGE_ELEMENT_NODES,
62       CHANGE_POLYHEDRON_NODES,
63       RENUMBER
64     };
65
66   struct log_block
67   {
68     long commandType;
69     long number;
70     double_array coords;
71     long_array indexes;
72   };
73
74   struct PointStruct { double x;
75                        double y;
76                        double z; } ;
77   struct DirStruct   { PointStruct PS ; } ;          // analog to Occ Direction
78
79   struct AxisStruct  { double x;
80                        double y;
81                        double z;
82                        double vx;
83                        double vy;
84                        double vz; } ;
85
86
87   /*!
88    * Enumeration for element type, like in SMDS
89    */
90   enum ElementType
91   {
92     ALL,
93     NODE,
94     EDGE,
95     FACE,
96     VOLUME
97   };
98
99   /*!
100    * Enumeration for hypothesis status (used by AddHypothesis() and RemoveHypothesis() methods)
101    */
102   enum Hypothesis_Status // in the order of severity
103   {
104     HYP_OK,
105     HYP_MISSING,      // algo misses a hypothesis
106     HYP_CONCURENT,    // several applicable hypotheses
107     HYP_BAD_PARAMETER,// hypothesis has a bad parameter value
108     HYP_UNKNOWN_FATAL,//  --- all statuses below should be considered as fatal
109                       //      for Add/RemoveHypothesis operations
110     HYP_INCOMPATIBLE, // hypothesis does not fit algo
111     HYP_NOTCONFORM,   // not conform mesh is produced appling a hypothesis
112     HYP_ALREADY_EXIST,// such hypothesis already exist
113     HYP_BAD_DIM       // bad dimension
114   };
115
116   /*!
117    * Enumeration for DriverMED read status (used by ImportMEDFile() method)
118    */
119   enum DriverMED_ReadStatus // in the order of severity
120   {
121     DRS_OK,
122     DRS_EMPTY,          // a MED file contains no mesh with the given name
123     DRS_WARN_RENUMBER,  // a MED file has overlapped ranges of element numbers,
124                         // so the numbers from the file are ignored
125     DRS_WARN_SKIP_ELEM, // some elements were skipped due to incorrect file data
126     DRS_FAIL            // general failure (exception etc.)
127   };
128
129   /*!
130    * Enumeration for DriverMED (used by Perform() method)
131    */
132   enum MED_VERSION // in the order of severity
133   {
134     MED_V2_1,
135     MED_V2_2
136   };
137
138   typedef sequence<log_block> log_array;
139
140
141   /*!
142    * Auxilary flags for advanced extrusion.
143    * BOUNDARY: create or not boundary for result of extrusion
144    * SEW:      try to use existing nodes or create new nodes in any case
145    */
146   const long EXTRUSION_FLAG_BOUNDARY = 1;
147   const long EXTRUSION_FLAG_SEW = 2;
148   
149   interface SMESH_IDSource
150   {
151     /*!
152      * Returns a sequence of all element IDs
153      */
154     long_array GetIDs();
155   };
156
157   interface SMESH_GroupBase;
158   interface SMESH_Group;
159   interface SMESH_GroupOnGeom;
160   interface SMESH_subMesh;
161   interface SMESH_MeshEditor;
162   interface SMESH_Mesh : SALOME::GenericObj, SMESH_IDSource
163   {
164     ///*!
165     // * Associate a Shape to a Mesh created with NewEmpty
166     // */
167     //boolean SetMesh(in GEOM::GEOM_Object anObject)
168     //  raises (SALOME::SALOME_Exception);
169
170     /*!
171      * Get the subMesh object associated to a subShape. The subMesh object
172      * gives access to nodes and elements IDs.
173      * SubMesh will be used instead of SubShape in a next idl version to
174      * adress a specific subMesh...
175      */
176     SMESH_subMesh GetSubMesh(in GEOM::GEOM_Object aSubObject, in string name)
177       raises (SALOME::SALOME_Exception);
178
179     ///*!
180     // * Create a subMesh without reference to a subShape
181     // */
182     //SMESH_subMesh NewEmpty()
183     //  raises (SALOME::SALOME_Exception);
184
185     /*!
186      * Get geom shape to mesh. A result may be nil
187      */
188     GEOM::GEOM_Object GetShapeToMesh()
189       raises (SALOME::SALOME_Exception);
190
191     /*!
192      * Remove a submesh
193      */
194     void RemoveSubMesh(in SMESH_subMesh aSubMesh)
195       raises (SALOME::SALOME_Exception);
196
197     /*!
198      * Create a group
199      */
200     SMESH_Group CreateGroup( in ElementType elem_type,
201                              in string name )
202       raises (SALOME::SALOME_Exception);
203
204     /*!
205      * Create a group from geometry group
206      */
207     SMESH_GroupOnGeom CreateGroupFromGEOM( in ElementType elem_type,
208                                           in string name,
209                                           in GEOM::GEOM_Object theGeomObject )
210       raises (SALOME::SALOME_Exception);
211
212     /*!
213      * Remove a group
214      */
215     void RemoveGroup(in SMESH_GroupBase aGroup)
216       raises (SALOME::SALOME_Exception);
217
218     /*!
219      *  Remove group with its contents
220      */
221     void RemoveGroupWithContents( in SMESH_GroupBase aGroup )
222       raises (SALOME::SALOME_Exception);
223
224     /*!
225      * Union of two groups
226      *    New group is created. All mesh elements that are
227      *    present in initial groups are added to the new one
228      */
229     SMESH_Group UnionGroups (in SMESH_GroupBase aGroup1,
230                              in SMESH_GroupBase aGroup2,
231                              in string          name )
232       raises (SALOME::SALOME_Exception);
233
234     /*!
235      *  Intersection of two groups
236      *  New group is created. All mesh elements that are
237      *  present in both initial groups are added to the new one.
238      */
239     SMESH_Group IntersectGroups (in SMESH_GroupBase aGroup1,
240                                  in SMESH_GroupBase aGroup2,
241                                  in string          name )
242       raises (SALOME::SALOME_Exception);
243
244     /*!
245      *  Cut of two groups
246      *  New group is created. All mesh elements that are present in
247      *  main group but do not present in tool group are added to the new one
248      */
249     SMESH_Group CutGroups (in SMESH_GroupBase aMainGroup,
250                            in SMESH_GroupBase aToolGroup,
251                            in string          name )
252       raises (SALOME::SALOME_Exception);
253
254     /*!
255      * Add hypothesis to the mesh, under a particular subShape
256      * (or the main shape itself)
257      * The Add method is only used to prepare the build of the mesh and store
258      * the algorithms and associated parameters.
259      * Actual job of mesh the shape is done by MESH_Gen.
260      * @params
261      * - aSubShape : subShape obtained by a shape explode in GEOM
262      *   (or main shape)
263      * - anHyp : hypothesis object
264      * @return
265      * - OK if the hypothesis is compatible with the subShape
266      *   (and all previous hypothesis on the subShape)
267      * - NOK if the hypothesis is not compatible with the subShape
268      *   (or one previous hypothesis on the subShape)
269      * raises exception if hypothesis has not been created
270      */
271     Hypothesis_Status AddHypothesis(in GEOM::GEOM_Object aSubObject,
272                                     in SMESH_Hypothesis anHyp)
273       raises (SALOME::SALOME_Exception);
274 //     boolean AddHypothesis(in SMESH_subMesh aSubMesh, in SMESH_Hypothesis anHyp)
275 //       raises (SALOME::SALOME_Exception);
276
277     /*!
278      * Remove an hypothesis previouly added with AddHypothesis.
279      */
280     Hypothesis_Status RemoveHypothesis(in GEOM::GEOM_Object aSubObject,
281                                        in SMESH_Hypothesis anHyp)
282       raises (SALOME::SALOME_Exception);
283 //     boolean RemoveHypothesis(in SMESH_subMesh aSubMesh,
284 //                           in SMESH_Hypothesis anHyp)
285 //       raises (SALOME::SALOME_Exception);
286
287     /*!
288      * Get the list of hypothesis added on a subShape
289      */
290     ListOfHypothesis GetHypothesisList(in GEOM::GEOM_Object aSubObject)
291       raises (SALOME::SALOME_Exception);
292 //     ListOfHypothesis GetHypothesisList(in SMESH_subMesh aSubMesh)
293 //       raises (SALOME::SALOME_Exception);
294
295     /*!
296      * Get the log of nodes and elements added or removed since previous
297      * clear of the log.
298      * @params
299      * - clearAfterGet : log is emptied after Get (safe if concurrents access)
300      */
301     //    string_array GetLog(in boolean clearAfterGet)
302     //      raises (SALOME::SALOME_Exception);
303     log_array GetLog(in boolean clearAfterGet)
304       raises (SALOME::SALOME_Exception);
305
306     /*!
307      * Clear the log of nodes and elements added or removed since previous
308      * clear. Must be used immediately after GetLog if clearAfterGet is false.
309      */
310     void ClearLog()
311       raises (SALOME::SALOME_Exception);
312
313     /*!
314      * Get the internal Id
315      */
316     long GetId();
317
318     /*!
319      * Get the study Id
320      */
321     long GetStudyId();
322
323     /*!
324      * Obtain instance of SMESH_MeshEditor
325      */
326     SMESH_MeshEditor GetMeshEditor()
327       raises (SALOME::SALOME_Exception);
328
329     /*!
330      * Export Mesh to different MED Formats
331      * @params
332      * - auto_groups : boolean parameter for creating/not creating
333      *   the groups Group_On_All_Nodes, Group_On_All_Faces, ... ;
334      *   the typical use is auto_groups=false.
335      * - theVersion : define the version of format of MED file, that will be created
336      */
337     void ExportToMED( in string file, in boolean auto_groups, in MED_VERSION theVersion )
338       raises (SALOME::SALOME_Exception);
339
340     /*!
341      * Export Mesh to MED_V2_1 MED format
342      * Works, just the same as ExportToMED, with MED_VERSION parameter equal to MED_V2_1.
343      * The method is kept in order to support old functionality
344      */
345     void ExportMED( in string file, in boolean auto_groups )
346       raises (SALOME::SALOME_Exception);
347
348     /*!
349      * Export Mesh to DAT, UNV and STL Formats
350      */
351     void ExportDAT( in string file )
352       raises (SALOME::SALOME_Exception);
353     void ExportUNV( in string file )
354       raises (SALOME::SALOME_Exception);
355     void ExportSTL( in string file, in boolean isascii )
356       raises (SALOME::SALOME_Exception);
357
358     /*!
359      * Get MED Mesh
360      */
361     SALOME_MED::MESH GetMEDMesh()
362       raises (SALOME::SALOME_Exception);
363
364     /*!
365      * Get informations about mesh contents
366      */
367     long NbNodes()
368       raises (SALOME::SALOME_Exception);
369
370     long NbElements()
371       raises (SALOME::SALOME_Exception);
372
373     long NbEdges()
374       raises (SALOME::SALOME_Exception);
375
376     long NbFaces()
377       raises (SALOME::SALOME_Exception);
378
379     long NbTriangles()
380       raises (SALOME::SALOME_Exception);
381
382     long NbQuadrangles()
383       raises (SALOME::SALOME_Exception);
384
385     long NbPolygons()
386       raises (SALOME::SALOME_Exception);
387
388     long NbVolumes()
389       raises (SALOME::SALOME_Exception);
390
391     long NbTetras()
392       raises (SALOME::SALOME_Exception);
393
394     long NbHexas()
395       raises (SALOME::SALOME_Exception);
396
397     long NbPyramids()
398       raises (SALOME::SALOME_Exception);
399
400     long NbPrisms()
401       raises (SALOME::SALOME_Exception);
402
403     long NbPolyhedrons()
404       raises (SALOME::SALOME_Exception);
405
406     long NbSubMesh()
407       raises (SALOME::SALOME_Exception);
408
409     long_array GetElementsId()
410       raises (SALOME::SALOME_Exception);
411
412     long_array GetElementsByType( in ElementType theType )
413       raises (SALOME::SALOME_Exception);
414
415     long_array GetNodesId()
416       raises (SALOME::SALOME_Exception);
417     
418     /*!
419      * Returns type of mesh element
420      */    
421     ElementType GetElementType( in long id, in boolean iselem )
422       raises (SALOME::SALOME_Exception);
423
424     /*!
425      * Get mesh description
426      */
427     string Dump();
428   };
429
430   interface SMESH_subMesh : SALOME::GenericObj, SMESH_IDSource
431   {
432     /*!
433      *
434      */
435     long GetNumberOfElements()
436       raises (SALOME::SALOME_Exception);
437
438     /*!
439      *
440      */
441     long GetNumberOfNodes( in boolean all )
442       raises (SALOME::SALOME_Exception);
443
444     /*!
445      *
446      */
447     long_array GetElementsId()
448       raises (SALOME::SALOME_Exception);
449
450     /*!
451      *
452      */
453     long_array GetElementsByType( in ElementType theType )
454       raises (SALOME::SALOME_Exception);
455     
456     /*!
457      * Return type of submesh element
458      */
459     ElementType GetElementType( in long id, in boolean iselem )
460       raises (SALOME::SALOME_Exception);
461
462     /*!
463      *
464      */
465     long_array GetNodesId()
466       raises (SALOME::SALOME_Exception);
467
468     /*!
469      * Get geom shape the submesh is dedicated to
470      */
471     GEOM::GEOM_Object GetSubShape()
472       raises (SALOME::SALOME_Exception);
473
474     /*!
475      * Get SMESH_Mesh which stores nodes coordinates & elements definition
476      */
477     SMESH_Mesh GetFather()
478       raises (SALOME::SALOME_Exception);
479
480     /*!
481      * Get the internal Id
482      */
483     long GetId();
484
485     /*!
486      * Get MED subMesh
487      */
488     SALOME_MED::FAMILY GetFamily()
489       raises (SALOME::SALOME_Exception);
490   };
491
492   /*!
493    * This interface makes modifications on the Mesh - removing elements and nodes etc.
494    */
495   interface NumericalFunctor;
496   interface SMESH_MeshEditor
497   {
498     boolean RemoveElements(in long_array IDsOfElements);
499
500     boolean RemoveNodes(in long_array IDsOfNodes);
501
502     boolean AddNode(in double x, in double y, in double z);
503
504     boolean AddEdge(in long_array IDsOfNodes);
505
506     boolean AddFace(in long_array IDsOfNodes);
507
508     boolean AddVolume(in long_array IDsOfNodes);
509
510     /*!
511      *  Create volume of many faces, giving nodes for each face.
512      *  \param IdsOfNodes List of node IDs for volume creation face by face.
513      *  \param Quantities List of integer values, Quantities[i]
514      *         gives quantity of nodes in face number i.
515      */
516     boolean AddPolyhedralVolume (in long_array IdsOfNodes,
517                                  in long_array Quantities);
518
519     /*!
520      *  Create volume of many faces, giving IDs of existing faces.
521      *  \param IdsOfFaces List of face IDs for volume creation.
522      *  \note The created volume will refer only to nodes
523      *        of the given faces, not to the faces itself.
524      */
525     boolean AddPolyhedralVolumeByFaces (in long_array IdsOfFaces);
526
527     boolean MoveNode(in long NodeID, in double x, in double y, in double z);
528
529     boolean InverseDiag(in long NodeID1, in long NodeID2);
530
531     boolean DeleteDiag(in long NodeID1, in long NodeID2);
532
533     boolean Reorient(in long_array IDsOfElements);
534
535     boolean ReorientObject(in SMESH_IDSource theObject);
536
537     /*!
538      * \brief Fuse neighbour triangles into quadrangles.
539      * \param theElems     The triangles to be fused.
540      * \param theCriterion Is used to choose a neighbour to fuse with.
541      * \param theMaxAngle  Is a max angle between element normals at which fusion
542      *                     is still performed; theMaxAngle is mesured in radians.
543      * \return TRUE in case of success, FALSE otherwise.
544      */
545     boolean TriToQuad (in long_array       IDsOfElements,
546                        in NumericalFunctor Criterion,
547                        in double           MaxAngle);
548
549     /*!
550      * \brief Fuse neighbour triangles into quadrangles.
551      *
552      * Behaves like the above method, taking list of elements from \a theObject
553      */
554     boolean TriToQuadObject (in SMESH_IDSource   theObject,
555                              in NumericalFunctor Criterion,
556                              in double           MaxAngle);
557
558     /*!
559      * \brief Split quadrangles into triangles.
560      * \param theElems     The faces to be splitted.
561      * \param theCriterion Is used to choose a diagonal for splitting.
562      * \return TRUE in case of success, FALSE otherwise.
563      */
564     boolean QuadToTri (in long_array       IDsOfElements,
565                        in NumericalFunctor Criterion);
566
567     /*!
568      * \brief Split quadrangles into triangles.
569      *
570      * Behaves like the above method, taking list of elements from \a theObject
571      */
572     boolean QuadToTriObject (in SMESH_IDSource   theObject,
573                              in NumericalFunctor Criterion);
574
575     /*!
576      * \brief Split quadrangles into triangles.
577      * \param theElems  The faces to be splitted.
578      * \param the13Diag Is used to choose a diagonal for splitting.
579      * \return TRUE in case of success, FALSE otherwise.
580      */
581     boolean SplitQuad (in long_array IDsOfElements,
582                        in boolean    Diag13);
583
584     /*!
585      * \brief Split quadrangles into triangles.
586      *
587      * Behaves like the above method, taking list of elements from \a theObject
588      */
589     boolean SplitQuadObject (in SMESH_IDSource theObject,
590                              in boolean        Diag13);
591
592     /*!
593      *  Find better splitting of the given quadrangle.
594      *  \param IDOfQuad  ID of the quadrangle to be splitted.
595      *  \param Criterion A criterion to choose a diagonal for splitting.
596      *  \return 1 if 1-3 diagonal is better, 2 if 2-4
597      *          diagonal is better, 0 if error occurs.
598      */
599     long BestSplit (in long             IDOfQuad,
600                     in NumericalFunctor Criterion);
601
602     enum Smooth_Method { LAPLACIAN_SMOOTH, CENTROIDAL_SMOOTH };
603
604     boolean Smooth(in long_array    IDsOfElements,
605                    in long_array    IDsOfFixedNodes,
606                    in long          MaxNbOfIterations,
607                    in double        MaxAspectRatio,
608                    in Smooth_Method Method);
609
610     boolean SmoothObject(in SMESH_IDSource  theObject,
611                          in long_array      IDsOfFixedNodes,
612                          in long            MaxNbOfIterations,
613                          in double          MaxAspectRatio,
614                          in Smooth_Method   Method);
615
616     boolean SmoothParametric(in long_array    IDsOfElements,
617                              in long_array    IDsOfFixedNodes,
618                              in long          MaxNbOfIterations,
619                              in double        MaxAspectRatio,
620                              in Smooth_Method Method);
621
622     boolean SmoothParametricObject(in SMESH_IDSource  theObject,
623                                    in long_array      IDsOfFixedNodes,
624                                    in long            MaxNbOfIterations,
625                                    in double          MaxAspectRatio,
626                                    in Smooth_Method   Method);
627
628     void RenumberNodes();
629
630     void RenumberElements();
631
632     void RotationSweep(in long_array       IDsOfElements,
633                        in AxisStruct       Axix,
634                        in double           AngleInRadians,
635                        in long             NbOfSteps,
636                        in double           Tolerance);
637
638     void RotationSweepObject(in SMESH_IDSource  theObject,
639                              in AxisStruct      Axix,
640                              in double          AngleInRadians,
641                              in long            NbOfSteps,
642                              in double          Tolerance);
643
644     void ExtrusionSweep(in long_array      IDsOfElements,
645                         in DirStruct       StepVector,
646                         in long            NbOfSteps);
647
648    /*!
649     * Generate new elements by extrusion of theElements 
650     * by StepVector by NbOfSteps
651     * param ExtrFlags set flags for performing extrusion
652     * param SewTolerance - uses for comparing locations of nodes if flag
653     *   EXTRUSION_FLAG_SEW is set
654     */
655     void AdvancedExtrusion(in long_array      IDsOfElements,
656                            in DirStruct       StepVector,
657                            in long            NbOfSteps,
658                            in long            ExtrFlags,
659                            in double          SewTolerance);
660
661     void ExtrusionSweepObject(in SMESH_IDSource  theObject,
662                               in DirStruct       StepVector,
663                               in long            NbOfSteps);
664
665     void ExtrusionSweepObject1D(in SMESH_IDSource theObject,
666                                 in DirStruct      StepVector,
667                                 in long           NbOfSteps);
668
669     void ExtrusionSweepObject2D(in SMESH_IDSource theObject,
670                                 in DirStruct      StepVector,
671                                 in long           NbOfSteps);
672
673     enum Extrusion_Error {
674       EXTR_OK,
675       EXTR_NO_ELEMENTS,
676       EXTR_PATH_NOT_EDGE,
677       EXTR_BAD_PATH_SHAPE,
678       EXTR_BAD_STARTING_NODE,
679       EXTR_BAD_ANGLES_NUMBER,
680       EXTR_CANT_GET_TANGENT
681       };
682
683     Extrusion_Error ExtrusionAlongPath(in long_array        IDsOfElements,
684                                        in SMESH_Mesh        PathMesh,
685                                        in GEOM::GEOM_Object PathShape,
686                                        in long              NodeStart,
687                                        in boolean           HasAngles,
688                                        in double_array      Angles,
689                                        in boolean           HasRefPoint,
690                                        in PointStruct       RefPoint);
691
692     Extrusion_Error ExtrusionAlongPathObject(in SMESH_IDSource    theObject,
693                                              in SMESH_Mesh        PathMesh,
694                                              in GEOM::GEOM_Object PathShape,
695                                              in long              NodeStart,
696                                              in boolean           HasAngles,
697                                              in double_array      Angles,
698                                              in boolean           HasRefPoint,
699                                              in PointStruct       RefPoint);
700
701     enum MirrorType { POINT, AXIS, PLANE };
702
703     void Mirror (in long_array       IDsOfElements,
704                  in AxisStruct       Mirror,
705                  in MirrorType       theMirrorType,
706                  in boolean          Copy);
707
708     void MirrorObject (in SMESH_IDSource  theObject,
709                        in AxisStruct      Mirror,
710                        in MirrorType      theMirrorType,
711                        in boolean         Copy);
712
713     void Translate (in long_array      IDsOfElements,
714                     in DirStruct       Vector,
715                     in boolean         Copy);
716
717     void TranslateObject (in SMESH_IDSource  theObject,
718                           in DirStruct       Vector,
719                           in boolean         Copy);
720
721     void Rotate (in long_array       IDsOfElements,
722                  in AxisStruct       Axis,
723                  in double           AngleInRadians,
724                  in boolean          Copy);
725
726     void RotateObject (in SMESH_IDSource  theObject,
727                        in AxisStruct      Axis,
728                        in double          AngleInRadians,
729                        in boolean         Copy);
730
731     void FindCoincidentNodes (in  double              Tolerance,
732                               out array_of_long_array GroupsOfNodes);
733
734     void MergeNodes (in array_of_long_array GroupsOfNodes);
735
736     void MergeEqualElements();
737
738     enum Sew_Error {
739       SEW_OK,
740       SEW_BORDER1_NOT_FOUND,
741       SEW_BORDER2_NOT_FOUND,
742       SEW_BOTH_BORDERS_NOT_FOUND,
743       SEW_BAD_SIDE_NODES,
744       SEW_VOLUMES_TO_SPLIT,
745       // for SewSideElements() only:
746       SEW_DIFF_NB_OF_ELEMENTS,
747       SEW_TOPO_DIFF_SETS_OF_ELEMENTS,
748       SEW_BAD_SIDE1_NODES,
749       SEW_BAD_SIDE2_NODES
750       };
751
752     Sew_Error SewFreeBorders (in long FirstNodeID1,
753                               in long SecondNodeID1,
754                               in long LastNodeID1,
755                               in long FirstNodeID2,
756                               in long SecondNodeID2,
757                               in long LastNodeID2,
758                               in boolean CreatePolygons,
759                               in boolean CreatePolyedrs);
760
761     Sew_Error SewConformFreeBorders (in long FirstNodeID1,
762                                      in long SecondNodeID1,
763                                      in long LastNodeID1,
764                                      in long FirstNodeID2,
765                                      in long SecondNodeID2);
766
767     Sew_Error SewBorderToSide (in long FirstNodeIDOnFreeBorder,
768                                in long SecondNodeIDOnFreeBorder,
769                                in long LastNodeIDOnFreeBorder,
770                                in long FirstNodeIDOnSide,
771                                in long LastNodeIDOnSide,
772                                in boolean CreatePolygons,
773                                in boolean CreatePolyedrs);
774
775     Sew_Error SewSideElements (in long_array IDsOfSide1Elements,
776                                in long_array IDsOfSide2Elements,
777                                in long       NodeID1OfSide1ToMerge,
778                                in long       NodeID1OfSide2ToMerge,
779                                in long       NodeID2OfSide1ToMerge,
780                                in long       NodeID2OfSide2ToMerge);
781
782   };
783 };
784
785 #endif