Salome HOME
Merge from V6_main 11/02/2013
[modules/smesh.git] / idl / SMESH_Mesh.idl
1 // Copyright (C) 2007-2012  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.
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 //  File   : SMESH_Mesh.idl
24 //  Author : Paul RASCLE, EDF
25 //
26 #ifndef _SMESH_MESH_IDL_
27 #define _SMESH_MESH_IDL_
28
29 #include "SALOME_Exception.idl"
30 #include "SALOME_GenericObj.idl"
31 #include "GEOM_Gen.idl"
32 #include "MED.idl"
33
34 module SMESH
35 {
36   interface SMESH_Hypothesis;
37   typedef sequence<SMESH_Hypothesis> ListOfHypothesis;
38   interface SMESH_GroupBase;
39   typedef sequence<SMESH_GroupBase> ListOfGroups;
40   interface SMESH_IDSource;
41   typedef sequence<SMESH_IDSource> ListOfIDSources;
42
43   typedef sequence<double    > double_array ;
44   typedef sequence<long      > long_array ;
45   typedef sequence<string    > string_array ;
46   typedef sequence<long_array> array_of_long_array ;
47
48   enum log_command
49     {
50       ADD_NODE,
51       ADD_EDGE,
52       ADD_TRIANGLE,
53       ADD_QUADRANGLE,
54       ADD_POLYGON,
55       ADD_TETRAHEDRON,
56       ADD_PYRAMID,
57       ADD_PRISM,
58       ADD_HEXAHEDRON,
59       ADD_POLYHEDRON,
60       REMOVE_NODE,
61       REMOVE_ELEMENT,
62       MOVE_NODE,
63       CHANGE_ELEMENT_NODES,
64       CHANGE_POLYHEDRON_NODES,
65       RENUMBER,
66       CLEAR_MESH,
67       ADD_QUADEDGE,
68       ADD_QUADTRIANGLE,
69       ADD_QUADQUADRANGLE,
70       ADD_QUADTETRAHEDRON,
71       ADD_QUADPYRAMID,
72       ADD_QUADPENTAHEDRON,
73       ADD_QUADHEXAHEDRON,
74       ADD_ELEM0D,
75       ADD_BIQUAD_QUADRANGLE,
76       ADD_TRIQUAD_HEXA,
77       ADD_HEXAGONAL_PRISM,
78       ADD_BALL
79     };
80
81   struct log_block
82   {
83     long commandType;
84     long number;
85     double_array coords;
86     long_array indexes;
87   };
88
89   struct PointStruct { double x;
90                        double y;
91                        double z; } ;
92
93   typedef sequence<PointStruct> nodes_array;
94
95   struct DirStruct   { PointStruct PS ; } ;          // analog to Occ Direction
96
97   struct AxisStruct  { double x;
98                        double y;
99                        double z;
100                        double vx;
101                        double vy;
102                        double vz; } ;
103
104   /*!
105    * Node location on a shape
106    */
107   struct NodePosition {
108     long             shapeID;
109     GEOM::shape_type shapeType;
110     double_array     params; // [U] on EDGE, [U,V] on FACE, [] on the rest shapes
111   };
112
113   /*!
114    * Element location on a shape
115    */
116   struct ElementPosition {
117     long             shapeID;
118     GEOM::shape_type shapeType;
119   };
120
121   /*!
122    * Enumeration for element type, like in SMDS
123    */
124   enum ElementType
125   {
126     ALL,
127     NODE,
128     EDGE,
129     FACE,
130     VOLUME,
131     ELEM0D,
132     BALL
133   };
134   typedef sequence<ElementType> array_of_ElementType ;
135
136   /*!
137    * Enumeration for element geometry type, like in SMDS
138    */
139   enum GeometryType
140   {
141     Geom_POINT,
142     Geom_EDGE,
143     Geom_TRIANGLE,
144     Geom_QUADRANGLE, // when a new GeometryType is added, please
145     Geom_POLYGON,    // update a corresponding list in SMESH_2smeshpy.cxx, ln 665
146     Geom_TETRA,
147     Geom_PYRAMID,
148     Geom_HEXA,
149     Geom_PENTA,
150     Geom_HEXAGONAL_PRISM,
151     Geom_POLYHEDRA,
152     Geom_BALL
153   };
154   
155   /*!
156    * ElementOrder points out entities of what order are requested
157    */
158   enum ElementOrder {
159     ORDER_ANY,          /*! entities of any order */
160     ORDER_LINEAR,       /*! entities of 1st order */
161     ORDER_QUADRATIC     /*! entities of 2nd order */
162   };
163
164
165   /*!
166    * Enumeration of entity type used in mesh info array,
167    * it should be synchronised with enum SMDSAbs_EntityType
168    */
169   enum EntityType
170   {
171     Entity_Node,
172     Entity_0D,
173     Entity_Edge,
174     Entity_Quad_Edge,
175     Entity_Triangle,
176     Entity_Quad_Triangle,
177     Entity_Quadrangle,
178     Entity_Quad_Quadrangle,
179     Entity_BiQuad_Quadrangle,
180     Entity_Polygon,
181     Entity_Quad_Polygon,
182     Entity_Tetra,
183     Entity_Quad_Tetra,
184     Entity_Pyramid,
185     Entity_Quad_Pyramid,
186     Entity_Hexa,
187     Entity_Quad_Hexa,
188     Entity_TriQuad_Hexa,
189     Entity_Penta,
190     Entity_Quad_Penta,
191     Entity_Hexagonal_Prism,
192     Entity_Polyhedra,
193     Entity_Quad_Polyhedra,
194     Entity_Ball,
195     Entity_Last
196   };
197
198
199   /*!
200    * Enumeration for hypothesis status (used by AddHypothesis() and RemoveHypothesis() methods)
201    */
202   enum Hypothesis_Status // in the order of severity
203   {
204     HYP_OK,
205     HYP_MISSING,      // algo misses a hypothesis
206     HYP_CONCURENT,    // several applicable hypotheses
207     HYP_BAD_PARAMETER,// hypothesis has a bad parameter value
208     HYP_HIDDEN_ALGO,  // an algo is hidden by an upper dim algo generating all-dim elements
209     HYP_HIDING_ALGO,  // an algo hides lower dim algos by generating all-dim elements
210     HYP_UNKNOWN_FATAL,//  --- all statuses below should be considered as fatal
211                       //      for Add/RemoveHypothesis operations
212     HYP_INCOMPATIBLE, // hypothesis does not fit algo
213     HYP_NOTCONFORM,   // not conform mesh is produced appling a hypothesis
214     HYP_ALREADY_EXIST,// such hypothesis already exist
215     HYP_BAD_DIM,      // bad dimension
216     HYP_BAD_SUBSHAPE, // shape is neither the main one, nor its sub-shape, nor a group
217     HYP_BAD_GEOMETRY, // geometry mismatches algorithm's expectation
218     HYP_NEED_SHAPE    // algorithm can work on shape only
219   };
220
221   /*!
222    * Enumeration for DriverMED read status (used by ImportMEDFile() method)
223    */
224   enum DriverMED_ReadStatus // in the order of severity
225   {
226     DRS_OK,
227     DRS_EMPTY,          // a MED file contains no mesh with the given name
228     DRS_WARN_RENUMBER,  // a MED file has overlapped ranges of element numbers,
229                         // so the numbers from the file are ignored
230     DRS_WARN_SKIP_ELEM, // some elements were skipped due to incorrect file data
231     DRS_WARN_DESCENDING, // some elements were skipped due to descending connectivity
232     DRS_FAIL            // general failure (exception etc.)
233   };
234
235   /*!
236    * Enumeration for DriverMED (used by Perform() method)
237    */
238   enum MED_VERSION // in the order of severity
239   {
240     MED_V2_1,
241     MED_V2_2
242   };
243
244   typedef sequence<log_block> log_array;
245
246
247   /*!
248    * Auxilary flags for advanced extrusion.
249    * BOUNDARY: create or not boundary for result of extrusion
250    * SEW:      try to use existing nodes or create new nodes in any case
251    */
252   const long EXTRUSION_FLAG_BOUNDARY = 1;
253   const long EXTRUSION_FLAG_SEW = 2;
254   
255   /*!
256    * Structure used in mesh edit preview data (MeshPreviewStruct)
257    */
258   struct ElementSubType { ElementType SMDS_ElementType;
259                           boolean     isPoly;
260                           long        nbNodesInElement; };
261
262   typedef sequence<ElementSubType> types_array;
263
264   /*!
265    * Structure containing mesh edit preview data
266    */
267   struct MeshPreviewStruct { nodes_array nodesXYZ;
268                              long_array  elementConnectivities;
269                              types_array elementTypes; };
270
271   interface SMESH_Mesh;
272
273   interface SMESH_IDSource
274   {
275     /*!
276      * Returns a sequence of all element IDs
277      */
278     long_array GetIDs();
279
280     /*!
281      * Returns statistic of mesh elements
282      * @return array of number enityties by index of EntityType
283      */
284     long_array GetMeshInfo();
285
286     /*!
287      * Returns types of elements it contains.
288      * It's empty if the SMESH_IDSource contains no IDs
289      */
290     array_of_ElementType GetTypes();
291
292     /*!
293      * Returns the mesh
294      */
295     SMESH_Mesh GetMesh();
296
297     /*!
298      * Returns false if GetMeshInfo() returns incorrect information that may
299      * happen if mesh data is not yet fully loaded from the file of study.
300      */
301     boolean IsMeshInfoCorrect();
302   };
303
304   interface SMESH_Group;
305   interface SMESH_GroupOnGeom;
306   interface Filter;
307   interface SMESH_GroupOnFilter;
308   interface SMESH_subMesh;
309   interface SMESH_MeshEditor;
310
311   typedef sequence<SMESH_subMesh>     submesh_array;
312   typedef sequence<submesh_array>     submesh_array_array;
313
314   interface SMESH_Mesh : SALOME::GenericObj, SMESH_IDSource
315   {
316     /*!
317      * Return true if there is a geometry to be meshed
318      */
319     boolean HasShapeToMesh()
320       raises (SALOME::SALOME_Exception);
321
322     /*!
323      * Get geom shape to mesh. A result sould not be nil. Use HasShapeToMesh()
324      * to know if a returned shape 
325      */
326     GEOM::GEOM_Object GetShapeToMesh()
327       raises (SALOME::SALOME_Exception);
328
329     /*!
330      * Return false if the mesh is not yet fully loaded from the study file
331      */
332     boolean IsLoaded()
333       raises (SALOME::SALOME_Exception);
334
335     /*!
336      * Load full mesh data from the study file
337      */
338     void Load()
339       raises (SALOME::SALOME_Exception);
340
341     /*!
342      * Remove all nodes and elements
343      */
344     void Clear()
345       raises (SALOME::SALOME_Exception);
346
347     /*!
348      *  Get the list of sub-meshes existing in the mesh
349      */
350     submesh_array GetSubMeshes()
351       raises (SALOME::SALOME_Exception);
352
353     /*!
354      * Remove all nodes and elements of submesh
355      */
356     void ClearSubMesh(in long ShapeID)
357       raises (SALOME::SALOME_Exception);
358
359     /*!
360      * Get the subMesh object associated to a Sub-shape. The subMesh object
361      * gives access to nodes and elements IDs.
362      * SubMesh will be used instead of Sub-shape in a next idl version to
363      * adress a specific subMesh...
364      */
365     SMESH_subMesh GetSubMesh(in GEOM::GEOM_Object aSubObject, in string name)
366       raises (SALOME::SALOME_Exception);
367
368     /*!
369      * Remove a submesh
370      */
371     void RemoveSubMesh(in SMESH_subMesh aSubMesh)
372       raises (SALOME::SALOME_Exception);
373
374
375     /*!
376      * Create a group
377      */
378     SMESH_Group CreateGroup( in ElementType elem_type,
379                              in string      name )
380       raises (SALOME::SALOME_Exception);
381
382     /*!
383      * Create a group from geometry
384      */
385     SMESH_GroupOnGeom CreateGroupFromGEOM( in ElementType       elemType,
386                                            in string            name,
387                                            in GEOM::GEOM_Object geomObject )
388       raises (SALOME::SALOME_Exception);
389
390     /*!
391      * Create a group from filter
392      */
393     SMESH_GroupOnFilter CreateGroupFromFilter( in ElementType   elemType,
394                                                in string        name,
395                                                in SMESH::Filter filter )
396       raises (SALOME::SALOME_Exception);
397
398     /*!
399      * Remove a group
400      */
401     void RemoveGroup(in SMESH_GroupBase aGroup)
402       raises (SALOME::SALOME_Exception);
403
404     /*!
405      *  Remove group with its contents
406      */
407     void RemoveGroupWithContents( in SMESH_GroupBase aGroup )
408       raises (SALOME::SALOME_Exception);
409
410     /*!
411      *  Get the list of groups existing in the mesh
412      */
413     ListOfGroups GetGroups()
414       raises (SALOME::SALOME_Exception);
415
416     /*!
417      *  Get number of groups existing in the mesh
418      */
419     long NbGroups()
420       raises (SALOME::SALOME_Exception);
421
422     /*!
423      * Union of two groups
424      *    New group is created. All mesh elements that are
425      *    present in initial groups are added to the new one
426      */
427     SMESH_Group UnionGroups (in SMESH_GroupBase aGroup1,
428                              in SMESH_GroupBase aGroup2,
429                              in string          name )
430       raises (SALOME::SALOME_Exception);
431       
432     /*!
433      * Union of list of groups
434      * New group is created. All mesh elements that are
435      * present in initial groups are added to the new one
436      */
437     SMESH_Group UnionListOfGroups (in ListOfGroups aListOfGroups,
438                                    in string       name )
439       raises (SALOME::SALOME_Exception);
440
441     /*!
442      *  Intersection of two groups
443      *  New group is created. All mesh elements that are
444      *  present in both initial groups are added to the new one.
445      */
446     SMESH_Group IntersectGroups (in SMESH_GroupBase aGroup1,
447                                  in SMESH_GroupBase aGroup2,
448                                  in string          name )
449       raises (SALOME::SALOME_Exception);
450       
451     /*!
452      *  Intersection of list of groups
453      *  New group is created. All mesh elements that are
454      *  present in all initial groups simultaneously are added to the new one.
455      */
456     SMESH_Group IntersectListOfGroups (in ListOfGroups aListOfGroups,
457                                        in string       name)
458       raises (SALOME::SALOME_Exception);
459
460     /*!
461      *  Cut of two groups
462      *  New group is created. All mesh elements that are present in
463      *  main group but do not present in tool group are added to the new one
464      */
465     SMESH_Group CutGroups (in SMESH_GroupBase aMainGroup,
466                            in SMESH_GroupBase aToolGroup,
467                            in string          name )
468       raises (SALOME::SALOME_Exception);
469       
470     /*!
471      *  Cut of lists of groups
472      *  New group is created. All mesh elements that are present in
473      *  main groups but do not present in tool groups are added to the new one
474      */
475     SMESH_Group CutListOfGroups (in ListOfGroups aMainGroups,
476                                  in ListOfGroups aToolGroups,
477                                  in string       name)
478       raises (SALOME::SALOME_Exception);
479       
480     /*!
481      *  Create groups of entities from existing groups of superior dimensions 
482      *  New group is created. System 
483      *  1) extracts all nodes from each group,
484      *  2) combines all elements of specified dimension laying on these nodes.
485      */
486     SMESH_Group CreateDimGroup( in ListOfGroups aListOfGroups,
487                                 in ElementType  anElemType,
488                                 in string       name )
489       raises (SALOME::SALOME_Exception);
490
491     /*!
492      * Convert group on geometry or on filter into standalone group
493      */
494     SMESH_Group ConvertToStandalone( in SMESH_GroupBase theGroupOn )
495       raises (SALOME::SALOME_Exception);
496
497     /*!
498      * Add hypothesis to the mesh, under a particular Sub-shape
499      * (or the main shape itself)
500      * The Add method is only used to prepare the build of the mesh and store
501      * the algorithms and associated parameters.
502      * Actual job of mesh the shape is done by MESH_Gen.
503      * @params
504      * - aSubShape : sub-shape obtained by a shape explode in GEOM
505      *   (or main shape)
506      * - anHyp : hypothesis object
507      * @return
508      * - OK if the hypothesis is compatible with the sub-shape
509      *   (and all previous hypothesis on the sub-shape)
510      * - NOK if the hypothesis is not compatible with the sub-shape
511      *   (or one previous hypothesis on the sub-shape)
512      * raises exception if hypothesis has not been created
513      */
514     Hypothesis_Status AddHypothesis(in GEOM::GEOM_Object aSubObject,
515                                     in SMESH_Hypothesis anHyp)
516       raises (SALOME::SALOME_Exception);
517
518     /*!
519      * Remove an hypothesis previouly added with AddHypothesis.
520      */
521     Hypothesis_Status RemoveHypothesis(in GEOM::GEOM_Object aSubObject,
522                                        in SMESH_Hypothesis anHyp)
523       raises (SALOME::SALOME_Exception);
524
525     /*!
526      * Get the list of hypothesis added on a sub-shape
527      */
528     ListOfHypothesis GetHypothesisList(in GEOM::GEOM_Object aSubObject)
529       raises (SALOME::SALOME_Exception);
530
531     /*!
532      * Get the log of nodes and elements added or removed since previous
533      * clear of the log.
534      * @params
535      * - clearAfterGet : log is emptied after Get (safe if concurrents access)
536      */
537     log_array GetLog(in boolean clearAfterGet)
538       raises (SALOME::SALOME_Exception);
539
540     /*!
541      * Clear the log of nodes and elements added or removed since previous
542      * clear. Must be used immediately after GetLog if clearAfterGet is false.
543      */
544     void ClearLog()
545       raises (SALOME::SALOME_Exception);
546
547     /*!
548      * Toggle auto color mode on the object.
549      * @params
550      * - theAutoColor : flag which toggles auto color mode.
551      */
552     void SetAutoColor(in boolean theAutoColor)
553       raises (SALOME::SALOME_Exception);
554
555     /*!
556      * Get flag of object's auto color mode.
557      */
558     boolean GetAutoColor()
559       raises (SALOME::SALOME_Exception);
560
561     /*!
562      * Get the internal Id
563      */
564     long GetId();
565
566     /*!
567      * Get the study Id
568      */
569     long GetStudyId();
570
571     /*!
572      * Obtain instance of SMESH_MeshEditor
573      */
574     SMESH_MeshEditor GetMeshEditor()
575       raises (SALOME::SALOME_Exception);
576
577     /*!
578      * Return SMESH_MeshEditor that would not modify the mesh but
579      * fill MeshPreviewStruct
580      */
581     SMESH_MeshEditor GetMeshEditPreviewer()
582       raises (SALOME::SALOME_Exception);
583
584     /*!
585      * Return true if the mesh has been edited since a total re-compute
586      * and those modifications may prevent successful partial re-compute
587      */
588     boolean HasModificationsToDiscard()
589       raises (SALOME::SALOME_Exception);
590
591     /*! Check group names for duplications.
592      *  Consider maximum group name length stored in MED file.
593      */
594     boolean HasDuplicatedGroupNamesMED();
595
596     /*!
597      * Export Mesh to different MED Formats
598      * @params
599      * - file : name of the MED file
600      * - auto_groups : boolean parameter for creating/not creating
601      *   the groups Group_On_All_Nodes, Group_On_All_Faces, ... ;
602      *   the typical use is auto_groups=false.
603      * - version : define the version of format of MED file, that will be created
604      * - overwrite : boolean parameter for overwriting/not overwriting the file, if it exists
605      */
606     void ExportToMEDX( in string      file, 
607                        in boolean     auto_groups, 
608                        in MED_VERSION version, 
609                        in boolean     overwrite ) raises (SALOME::SALOME_Exception);
610
611     /*!
612      * Export a part of Mesh into a MED file
613      * @params
614      * - meshPart : a part of mesh to store
615      * - file : name of the MED file
616      * - version : define the version of format of MED file, that will be created
617      * - overwrite : boolean parameter for overwriting/not overwriting the file, if it exists
618      */
619     void ExportPartToMED( in SMESH_IDSource meshPart, 
620                           in string         file, 
621                           in boolean        auto_groups,
622                           in MED_VERSION    version,
623                           in boolean        overwrite ) raises (SALOME::SALOME_Exception);
624
625     /*!
626      * Export Mesh to different MED Formats
627      * Works, just the same as ExportToMEDX, with overwrite parameter equal to true.
628      * The method is kept in order to support old functionality
629      */
630     void ExportToMED( in string file, in boolean auto_groups, in MED_VERSION theVersion )
631       raises (SALOME::SALOME_Exception);
632
633     /*!
634      * Export Mesh to MED_V2_1 MED format
635      * Works, just the same as ExportToMEDX with MED_VERSION parameter equal to MED_V2_1
636      * and overwrite parameter equal to true
637      * The method is kept in order to support old functionality
638      */
639     void ExportMED( in string file, in boolean auto_groups )
640       raises (SALOME::SALOME_Exception);
641
642     /*!
643      * Export Mesh to SAUV formatted file
644      * Write a temporary med file and use med2sauv
645      */
646     void ExportSAUV( in string file, in boolean auto_groups )
647       raises (SALOME::SALOME_Exception);
648
649     /*!
650      * Return string representation of a MED file version comprising nbDigits
651      */
652     string GetVersionString(in MED_VERSION version, in short nbDigits);
653
654     /*!
655      * Export Mesh to different Formats
656      * (UNV supported version is I-DEAS 10)
657      */
658     void ExportDAT( in string file ) raises (SALOME::SALOME_Exception);
659     void ExportUNV( in string file ) raises (SALOME::SALOME_Exception);
660     void ExportSTL( in string  file,
661                     in boolean isascii ) raises (SALOME::SALOME_Exception);
662     void ExportCGNS( in SMESH_IDSource meshPart, 
663                      in string         file,
664                      in boolean        overwrite ) raises (SALOME::SALOME_Exception);
665     void ExportGMF( in SMESH_IDSource  meshPart, 
666                     in string          file,
667                     in boolean         withRequiredGroups) raises (SALOME::SALOME_Exception);
668     void ExportPartToDAT( in SMESH_IDSource meshPart, 
669                           in string         file ) raises (SALOME::SALOME_Exception);
670     void ExportPartToUNV( in SMESH_IDSource meshPart, 
671                           in string         file ) raises (SALOME::SALOME_Exception);
672     void ExportPartToSTL( in SMESH_IDSource meshPart,
673                           in string         file,
674                           in boolean        isascii ) raises (SALOME::SALOME_Exception);
675
676     /*!
677      * Get MED Mesh
678      */
679     SALOME_MED::MESH GetMEDMesh()
680       raises (SALOME::SALOME_Exception);
681
682     /*!
683      * Get informations about mesh contents
684      */
685     long NbNodes()
686       raises (SALOME::SALOME_Exception);
687
688     long NbElements()
689       raises (SALOME::SALOME_Exception);
690
691     long Nb0DElements()
692       raises (SALOME::SALOME_Exception);
693
694     long NbBalls()
695       raises (SALOME::SALOME_Exception);
696
697     long NbEdges()
698       raises (SALOME::SALOME_Exception);
699
700     long NbEdgesOfOrder(in ElementOrder order)
701       raises (SALOME::SALOME_Exception);
702
703     long NbFaces()
704       raises (SALOME::SALOME_Exception);
705
706     long NbFacesOfOrder(in ElementOrder order)
707       raises (SALOME::SALOME_Exception);
708
709     long NbTriangles()
710       raises (SALOME::SALOME_Exception);
711
712     long NbTrianglesOfOrder(in ElementOrder order)
713       raises (SALOME::SALOME_Exception);
714
715     long NbQuadrangles()
716       raises (SALOME::SALOME_Exception);
717
718     long NbQuadranglesOfOrder(in ElementOrder order)
719       raises (SALOME::SALOME_Exception);
720
721     long NbBiQuadQuadrangles()
722       raises (SALOME::SALOME_Exception);
723
724     long NbPolygons()
725       raises (SALOME::SALOME_Exception);
726
727     long NbVolumes()
728       raises (SALOME::SALOME_Exception);
729
730     long NbVolumesOfOrder(in ElementOrder order)
731       raises (SALOME::SALOME_Exception);
732
733     long NbTetras()
734       raises (SALOME::SALOME_Exception);
735
736     long NbTetrasOfOrder(in ElementOrder order)
737       raises (SALOME::SALOME_Exception);
738
739     long NbHexas()
740       raises (SALOME::SALOME_Exception);
741
742     long NbHexasOfOrder(in ElementOrder order)
743       raises (SALOME::SALOME_Exception);
744
745     long NbTriQuadraticHexas()
746       raises (SALOME::SALOME_Exception);
747
748     long NbPyramids()
749       raises (SALOME::SALOME_Exception);
750
751     long NbPyramidsOfOrder(in ElementOrder order)
752       raises (SALOME::SALOME_Exception);
753
754     long NbPrisms()
755       raises (SALOME::SALOME_Exception);
756
757     long NbPrismsOfOrder(in ElementOrder order)
758       raises (SALOME::SALOME_Exception);
759
760     long NbHexagonalPrisms()
761       raises (SALOME::SALOME_Exception);
762
763     long NbPolyhedrons()
764       raises (SALOME::SALOME_Exception);
765
766     long NbSubMesh()
767       raises (SALOME::SALOME_Exception);
768
769     long_array GetElementsId()
770       raises (SALOME::SALOME_Exception);
771
772     long_array GetElementsByType( in ElementType theType )
773       raises (SALOME::SALOME_Exception);
774
775     long_array GetNodesId()
776       raises (SALOME::SALOME_Exception);
777     
778     /*!
779      * Returns type of mesh element
780      */    
781     ElementType GetElementType( in long id, in boolean iselem )
782       raises (SALOME::SALOME_Exception);
783
784     EntityType GetElementGeomType( in long id )
785       raises (SALOME::SALOME_Exception);
786
787     long_array GetSubMeshElementsId(in long ShapeID)
788       raises (SALOME::SALOME_Exception);
789
790     long_array GetSubMeshNodesId(in long ShapeID, in boolean all )
791       raises (SALOME::SALOME_Exception);
792     
793     ElementType GetSubMeshElementType(in long ShapeID)
794       raises (SALOME::SALOME_Exception);
795
796
797     /*!
798      * Methods to set meshing order of submeshes
799      */
800
801     /*!
802      * \brief Return submesh objects list in meshing order
803      */
804     submesh_array_array GetMeshOrder();
805
806     /*!
807      * \brief Set submesh object order
808      */
809     boolean SetMeshOrder(in submesh_array_array theSubMeshArray);
810
811
812     /*!
813      * Get mesh description
814      */
815     string Dump();
816
817     /*!
818      * Get mesh pointer
819      */
820     long long GetMeshPtr();
821
822     /*!
823      * Get XYZ coordinates of node as list of double
824      * If there is not node for given ID - returns empty list
825      */
826     double_array GetNodeXYZ(in long id);
827
828     /*!
829      * For given node returns list of IDs of inverse elements
830      * If there is not node for given ID - returns empty list
831      */
832     long_array GetNodeInverseElements(in long id);
833
834     /*!
835      * \brief Return position of a node on shape
836      */
837     NodePosition GetNodePosition(in long NodeID);
838
839     /*!
840      * \brief Return position of an element on shape
841      */
842     ElementPosition GetElementPosition(in long ElemID);
843
844     /*!
845      * If given element is node returns IDs of shape from position
846      * If there is not node for given ID - returns -1
847      */
848     long GetShapeID(in long id);
849
850     /*!
851      * For given element returns ID of result shape after 
852      * ::FindShape() from SMESH_MeshEditor
853      * If there is not element for given ID - returns -1
854      */
855     long GetShapeIDForElem(in long id);
856
857     /*!
858      * Returns number of nodes for given element
859      * If there is not element for given ID - returns -1
860      */
861     long GetElemNbNodes(in long id);
862
863     /*!
864      * Returns IDs of nodes of given element
865      */
866     long_array GetElemNodes(in long id);
867
868     /*!
869      * Returns ID of node by given index for given element
870      * If there is not element for given ID - returns -1
871      * If there is not node for given index - returns -2
872      */
873     long GetElemNode(in long id, in long index);
874
875     /*!
876      * Returns true if given node is medium node
877      * in given quadratic element
878      */
879     boolean IsMediumNode(in long ide, in long idn);
880
881     /*!
882      * Returns true if given node is medium node
883      * in one of quadratic elements
884      */
885     boolean IsMediumNodeOfAnyElem(in long idn, in ElementType elem_type);
886
887     /*!
888      * Returns number of edges for given element
889      */
890     long ElemNbEdges(in long id);
891
892     /*!
893      * Returns number of faces for given element
894      */
895     long ElemNbFaces(in long id);
896
897     /*!
898      * Returns nodes of given face (counted from zero) for given volumic element.
899      */
900     long_array GetElemFaceNodes(in long elemId, in short faceIndex);
901
902     /*!
903      * Returns an element based on all given nodes.
904      */
905     long FindElementByNodes(in long_array nodes);
906
907     /*!
908      * Returns true if given element is polygon
909      */
910     boolean IsPoly(in long id);
911
912     /*!
913      * Returns true if given element is quadratic
914      */
915     boolean IsQuadratic(in long id);
916
917     /*!
918      * Returns diameter of a ball discrete element or zero in case of an invalid \a id
919      */
920     double GetBallDiameter(in long id);
921
922     /*!
923      * Returns XYZ coordinates of bary center for given element
924      * as list of double
925      * If there is not element for given ID - returns empty list
926      */
927     double_array BaryCenter(in long id);
928
929     /*! Gets information about imported MED file */
930     SALOME_MED::MedFileInfo GetMEDFileInfo();
931
932     /*!
933      *  Sets list of notebook variables used for Mesh operations separated by ":" symbol
934      *  \param theParameters is a string containing the notebook variables
935      */
936     void SetParameters (in string theParameters);
937
938     /*!
939      *  Returns list of notebook variables used for Mesh operations separated by ":" symbol
940      */
941     string GetParameters();
942
943     /*!
944      *  Returns list of notebook variables used for last Mesh operation
945      */
946     string_array GetLastParameters();
947   };
948
949   interface SMESH_subMesh : SALOME::GenericObj, SMESH_IDSource
950   {
951     /*!
952      *
953      */
954     long GetNumberOfElements()
955       raises (SALOME::SALOME_Exception);
956
957     /*!
958      *
959      */
960     long GetNumberOfNodes( in boolean all )
961       raises (SALOME::SALOME_Exception);
962
963     /*!
964      *
965      */
966     long_array GetElementsId()
967       raises (SALOME::SALOME_Exception);
968
969     /*!
970      *
971      */
972     long_array GetElementsByType( in ElementType theType )
973       raises (SALOME::SALOME_Exception);
974     
975     /*!
976      * Return type of submesh element
977      */
978     ElementType GetElementType( in long id, in boolean iselem )
979       raises (SALOME::SALOME_Exception);
980
981     /*!
982      *
983      */
984     long_array GetNodesId()
985       raises (SALOME::SALOME_Exception);
986
987     /*!
988      * Get geom shape the submesh is dedicated to
989      */
990     GEOM::GEOM_Object GetSubShape()
991       raises (SALOME::SALOME_Exception);
992
993     /*!
994      * Get SMESH_Mesh which stores nodes coordinates & elements definition
995      */
996     SMESH_Mesh GetFather()
997       raises (SALOME::SALOME_Exception);
998
999     /*!
1000      * Get the internal Id
1001      */
1002     long GetId();
1003
1004     /*!
1005      * Get MED subMesh
1006      */
1007     SALOME_MED::FAMILY GetFamily()
1008       raises (SALOME::SALOME_Exception);
1009   };
1010
1011 };
1012
1013 #endif