1 // Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
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, or (at your option) any later version.
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.
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
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 // File : SMESH_Gen.idl
23 // Author : Paul RASCLE, EDF
25 #ifndef _SMESH_GEN_IDL_
26 #define _SMESH_GEN_IDL_
28 #include "SALOME_Exception.idl"
29 #include "SALOME_Component.idl"
30 #include "SALOMEDS.idl"
32 #include "GEOM_Gen.idl"
34 #include "SMESH_Mesh.idl"
35 #include "SMESH_Hypothesis.idl"
39 typedef sequence<SALOMEDS::SObject> sobject_list;
40 typedef sequence<GEOM::GEOM_Object> object_array;
41 typedef sequence<SMESH_Mesh> mesh_array;
43 interface FilterManager;
44 interface SMESH_Pattern;
45 interface Measurements;
51 const long Tag_HypothesisRoot = 1; // hypotheses root
52 const long Tag_AlgorithmsRoot = 2; // algorithms root
53 const long Tag_FirstMeshRoot = 3; // first mesh root
55 const long Tag_RefOnShape = 1; // references to shape
56 const long Tag_RefOnAppliedHypothesis = 2; // applied hypotheses root
57 const long Tag_RefOnAppliedAlgorithms = 3; // applied algorithms root
58 // Mesh only: sub-meshes roots by type
59 const long Tag_FirstSubMesh = 4;
60 const long Tag_SubMeshOnVertex = 4;
61 const long Tag_SubMeshOnEdge = 5;
62 const long Tag_SubMeshOnWire = 6;
63 const long Tag_SubMeshOnFace = 7;
64 const long Tag_SubMeshOnShell = 8;
65 const long Tag_SubMeshOnSolid = 9;
66 const long Tag_SubMeshOnCompound = 10;
67 const long Tag_LastSubMesh = 10;
68 // Mesh only: group roots by type
69 const long Tag_FirstGroup = 11;
70 const long Tag_NodeGroups = 11;
71 const long Tag_EdgeGroups = 12;
72 const long Tag_FaceGroups = 13;
73 const long Tag_VolumeGroups = 14;
74 const long Tag_0DElementsGroups = 15;
75 const long Tag_BallElementsGroups = 16;
76 const long Tag_LastGroup = 16;
79 * Hypothesis definition error
83 Hypothesis_Status state;
88 typedef sequence<AlgoStateError> algo_error_array;
91 * Mesh computation error
96 COMPERR_BAD_INPUT_MESH, // wrong mesh on lower submesh
97 COMPERR_STD_EXCEPTION , // some std exception raised
98 COMPERR_OCC_EXCEPTION , // OCC exception raised
99 COMPERR_SLM_EXCEPTION , // SALOME exception raised
100 COMPERR_EXCEPTION , // other exception raised
101 COMPERR_MEMORY_PB , // memory allocation problem
102 COMPERR_ALGO_FAILED , // computation failed
103 COMPERR_BAD_SHAPE , // bad geometry
104 COMPERR_WARNING , // algo reports error but sub-mesh is computed anyway
105 COMPERR_CANCELED , // compute canceled
106 COMPERR_NO_MESH_ON_SHAPE,// no mesh elements assigned to sub-mesh
107 COMPERR_BAD_PARMETERS // incorrect hypotheses parameters
111 short code; // ComputeErrorName or, if negative, algo specific code
112 string comment; // textual problem description
114 short subShapeID; // id of sub-shape of a shape to mesh
115 boolean hasBadMesh; // there are elements preventing computation available for visualization
117 typedef sequence<ComputeError> compute_error_array;
120 interface SMESH_Gen : Engines::EngineComponent, SALOMEDS::Driver
122 //GEOM::GEOM_Gen SetGeomEngine( in string containerLoc );
123 void SetGeomEngine( in GEOM::GEOM_Gen geomcompo );
125 FilterManager CreateFilterManager();
127 SMESH_Pattern GetPattern();
129 Measurements CreateMeasurements();
134 void SetEmbeddedMode( in boolean theMode );
139 boolean IsEmbeddedMode();
147 Set enable publishing in the study
149 void SetEnablePublish( in boolean theIsEnablePublish );
152 Get enable publishing in the study
154 boolean IsEnablePublish();
157 * Create a hypothesis that can be shared by different parts of the mesh.
158 * An hypothesis is either:
159 * - a method used to generate or modify a part of the mesh (algorithm).
160 * - a parameter or a law used by an algorithm.
161 * Algorithms are 1D, 2D or 3D.
163 SMESH_Hypothesis CreateHypothesis( in string theHypName,
164 in string theLibName )
165 raises ( SALOME::SALOME_Exception );
168 * Return a hypothesis holding parameter values corresponding either to the mesh
169 * existing on the given geometry or to size of the geometry.
170 * The returned hypothesis may be the one existing in a study and used
171 * to compute the mesh, or a temporary one created just to pass parameter
174 SMESH_Hypothesis GetHypothesisParameterValues( in string theHypName,
175 in string theLibName,
176 in SMESH_Mesh theMesh,
177 in GEOM::GEOM_Object theGeom,
179 raises ( SALOME::SALOME_Exception );
182 * Returns \c True if a hypothesis is assigned to a sole sub-mesh in a current Study
183 * \param [in] theHyp - the hypothesis of interest
184 * \param [out] theMesh - the sole mesh using \a theHyp
185 * \param [out] theShape - the sole geometry \a theHyp is assigned to
186 * \return boolean - \c True if \a theMesh and \a theShape are sole using \a theHyp
188 boolean GetSoleSubMeshUsingHyp( in SMESH_Hypothesis theHyp,
189 out SMESH_Mesh theMesh,
190 out GEOM::GEOM_Object theShape);
193 * Sets number of segments per diagonal of boundary box of geometry by which
194 * default segment length of appropriate 1D hypotheses is defined
196 void SetBoundaryBoxSegmentation( in long theNbSegments ) raises ( SALOME::SALOME_Exception );
198 * \brief Sets default number of segments per edge
200 void SetDefaultNbSegments( in long theNbSegments) raises ( SALOME::SALOME_Exception );
203 * Set the object name
205 void SetName( in string theObjectIOR,
206 in string theObjectName )
207 raises ( SALOME::SALOME_Exception );
210 * Create a Mesh object, given a geometry shape.
211 * Mesh is created empty (no points, no elements).
212 * Shape is explored via GEOM_Client to create local copies.
213 * of TopoDS_Shapes and bind CORBA references of shape & subshapes
216 SMESH_Mesh CreateMesh( in GEOM::GEOM_Object theObject )
217 raises ( SALOME::SALOME_Exception );
220 * Create an empty mesh object
222 SMESH_Mesh CreateEmptyMesh()
223 raises ( SALOME::SALOME_Exception );
226 * Create Mesh object importing data from given UNV file
227 * (UNV supported version is I-DEAS 10)
229 SMESH_Mesh CreateMeshesFromUNV( in string theFileName )
230 raises ( SALOME::SALOME_Exception );
233 * Create Mesh object(s) importing data from given MED file
235 mesh_array CreateMeshesFromMED( in string theFileName,
236 out SMESH::DriverMED_ReadStatus theStatus )
237 raises ( SALOME::SALOME_Exception );
240 * Create Mesh object(s) importing data from given MED file
242 mesh_array CreateMeshesFromSAUV( in string theFileName,
243 out SMESH::DriverMED_ReadStatus theStatus )
244 raises ( SALOME::SALOME_Exception );
247 * Create Mesh object importing data from given STL file
249 SMESH_Mesh CreateMeshesFromSTL( in string theFileName )
250 raises ( SALOME::SALOME_Exception );
253 * Create Mesh object(s) importing data from given CGNS file
255 mesh_array CreateMeshesFromCGNS( in string theFileName,
256 out SMESH::DriverMED_ReadStatus theStatus )
257 raises ( SALOME::SALOME_Exception );
260 * Create Mesh object importing data from given GMF file
261 * \param theFileName - a name of file to import
262 * \param theMakeRequiredGroups - if true, groups of required entities will be created
264 SMESH_Mesh CreateMeshesFromGMF( in string theFileName,
265 in boolean theMakeRequiredGroups,
266 out SMESH::ComputeError theError)
267 raises ( SALOME::SALOME_Exception );
270 * Create a mesh by copying a part of another mesh
271 * \param meshPart - a part of mesh to copy
272 * \param meshName - a name of the new mesh
273 * \param toCopyGroups - to create in the new mesh groups
274 * the copied elements belongs to
275 * \param toKeepIDs - to preserve IDs of the copied elements or not
277 SMESH_Mesh CopyMesh(in SMESH_IDSource meshPart,
279 in boolean toCopyGroups,
280 in boolean toKeepIDs)
281 raises ( SALOME::SALOME_Exception );
284 * Concatenate the given meshes or groups into one mesh.
285 * Union groups with the same name and type if
286 * theUniteIdenticalGroups flag is true.
287 * Merge coincident nodes and elements if
288 * theMergeNodesAndElements flag is true.
290 SMESH_Mesh Concatenate(in ListOfIDSources theMeshesArray,
291 in boolean theUniteIdenticalGroups,
292 in boolean theMergeNodesAndElements,
293 in double theMergeTolerance)
294 raises ( SALOME::SALOME_Exception );
297 * Concatenate the given meshes into one mesh.
298 * Union groups with the same name and type if
299 * theUniteIdenticalGroups flag is true.
300 * Merge coincident nodes and elements if
301 * theMergeNodesAndElements flag is true.
302 * Create the groups of all elements from initial meshes.
304 SMESH_Mesh ConcatenateWithGroups(in ListOfIDSources theMeshesArray,
305 in boolean theUniteIdenticalGroups,
306 in boolean theMergeNodesAndElements,
307 in double theMergeTolerance)
308 raises ( SALOME::SALOME_Exception );
312 * First, verify list of hypothesis associated with the Sub-shape,
313 * return NOK if hypothesis are not sufficient
315 boolean Compute( in SMESH_Mesh theMesh,
316 in GEOM::GEOM_Object theSubObject )
317 raises ( SALOME::SALOME_Exception );
320 * Cancel a computation.
322 void CancelCompute( in SMESH_Mesh theMesh,
323 in GEOM::GEOM_Object theSubObject );
326 * Return true if hypotheses are defined well
328 boolean IsReadyToCompute( in SMESH_Mesh theMesh,
329 in GEOM::GEOM_Object theSubObject )
330 raises ( SALOME::SALOME_Exception );
333 * Evaluates size of prospective mesh on a shape
335 long_array Evaluate(in SMESH_Mesh theMesh,
336 in GEOM::GEOM_Object theSubObject)
337 raises ( SALOME::SALOME_Exception );
340 * Calculate Mesh as preview till indicated dimension
341 * First, verify list of hypothesis associated with the Sub-shape.
342 * Return mesh preview structure
344 MeshPreviewStruct Precompute( in SMESH_Mesh theMesh,
345 in GEOM::GEOM_Object theSubObject,
346 in Dimension theDimension,
347 inout long_array theShapesId )
348 raises ( SALOME::SALOME_Exception );
351 * Return errors of hypotheses definition
352 * algo_error_array is empty if everything is OK
354 algo_error_array GetAlgoState( in SMESH_Mesh theMesh,
355 in GEOM::GEOM_Object theSubObject )
356 raises ( SALOME::SALOME_Exception );
359 * Return errors of mesh computation
360 * compute_error_array is empty if everything is OK
362 compute_error_array GetComputeErrors( in SMESH_Mesh theMesh,
363 in GEOM::GEOM_Object theSubObject )
364 raises ( SALOME::SALOME_Exception );
367 * Return mesh elements preventing computation of a sub-shape
369 MeshPreviewStruct GetBadInputElements( in SMESH_Mesh theMesh,
370 in short theSubShapeID )
371 raises ( SALOME::SALOME_Exception );
374 * Create groups of elements preventing computation of a sub-shape
376 SMESH::ListOfGroups MakeGroupsOfBadInputElements( in SMESH_Mesh theMesh,
377 in short theSubShapeID,
378 in string theGroupName)
379 raises ( SALOME::SALOME_Exception );
382 * Return indices of faces, edges and vertices of given sub-shapes
383 * within theMainObject
385 long_array GetSubShapesId( in GEOM::GEOM_Object theMainObject,
386 in object_array theListOfSubObjects )
387 raises ( SALOME::SALOME_Exception );
390 * Return geometrical object the given element is built on.
391 * The returned geometrical object, if not nil, is either found in the
392 * study or is published by this method with the given name
394 GEOM::GEOM_Object GetGeometryByMeshElement( in SMESH_Mesh theMesh,
395 in long theElementID,
396 in string theGeomName)
397 raises ( SALOME::SALOME_Exception );
400 * Return geometrical object the given element is built on.
401 * The returned geometrical object not published in study by this method.
403 GEOM::GEOM_Object FindGeometryByMeshElement( in SMESH_Mesh theMesh,
404 in long theElementID)
405 raises ( SALOME::SALOME_Exception );
408 * \brief Return id of object, registered in current study context
410 * Can be used to check if the object was created in the same container, as this engine.
412 long GetObjectId(in Object theObject);
415 * \brief Get version of MED format being used.
417 string GetMEDFileVersion();
420 * \brief Get MED version of the file by its name.
422 string GetMEDVersion(in string theFileName);
425 * \brief Check compatibility of file with MED format being used, for read only.
427 boolean CheckCompatibility(in string theFileName);
430 * \brief Check compatibility of file with MED format being used, for append on write.
432 boolean CheckWriteCompatibility(in string theFileName);
435 * \brief Get names of meshes defined in file with the specified name.
437 string_array GetMeshNames(in string theFileName);
440 * \brief Moves objects to the specified position
441 * \param what objects being moved
442 * \param where parent object where objects are moved to
443 * \param row position in the parent object's children list at which objects are moved
445 * This function is used in the drag-n-drop functionality.
447 void Move( in sobject_list what,
448 in SALOMEDS::SObject where,
451 * Returns true if algorithm can be used to mesh a given geometry
452 * \param theAlgoType - the algorithm type
453 * \param theLibName - a name of the Plug-in library implementing the algorithm
454 * \param theShapeObject - the geometry to mesh
455 * \param toCheckAll - if \c True, returns \c True if all shapes are meshable,
456 * else, returns \c True if at least one shape is meshable
458 boolean IsApplicable( in string theAlgoType,
459 in string theLibName,
460 in GEOM::GEOM_Object theShapeObject,
461 in boolean toCheckAll );
465 * Return indices of elements, which are located inside the sphere
466 * \param theSource - mesh, sub-mesh or group
467 * \param theElemType - mesh element type
468 * \param theX - x cooridate of the center of the sphere
469 * \param theY - y cooridate of the center of the sphere
470 * \param theZ - y cooridate of the center of the sphere
471 * \param theR - radius of the sphere
473 long_array GetInsideSphere( in SMESH_IDSource theSource,
474 in ElementType theElemType,
481 * Return indices of elements, which are located inside the box
482 * \param theSource - mesh, sub-mesh or group
483 * \param theElemType - mesh element type
484 * \param theX1 - x cooridate of the first opposite point
485 * \param theY1 - y cooridate of the first opposite point
486 * \param theZ1 - y cooridate of the first opposite point
487 * \param theX2 - x cooridate of the second opposite point
488 * \param theY2 - y cooridate of the second opposite point
489 * \param theZ2 - y cooridate of the second opposite point
491 long_array GetInsideBox( in SMESH_IDSource theSource,
492 in ElementType theElemType,
500 * Return indices of elements, which are located inside the box
501 * \param theSource - mesh, sub-mesh or group
502 * \param theElemType - mesh element type
503 * \param theX - x cooridate of the cented of the bottom face
504 * \param theY - y cooridate of the cented of the bottom face
505 * \param theZ - y cooridate of the cented of the bottom face
506 * \param theDX - x cooridate of the cented of the base vector
507 * \param theDY - y cooridate of the cented of the base vector
508 * \param theDZ - z cooridate of the cented of the base vector
509 * \param theH - height of the cylinder
510 * \param theR - radius of the cylinder
512 long_array GetInsideCylinder( in SMESH_IDSource theSource,
513 in ElementType theElemType,
523 * Return indices of elements, which are located inside the geometry
524 * \param theSource - mesh, sub-mesh or group
525 * \param theElemType - mesh element type
526 * \param theGeom - geometrical object
527 * \param theTolerance - tolerance for selection.
529 long_array GetInside( in SMESH_IDSource theSource,
530 in ElementType theElemType,
531 in GEOM::GEOM_Object theGeom,
532 in double theTolerance );