Salome HOME
Correct bugs, connected with 0D Elements implementation (IMP 20089, BUG 21300)
[modules/smesh.git] / idl / SMESH_Mesh.idl
1 //  Copyright (C) 2007-2008  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 //  File   : SMESH_Mesh.idl
23 //  Author : Paul RASCLE, EDF
24 //
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
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_ELEM0D,
50       ADD_EDGE,
51       ADD_TRIANGLE,
52       ADD_QUADRANGLE,
53       ADD_POLYGON,
54       ADD_TETRAHEDRON,
55       ADD_PYRAMID,
56       ADD_PRISM,
57       ADD_HEXAHEDRON,
58       ADD_POLYHEDRON,
59       REMOVE_NODE,
60       REMOVE_ELEMENT,
61       MOVE_NODE,
62       CHANGE_ELEMENT_NODES,
63       CHANGE_POLYHEDRON_NODES,
64       RENUMBER,
65       CLEAR_MESH,
66       ADD_QUADEDGE,
67       ADD_QUADTRIANGLE,
68       ADD_QUADQUADRANGLE,
69       ADD_QUADTETRAHEDRON,
70       ADD_QUADPYRAMID,
71       ADD_QUADPENTAHEDRON,
72       ADD_QUADHEXAHEDRON
73     };
74
75   struct log_block
76   {
77     long commandType;
78     long number;
79     double_array coords;
80     long_array indexes;
81   };
82
83   struct PointStruct { double x;
84                        double y;
85                        double z; } ;
86
87   typedef sequence<PointStruct> nodes_array;
88
89   struct DirStruct   { PointStruct PS ; } ;          // analog to Occ Direction
90
91   struct AxisStruct  { double x;
92                        double y;
93                        double z;
94                        double vx;
95                        double vy;
96                        double vz; } ;
97
98   /*!
99    * Node location on a shape
100    */
101   struct NodePosition {
102     long             shapeID;
103     GEOM::shape_type shapeType;
104     double_array     params; // [U] on EDGE, [U,V] on FACE, [] on the rest shapes
105   };
106
107   /*!
108    * Enumeration for element type, like in SMDS
109    */
110   enum ElementType
111   {
112     ALL,
113     NODE,
114     EDGE,
115     FACE,
116     VOLUME,
117     ELEM0D
118   };
119
120   /*!
121    * Enumeration for element geometry type, like in SMDS
122    */
123   enum GeometryType
124   {
125     Geom_POINT,
126     Geom_EDGE,
127     Geom_TRIANGLE,
128     Geom_QUADRANGLE,
129     Geom_POLYGON,
130     Geom_TETRA,
131     Geom_PYRAMID,
132     Geom_HEXA,
133     Geom_PENTA,
134     Geom_POLYHEDRA
135   };
136   
137   /*!
138    * ElementOrder points out entities of what order are requested
139    */
140   enum ElementOrder {
141     ORDER_ANY,          /*! entities of any order */
142     ORDER_LINEAR,       /*! entities of 1st order */
143     ORDER_QUADRATIC     /*! entities of 2nd order */
144   };
145
146   /*!
147    * Enumeration for hypothesis status (used by AddHypothesis() and RemoveHypothesis() methods)
148    */
149   enum Hypothesis_Status // in the order of severity
150   {
151     HYP_OK,
152     HYP_MISSING,      // algo misses a hypothesis
153     HYP_CONCURENT,    // several applicable hypotheses
154     HYP_BAD_PARAMETER,// hypothesis has a bad parameter value
155     HYP_HIDDEN_ALGO,  // an algo is hidden by an upper dim algo generating all-dim elements
156     HYP_HIDING_ALGO,  // an algo hides lower dim algos by generating all-dim elements
157     HYP_UNKNOWN_FATAL,//  --- all statuses below should be considered as fatal
158                       //      for Add/RemoveHypothesis operations
159     HYP_INCOMPATIBLE, // hypothesis does not fit algo
160     HYP_NOTCONFORM,   // not conform mesh is produced appling a hypothesis
161     HYP_ALREADY_EXIST,// such hypothesis already exist
162     HYP_BAD_DIM,      // bad dimension
163     HYP_BAD_SUBSHAPE, // shape is neither the main one, nor its subshape, nor a group
164     HYP_BAD_GEOMETRY, // geometry mismatches algorithm's expectation
165     HYP_NEED_SHAPE    // algorithm can work on shape only
166   };
167
168   /*!
169    * Enumeration for DriverMED read status (used by ImportMEDFile() method)
170    */
171   enum DriverMED_ReadStatus // in the order of severity
172   {
173     DRS_OK,
174     DRS_EMPTY,          // a MED file contains no mesh with the given name
175     DRS_WARN_RENUMBER,  // a MED file has overlapped ranges of element numbers,
176                         // so the numbers from the file are ignored
177     DRS_WARN_SKIP_ELEM, // some elements were skipped due to incorrect file data
178     DRS_FAIL            // general failure (exception etc.)
179   };
180
181   /*!
182    * Enumeration for DriverMED (used by Perform() method)
183    */
184   enum MED_VERSION // in the order of severity
185   {
186     MED_V2_1,
187     MED_V2_2
188   };
189
190   typedef sequence<log_block> log_array;
191
192
193   /*!
194    * Auxilary flags for advanced extrusion.
195    * BOUNDARY: create or not boundary for result of extrusion
196    * SEW:      try to use existing nodes or create new nodes in any case
197    */
198   const long EXTRUSION_FLAG_BOUNDARY = 1;
199   const long EXTRUSION_FLAG_SEW = 2;
200   
201   /*!
202    * Structure used in mesh edit preview data (MeshPreviewStruct)
203    */
204   struct ElementSubType { ElementType SMDS_ElementType;
205                           boolean     isPoly;
206                           long        nbNodesInElement; };
207
208   typedef sequence<ElementSubType> types_array;
209
210   /*!
211    * Structure containing mesh edit preview data
212    */
213   struct MeshPreviewStruct { nodes_array nodesXYZ;
214                              long_array  elementConnectivities;
215                              types_array elementTypes; };
216
217   interface SMESH_IDSource
218   {
219     /*!
220      * Returns a sequence of all element IDs
221      */
222     long_array GetIDs();
223   };
224
225   interface SMESH_Group;
226   interface SMESH_GroupOnGeom;
227   interface SMESH_subMesh;
228   interface SMESH_MeshEditor;
229   interface SMESH_Mesh : SALOME::GenericObj, SMESH_IDSource
230   {
231     /*!
232      * Return true if there is a geometry to be meshed
233      */
234     boolean HasShapeToMesh()
235       raises (SALOME::SALOME_Exception);
236
237     /*!
238      * Get geom shape to mesh. A result sould not be nil. Use HasShapeToMesh()
239      * to know if a returned shape 
240      */
241     GEOM::GEOM_Object GetShapeToMesh()
242       raises (SALOME::SALOME_Exception);
243
244     /*!
245      * Remove all nodes and elements
246      */
247     void Clear()
248       raises (SALOME::SALOME_Exception);
249
250     /*!
251      * Remove all nodes and elements of submesh
252      */
253     void ClearSubMesh(in long ShapeID)
254       raises (SALOME::SALOME_Exception);
255
256     /*!
257      * Get the subMesh object associated to a subShape. The subMesh object
258      * gives access to nodes and elements IDs.
259      * SubMesh will be used instead of SubShape in a next idl version to
260      * adress a specific subMesh...
261      */
262     SMESH_subMesh GetSubMesh(in GEOM::GEOM_Object aSubObject, in string name)
263       raises (SALOME::SALOME_Exception);
264
265     /*!
266      * Remove a submesh
267      */
268     void RemoveSubMesh(in SMESH_subMesh aSubMesh)
269       raises (SALOME::SALOME_Exception);
270
271
272     /*!
273      * Create a group
274      */
275     SMESH_Group CreateGroup( in ElementType elem_type,
276                              in string name )
277       raises (SALOME::SALOME_Exception);
278
279     /*!
280      * Create a group from geometry group
281      */
282     SMESH_GroupOnGeom CreateGroupFromGEOM( in ElementType elem_type,
283                                           in string name,
284                                           in GEOM::GEOM_Object theGeomObject )
285       raises (SALOME::SALOME_Exception);
286
287     /*!
288      * Remove a group
289      */
290     void RemoveGroup(in SMESH_GroupBase aGroup)
291       raises (SALOME::SALOME_Exception);
292
293     /*!
294      *  Remove group with its contents
295      */
296     void RemoveGroupWithContents( in SMESH_GroupBase aGroup )
297       raises (SALOME::SALOME_Exception);
298
299     /*!
300      *  Get the list of groups existing in the mesh
301      */
302     ListOfGroups GetGroups()
303       raises (SALOME::SALOME_Exception);
304
305     /*!
306      *  Get number of groups existing in the mesh
307      */
308     long NbGroups()
309       raises (SALOME::SALOME_Exception);
310
311     /*!
312      * Union of two groups
313      *    New group is created. All mesh elements that are
314      *    present in initial groups are added to the new one
315      */
316     SMESH_Group UnionGroups (in SMESH_GroupBase aGroup1,
317                              in SMESH_GroupBase aGroup2,
318                              in string          name )
319       raises (SALOME::SALOME_Exception);
320       
321     /*!
322      * Union of list of groups
323      * New group is created. All mesh elements that are
324      * present in initial groups are added to the new one
325      */
326     SMESH_Group UnionListOfGroups (in ListOfGroups aListOfGroups,
327                                    in string       name )
328       raises (SALOME::SALOME_Exception);
329
330     /*!
331      *  Intersection of two groups
332      *  New group is created. All mesh elements that are
333      *  present in both initial groups are added to the new one.
334      */
335     SMESH_Group IntersectGroups (in SMESH_GroupBase aGroup1,
336                                  in SMESH_GroupBase aGroup2,
337                                  in string          name )
338       raises (SALOME::SALOME_Exception);
339       
340     /*!
341      *  Intersection of list of groups
342      *  New group is created. All mesh elements that are
343      *  present in all initial groups simultaneously are added to the new one.
344      */
345     SMESH_Group IntersectListOfGroups (in ListOfGroups aListOfGroups,
346                                        in string       name)
347       raises (SALOME::SALOME_Exception);
348
349     /*!
350      *  Cut of two groups
351      *  New group is created. All mesh elements that are present in
352      *  main group but do not present in tool group are added to the new one
353      */
354     SMESH_Group CutGroups (in SMESH_GroupBase aMainGroup,
355                            in SMESH_GroupBase aToolGroup,
356                            in string          name )
357       raises (SALOME::SALOME_Exception);
358       
359     /*!
360      *  Cut of lists of groups
361      *  New group is created. All mesh elements that are present in
362      *  main groups but do not present in tool groups are added to the new one
363      */
364     SMESH_Group CutListOfGroups (in ListOfGroups aMainGroups,
365                                  in ListOfGroups aToolGroups,
366                                  in string       name)
367       raises (SALOME::SALOME_Exception);
368       
369     /*!
370      *  Create groups of entities from existing groups of superior dimensions 
371      *  New group is created. System 
372      *  1) extracts all nodes from each group,
373      *  2) combines all elements of specified dimension laying on these nodes.
374      */
375     SMESH_Group CreateDimGroup( in ListOfGroups aListOfGroups,
376                                 in ElementType  anElemType,
377                                 in string       name )
378       raises (SALOME::SALOME_Exception);
379
380     /*!
381      * Convert group on geometry into standalone group
382      */
383     SMESH_Group ConvertToStandalone( in SMESH_GroupOnGeom theGeomGroup )
384       raises (SALOME::SALOME_Exception);
385
386     /*!
387      * Add hypothesis to the mesh, under a particular subShape
388      * (or the main shape itself)
389      * The Add method is only used to prepare the build of the mesh and store
390      * the algorithms and associated parameters.
391      * Actual job of mesh the shape is done by MESH_Gen.
392      * @params
393      * - aSubShape : subShape obtained by a shape explode in GEOM
394      *   (or main shape)
395      * - anHyp : hypothesis object
396      * @return
397      * - OK if the hypothesis is compatible with the subShape
398      *   (and all previous hypothesis on the subShape)
399      * - NOK if the hypothesis is not compatible with the subShape
400      *   (or one previous hypothesis on the subShape)
401      * raises exception if hypothesis has not been created
402      */
403     Hypothesis_Status AddHypothesis(in GEOM::GEOM_Object aSubObject,
404                                     in SMESH_Hypothesis anHyp)
405       raises (SALOME::SALOME_Exception);
406 //     boolean AddHypothesis(in SMESH_subMesh aSubMesh, in SMESH_Hypothesis anHyp)
407 //       raises (SALOME::SALOME_Exception);
408
409     /*!
410      * Remove an hypothesis previouly added with AddHypothesis.
411      */
412     Hypothesis_Status RemoveHypothesis(in GEOM::GEOM_Object aSubObject,
413                                        in SMESH_Hypothesis anHyp)
414       raises (SALOME::SALOME_Exception);
415 //     boolean RemoveHypothesis(in SMESH_subMesh aSubMesh,
416 //                           in SMESH_Hypothesis anHyp)
417 //       raises (SALOME::SALOME_Exception);
418
419     /*!
420      * Get the list of hypothesis added on a subShape
421      */
422     ListOfHypothesis GetHypothesisList(in GEOM::GEOM_Object aSubObject)
423       raises (SALOME::SALOME_Exception);
424 //     ListOfHypothesis GetHypothesisList(in SMESH_subMesh aSubMesh)
425 //       raises (SALOME::SALOME_Exception);
426
427     /*!
428      * Get the log of nodes and elements added or removed since previous
429      * clear of the log.
430      * @params
431      * - clearAfterGet : log is emptied after Get (safe if concurrents access)
432      */
433     //    string_array GetLog(in boolean clearAfterGet)
434     //      raises (SALOME::SALOME_Exception);
435     log_array GetLog(in boolean clearAfterGet)
436       raises (SALOME::SALOME_Exception);
437
438     /*!
439      * Clear the log of nodes and elements added or removed since previous
440      * clear. Must be used immediately after GetLog if clearAfterGet is false.
441      */
442     void ClearLog()
443       raises (SALOME::SALOME_Exception);
444
445     /*!
446      * Toggle auto color mode on the object.
447      * @params
448      * - theAutoColor : flag which toggles auto color mode.
449      */
450     void SetAutoColor(in boolean theAutoColor)
451       raises (SALOME::SALOME_Exception);
452
453     /*!
454      * Get flag of object's auto color mode.
455      */
456     boolean GetAutoColor()
457       raises (SALOME::SALOME_Exception);
458
459     /*!
460      * Get the internal Id
461      */
462     long GetId();
463
464     /*!
465      * Get the study Id
466      */
467     long GetStudyId();
468
469     /*!
470      * Obtain instance of SMESH_MeshEditor
471      */
472     SMESH_MeshEditor GetMeshEditor()
473       raises (SALOME::SALOME_Exception);
474
475     /*!
476      * Return SMESH_MeshEditor that would not modify the mesh but
477      * fill MeshPreviewStruct
478      */
479     SMESH_MeshEditor GetMeshEditPreviewer()
480       raises (SALOME::SALOME_Exception);
481
482     /*! Check group names for duplications.
483      *  Consider maximum group name length stored in MED file.
484      */
485     boolean HasDuplicatedGroupNamesMED();
486
487     /*!
488      * Export Mesh to different MED Formats
489      * @params
490      * - auto_groups : boolean parameter for creating/not creating
491      *   the groups Group_On_All_Nodes, Group_On_All_Faces, ... ;
492      *   the typical use is auto_groups=false.
493      * - theVersion : define the version of format of MED file, that will be created
494      */
495     void ExportToMED( in string file, in boolean auto_groups, in MED_VERSION theVersion )
496       raises (SALOME::SALOME_Exception);
497
498     /*!
499      * Export Mesh to MED_V2_1 MED format
500      * Works, just the same as ExportToMED, with MED_VERSION parameter equal to MED_V2_1.
501      * The method is kept in order to support old functionality
502      */
503     void ExportMED( in string file, in boolean auto_groups )
504       raises (SALOME::SALOME_Exception);
505
506     /*!
507      * Return string representation of a MED file version comprising nbDigits
508      */
509     string GetVersionString(in MED_VERSION version, in short nbDigits);
510
511     /*!
512      * Export Mesh to DAT, UNV and STL Formats
513      * (UNV supported version is I-DEAS 10)
514      */
515     void ExportDAT( in string file )
516       raises (SALOME::SALOME_Exception);
517     void ExportUNV( in string file )
518       raises (SALOME::SALOME_Exception);
519     void ExportSTL( in string file, in boolean isascii )
520       raises (SALOME::SALOME_Exception);
521
522     /*!
523      * Get MED Mesh
524      */
525     SALOME_MED::MESH GetMEDMesh()
526       raises (SALOME::SALOME_Exception);
527
528     /*!
529      * Get informations about mesh contents
530      */
531     long NbNodes()
532       raises (SALOME::SALOME_Exception);
533
534     long NbElements()
535       raises (SALOME::SALOME_Exception);
536
537     long Nb0DElements()
538       raises (SALOME::SALOME_Exception);
539
540     long NbEdges()
541       raises (SALOME::SALOME_Exception);
542
543     long NbEdgesOfOrder(in ElementOrder order)
544       raises (SALOME::SALOME_Exception);
545
546     long NbFaces()
547       raises (SALOME::SALOME_Exception);
548
549     long NbFacesOfOrder(in ElementOrder order)
550       raises (SALOME::SALOME_Exception);
551
552     long NbTriangles()
553       raises (SALOME::SALOME_Exception);
554
555     long NbTrianglesOfOrder(in ElementOrder order)
556       raises (SALOME::SALOME_Exception);
557
558     long NbQuadrangles()
559       raises (SALOME::SALOME_Exception);
560
561     long NbQuadranglesOfOrder(in ElementOrder order)
562       raises (SALOME::SALOME_Exception);
563
564     long NbPolygons()
565       raises (SALOME::SALOME_Exception);
566
567     long NbVolumes()
568       raises (SALOME::SALOME_Exception);
569
570     long NbVolumesOfOrder(in ElementOrder order)
571       raises (SALOME::SALOME_Exception);
572
573     long NbTetras()
574       raises (SALOME::SALOME_Exception);
575
576     long NbTetrasOfOrder(in ElementOrder order)
577       raises (SALOME::SALOME_Exception);
578
579     long NbHexas()
580       raises (SALOME::SALOME_Exception);
581
582     long NbHexasOfOrder(in ElementOrder order)
583       raises (SALOME::SALOME_Exception);
584
585     long NbPyramids()
586       raises (SALOME::SALOME_Exception);
587
588     long NbPyramidsOfOrder(in ElementOrder order)
589       raises (SALOME::SALOME_Exception);
590
591     long NbPrisms()
592       raises (SALOME::SALOME_Exception);
593
594     long NbPrismsOfOrder(in ElementOrder order)
595       raises (SALOME::SALOME_Exception);
596
597     long NbPolyhedrons()
598       raises (SALOME::SALOME_Exception);
599
600     long NbSubMesh()
601       raises (SALOME::SALOME_Exception);
602
603     long_array GetElementsId()
604       raises (SALOME::SALOME_Exception);
605
606     long_array GetElementsByType( in ElementType theType )
607       raises (SALOME::SALOME_Exception);
608
609     long_array GetNodesId()
610       raises (SALOME::SALOME_Exception);
611     
612     /*!
613      * Returns type of mesh element
614      */    
615     ElementType GetElementType( in long id, in boolean iselem )
616       raises (SALOME::SALOME_Exception);
617
618     long_array GetSubMeshElementsId(in long ShapeID)
619       raises (SALOME::SALOME_Exception);
620
621     long_array GetSubMeshNodesId(in long ShapeID, in boolean all )
622       raises (SALOME::SALOME_Exception);
623     
624     ElementType GetSubMeshElementType(in long ShapeID)
625       raises (SALOME::SALOME_Exception);
626
627     /*!
628      * Get mesh description
629      */
630     string Dump();
631
632     /*!
633      * Get mesh pointer
634      */
635     long long GetMeshPtr();
636
637     /*!
638      * Get XYZ coordinates of node as list of double
639      * If there is not node for given ID - returns empty list
640      */
641     double_array GetNodeXYZ(in long id);
642
643     /*!
644      * For given node returns list of IDs of inverse elements
645      * If there is not node for given ID - returns empty list
646      */
647     long_array GetNodeInverseElements(in long id);
648
649     /*!
650      * \brief Return position of a node on shape
651      */
652     NodePosition GetNodePosition(in long NodeID);
653
654     /*!
655      * If given element is node returns IDs of shape from position
656      * If there is not node for given ID - returns -1
657      */
658     long GetShapeID(in long id);
659
660     /*!
661      * For given element returns ID of result shape after 
662      * ::FindShape() from SMESH_MeshEditor
663      * If there is not element for given ID - returns -1
664      */
665     long GetShapeIDForElem(in long id);
666
667     /*!
668      * Returns number of nodes for given element
669      * If there is not element for given ID - returns -1
670      */
671     long GetElemNbNodes(in long id);
672
673     /*!
674      * Returns IDs of nodes of given element
675      */
676     long_array GetElemNodes(in long id);
677
678     /*!
679      * Returns ID of node by given index for given element
680      * If there is not element for given ID - returns -1
681      * If there is not node for given index - returns -2
682      */
683     long GetElemNode(in long id, in long index);
684
685     /*!
686      * Returns true if given node is medium node
687      * in given quadratic element
688      */
689     boolean IsMediumNode(in long ide, in long idn);
690
691     /*!
692      * Returns true if given node is medium node
693      * in one of quadratic elements
694      */
695     boolean IsMediumNodeOfAnyElem(in long idn, in ElementType elem_type);
696
697     /*!
698      * Returns number of edges for given element
699      */
700     long ElemNbEdges(in long id);
701
702     /*!
703      * Returns number of faces for given element
704      */
705     long ElemNbFaces(in long id);
706
707     /*!
708      * Returns true if given element is polygon
709      */
710     boolean IsPoly(in long id);
711
712     /*!
713      * Returns true if given element is quadratic
714      */
715     boolean IsQuadratic(in long id);
716
717     /*!
718      * Returns XYZ coordinates of bary center for given element
719      * as list of double
720      * If there is not element for given ID - returns empty list
721      */
722     double_array BaryCenter(in long id);
723
724     /*! Gets information about imported MED file */
725     SALOME_MED::MedFileInfo GetMEDFileInfo();
726
727     /*!
728      *  Sets list of notebook variables used for Mesh operations separated by ":" symbol
729      *  \param theParameters is a string containing the notebook variables
730      */
731     void SetParameters (in string theParameters);
732
733     /*!
734      *  Returns list of notebook variables used for Mesh operations separated by ":" symbol
735      */
736     string GetParameters();
737
738     /*!
739      *  Returns list of notebook variables used for last Mesh operation
740      */
741     string_array GetLastParameters();
742   };
743
744   interface SMESH_subMesh : SALOME::GenericObj, SMESH_IDSource
745   {
746     /*!
747      *
748      */
749     long GetNumberOfElements()
750       raises (SALOME::SALOME_Exception);
751
752     /*!
753      *
754      */
755     long GetNumberOfNodes( in boolean all )
756       raises (SALOME::SALOME_Exception);
757
758     /*!
759      *
760      */
761     long_array GetElementsId()
762       raises (SALOME::SALOME_Exception);
763
764     /*!
765      *
766      */
767     long_array GetElementsByType( in ElementType theType )
768       raises (SALOME::SALOME_Exception);
769     
770     /*!
771      * Return type of submesh element
772      */
773     ElementType GetElementType( in long id, in boolean iselem )
774       raises (SALOME::SALOME_Exception);
775
776     /*!
777      *
778      */
779     long_array GetNodesId()
780       raises (SALOME::SALOME_Exception);
781
782     /*!
783      * Get geom shape the submesh is dedicated to
784      */
785     GEOM::GEOM_Object GetSubShape()
786       raises (SALOME::SALOME_Exception);
787
788     /*!
789      * Get SMESH_Mesh which stores nodes coordinates & elements definition
790      */
791     SMESH_Mesh GetFather()
792       raises (SALOME::SALOME_Exception);
793
794     /*!
795      * Get the internal Id
796      */
797     long GetId();
798
799     /*!
800      * Get MED subMesh
801      */
802     SALOME_MED::FAMILY GetFamily()
803       raises (SALOME::SALOME_Exception);
804   };
805
806 };
807
808 #endif