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