Salome HOME
0021275: EDF 1681 SMESH: Find the number of nodes of any group
[modules/smesh.git] / idl / SMESH_Gen.idl
1 // Copyright (C) 2007-2011  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_Gen.idl
23 //  Author : Paul RASCLE, EDF
24
25 #ifndef _SMESH_GEN_IDL_
26 #define _SMESH_GEN_IDL_
27
28 #include "SALOME_Exception.idl"
29 #include "SALOME_Component.idl"
30 #include "SALOMEDS.idl"
31
32 #include "GEOM_Gen.idl"
33
34 #include "SMESH_Mesh.idl"
35 #include "SMESH_Hypothesis.idl"
36
37 module SMESH
38 {
39   typedef sequence<GEOM::GEOM_Object> object_array;
40   typedef sequence<SMESH_Mesh>        mesh_array;
41
42   interface FilterManager;
43   interface SMESH_Pattern;
44   interface Measurements;
45
46   /*!
47    * Tags definition
48    */
49   // Top level
50   const long Tag_HypothesisRoot = 1; // hypotheses root
51   const long Tag_AlgorithmsRoot = 2; // algorithms root
52   const long Tag_FirstMeshRoot  = 3; // first mesh root
53   // Mesh/Submesh
54   const long Tag_RefOnShape             = 1; // references to shape
55   const long Tag_RefOnAppliedHypothesis = 2; // applied hypotheses root
56   const long Tag_RefOnAppliedAlgorithms = 3; // applied algorithms root
57   // Mesh only: sub-meshes roots by type
58   const long Tag_FirstSubMesh           =  4;
59   const long Tag_SubMeshOnVertex        =  4;
60   const long Tag_SubMeshOnEdge          =  5;
61   const long Tag_SubMeshOnWire          =  6;
62   const long Tag_SubMeshOnFace          =  7;
63   const long Tag_SubMeshOnShell         =  8;
64   const long Tag_SubMeshOnSolid         =  9;
65   const long Tag_SubMeshOnCompound      = 10;
66   const long Tag_LastSubMesh            = 10;
67   // Mesh only: group roots by type
68   const long Tag_FirstGroup             = 11;
69   const long Tag_NodeGroups             = 11;
70   const long Tag_EdgeGroups             = 12;
71   const long Tag_FaceGroups             = 13;
72   const long Tag_VolumeGroups           = 14;
73   const long Tag_0DElementsGroups       = 15;
74   const long Tag_LastGroup              = 15;
75
76   /*!
77    * Hypothesis definintion error
78    */
79   struct AlgoStateError
80   {
81     Hypothesis_Status  state;
82     string             algoName;
83     long               algoDim;
84     boolean            isGlobalAlgo;
85   };
86   typedef sequence<AlgoStateError> algo_error_array;
87
88   /*!
89    * Mesh computation error
90    */
91   enum ComputeErrorName
92   {
93     COMPERR_OK            ,
94     COMPERR_BAD_INPUT_MESH,  // wrong mesh on lower submesh
95     COMPERR_STD_EXCEPTION ,  // some std exception raised
96     COMPERR_OCC_EXCEPTION ,  // OCC exception raised
97     COMPERR_SLM_EXCEPTION ,  // SALOME exception raised
98     COMPERR_EXCEPTION     ,  // other exception raised
99     COMPERR_MEMORY_PB     ,  // memory allocation problem
100     COMPERR_ALGO_FAILED   ,  // computation failed
101     COMPERR_BAD_SHAPE     ,  // bad geometry
102     COMPERR_WARNING          // algo reports error but sub-mesh is computed anyway
103   };
104   struct ComputeError
105   {
106     short   code;       // ComputeErrorName or, if negative, algo specific code
107     string  comment;    // textual problem description
108     string  algoName;
109     short   subShapeID; // id of subshape of a shape to mesh
110     boolean hasBadMesh; // there are elements preventing computation available for visualization
111   };
112   typedef sequence<ComputeError> compute_error_array;
113
114
115   interface SMESH_Gen : Engines::EngineComponent, SALOMEDS::Driver
116   {
117     //GEOM::GEOM_Gen SetGeomEngine( in string containerLoc );
118     void SetGeomEngine( in GEOM::GEOM_Gen geomcompo );
119
120     FilterManager CreateFilterManager();
121
122     SMESH_Pattern GetPattern();
123
124     Measurements  CreateMeasurements();
125
126     /*!
127       Set the current mode
128      */
129     void SetEmbeddedMode( in boolean theMode );
130
131     /*!
132       Get the current mode
133      */
134     boolean IsEmbeddedMode();
135
136     /*!
137       Set the current study
138      */
139     void SetCurrentStudy( in SALOMEDS::Study theStudy );
140
141     /*!
142       Get the current study
143      */
144     SALOMEDS::Study GetCurrentStudy();
145
146     /*!
147      * Create a hypothesis that can be shared by differents parts of the mesh.
148      * An hypothesis is either:
149      * - a method used to generate or modify a part of the mesh (algorithm).
150      * - a parameter or a law used by an algorithm.
151      * Algorithms are 1D, 2D or 3D.
152      */
153     SMESH_Hypothesis CreateHypothesis( in string theHypName,
154                                        in string theLibName )
155       raises ( SALOME::SALOME_Exception );
156
157     /*!
158      * Return a hypothesis holding parameter values corresponding either to the mesh
159      * existing on the given geometry or to size of the geometry.
160      * The returned hypothesis may be the one existing in a study and used
161      * to compute the mesh, or a temporary one created just to pass parameter
162      * values.
163      */
164     SMESH_Hypothesis GetHypothesisParameterValues( in string            theHypName,
165                                                    in string            theLibName,
166                                                    in SMESH_Mesh        theMesh,
167                                                    in GEOM::GEOM_Object theGeom,
168                                                    in boolean           byMesh)
169       raises ( SALOME::SALOME_Exception );
170
171     /*!
172      * Sets number of segments per diagonal of boundary box of geometry by which
173      * default segment length of appropriate 1D hypotheses is defined
174      */
175     void SetBoundaryBoxSegmentation( in long theNbSegments ) raises ( SALOME::SALOME_Exception );
176     /*!
177      * \brief Sets default number of segments per edge
178      */
179     void SetDefaultNbSegments( in long theNbSegments) raises ( SALOME::SALOME_Exception );
180
181     /*!
182      * Set the object name
183      */
184     void SetName( in string theObjectIOR,
185                   in string theObjectName )
186       raises ( SALOME::SALOME_Exception );
187
188     /*!
189      * Create a Mesh object, given a geometry shape.
190      * Mesh is created empty (no points, no elements).
191      * Shape is explored via GEOM_Client to create local copies.
192      * of TopoDS_Shapes and bind CORBA references of shape & subshapes
193      * with TopoDS_Shapes
194      */
195     SMESH_Mesh CreateMesh( in GEOM::GEOM_Object theObject )
196       raises ( SALOME::SALOME_Exception );
197
198     /*!
199      * Create an empty mesh object
200      */
201     SMESH_Mesh CreateEmptyMesh()
202       raises ( SALOME::SALOME_Exception );
203
204     /*!
205      * Create Mesh object importing data from given UNV file
206      * (UNV supported version is I-DEAS 10)
207      */
208     SMESH_Mesh CreateMeshesFromUNV( in string theFileName )
209       raises ( SALOME::SALOME_Exception );
210
211     /*!
212      * Create Mesh object(s) importing data from given MED file
213      */
214      mesh_array CreateMeshesFromMED( in string theFileName,
215                                      out SMESH::DriverMED_ReadStatus theStatus )
216        raises ( SALOME::SALOME_Exception );
217
218     /*!
219      * Create Mesh object importing data from given STL file
220      */
221     SMESH_Mesh CreateMeshesFromSTL( in string theFileName )
222       raises ( SALOME::SALOME_Exception );
223
224     /*!
225      * Create Mesh object(s) importing data from given CGNS file
226      */
227     mesh_array CreateMeshesFromCGNS( in string theFileName,
228                                      out SMESH::DriverMED_ReadStatus theStatus )
229       raises ( SALOME::SALOME_Exception );
230
231     /*!
232      * Create a mesh by copying a part of another mesh
233      *  \param meshPart - a part of mesh to copy
234      *  \param meshName - a name of the new mesh
235      *  \param toCopyGroups - to create in the new mesh groups
236      *                        the copied elements belongs to
237      *  \param toKeepIDs - to preserve IDs of the copied elements or not
238      */
239     SMESH_Mesh CopyMesh(in SMESH_IDSource meshPart,
240                         in string         meshName,
241                         in boolean        toCopyGroups,
242                         in boolean        toKeepIDs)
243       raises ( SALOME::SALOME_Exception );
244
245     /*!
246      * Concatenate the given meshes into one mesh.
247      * Union groups with the same name and type if
248      * theUniteIdenticalGroups flag is true.
249      * Merge coincident nodes and elements if
250      * theMergeNodesAndElements flag is true.
251      */
252     SMESH_Mesh Concatenate(in mesh_array theMeshesArray,
253                            in boolean    theUniteIdenticalGroups,
254                            in boolean    theMergeNodesAndElements,
255                            in double     theMergeTolerance)
256       raises ( SALOME::SALOME_Exception );
257
258     /*!
259      * Concatenate the given meshes into one mesh.
260      * Union groups with the same name and type if
261      * theUniteIdenticalGroups flag is true.
262      * Merge coincident nodes and elements if
263      * theMergeNodesAndElements flag is true.
264      * Create the groups of all elements from initial meshes.
265      */
266     SMESH_Mesh ConcatenateWithGroups(in mesh_array theMeshesArray,
267                                      in boolean    theUniteIdenticalGroups,
268                                      in boolean    theMergeNodesAndElements,
269                                      in double     theMergeTolerance)
270       raises ( SALOME::SALOME_Exception );
271
272     /*!
273      * Mesh a subShape.
274      * First, verify list of hypothesis associated with the subShape,
275      * return NOK if hypothesis are not sufficient
276      */
277     boolean Compute( in SMESH_Mesh        theMesh,
278                      in GEOM::GEOM_Object theSubObject )
279       raises ( SALOME::SALOME_Exception );
280
281     /*!
282      * Cancel a computation.
283      */
284     void CancelCompute( in SMESH_Mesh        theMesh,
285                         in GEOM::GEOM_Object theSubObject );
286
287     /*!
288      * Return true if hypotheses are defined well
289      */
290     boolean IsReadyToCompute( in SMESH_Mesh        theMesh,
291                               in GEOM::GEOM_Object theSubObject )
292       raises ( SALOME::SALOME_Exception );
293
294     /*!
295      * Evaluates size of prospective mesh on a shape
296      */
297     long_array  Evaluate(in SMESH_Mesh        theMesh,
298                          in GEOM::GEOM_Object theSubObject)
299       raises ( SALOME::SALOME_Exception );
300
301     /*!
302      * Calculate Mesh as preview till indicated dimension
303      * First, verify list of hypothesis associated with the subShape.
304      * Return mesh preview structure
305      */
306     MeshPreviewStruct Precompute( in SMESH_Mesh        theMesh,
307                                   in GEOM::GEOM_Object theSubObject,
308                                   in Dimension         theDimension,
309                                   inout long_array    theShapesId )
310       raises ( SALOME::SALOME_Exception );
311
312     /*!
313      * Return errors of hypotheses definintion
314      * algo_error_array is empty if everything is OK
315      */
316     algo_error_array GetAlgoState( in SMESH_Mesh        theMesh,
317                                    in GEOM::GEOM_Object theSubObject )
318       raises ( SALOME::SALOME_Exception );
319
320     /*!
321      * Return errors of mesh computation
322      * compute_error_array is empty if everything is OK
323      */
324     compute_error_array GetComputeErrors( in SMESH_Mesh        theMesh,
325                                           in GEOM::GEOM_Object theSubObject )
326       raises ( SALOME::SALOME_Exception );
327
328     /*!
329      * Return mesh elements preventing computation of a subshape
330      */
331     MeshPreviewStruct GetBadInputElements( in SMESH_Mesh theMesh,
332                                            in short      theSubShapeID )
333       raises ( SALOME::SALOME_Exception );
334
335     /*!
336      * Return indeces of faces, edges and vertices of given subshapes
337      * within theMainObject
338      */
339     long_array GetSubShapesId( in GEOM::GEOM_Object theMainObject,
340                                in object_array      theListOfSubObjects )
341        raises ( SALOME::SALOME_Exception );
342
343     /*!
344      * Return geometrical object the given element is built on.
345      * The returned geometrical object, if not nil, is either found in the
346      * study or is published by this method with the given name
347      */
348     GEOM::GEOM_Object GetGeometryByMeshElement( in SMESH_Mesh  theMesh,
349                                                 in long        theElementID,
350                                                 in string      theGeomName)
351       raises ( SALOME::SALOME_Exception );
352
353     /*!
354      * Return geometrical object the given element is built on.
355      * The returned geometrical object not published in study by this method.
356      */
357     GEOM::GEOM_Object FindGeometryByMeshElement( in SMESH_Mesh  theMesh,
358                                                  in long        theElementID)
359       raises ( SALOME::SALOME_Exception );
360
361     /*!
362      * \brief Return id of object, registered in current study context
363      *
364      * Can be used to check if the object was created in the same container, as this engine.
365      */
366     long GetObjectId(in Object theObject);
367
368     /*!
369      * \brief Get MED version of the file by its name.
370      */
371     boolean GetMEDVersion(in string theFileName, out MED_VERSION theVersion);
372
373     /*!
374      * \brief Get names of meshes defined in file with the specified name.
375      */
376     string_array GetMeshNames(in string theFileName);
377   };
378
379 };
380
381 #endif