1 // Copyright (C) 2007-2024 CEA, EDF, 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"
36 #include "SMESH_smIdType.idl"
45 typedef sequence<SALOMEDS::SObject> sobject_list;
46 typedef sequence<GEOM::GEOM_Object> object_array;
47 typedef sequence<SMESH_Mesh> mesh_array;
49 interface FilterManager;
50 interface SMESH_Pattern;
51 interface Measurements;
53 interface MG_ADAPT_OBJECT;
59 const long Tag_HypothesisRoot = 1; // hypotheses root
60 const long Tag_AlgorithmsRoot = 2; // algorithms root
61 const long Tag_FirstMeshRoot = 3; // first mesh root
63 const long Tag_RefOnShape = 1; // references to shape
64 const long Tag_RefOnAppliedHypothesis = 2; // applied hypotheses root
65 const long Tag_RefOnAppliedAlgorithms = 3; // applied algorithms root
66 // Mesh only: sub-meshes roots by type
67 const long Tag_FirstSubMesh = 4;
68 const long Tag_SubMeshOnVertex = 4;
69 const long Tag_SubMeshOnEdge = 5;
70 const long Tag_SubMeshOnWire = 6;
71 const long Tag_SubMeshOnFace = 7;
72 const long Tag_SubMeshOnShell = 8;
73 const long Tag_SubMeshOnSolid = 9;
74 const long Tag_SubMeshOnCompound = 10;
75 const long Tag_LastSubMesh = 10;
76 // Mesh only: group roots by type
77 const long Tag_FirstGroup = 11;
78 const long Tag_NodeGroups = 11;
79 const long Tag_EdgeGroups = 12;
80 const long Tag_FaceGroups = 13;
81 const long Tag_VolumeGroups = 14;
82 const long Tag_0DElementsGroups = 15;
83 const long Tag_BallElementsGroups = 16;
84 const long Tag_LastGroup = 16;
87 * Hypothesis definition error
91 Hypothesis_Status state;
96 typedef sequence<AlgoStateError> algo_error_array;
99 * Mesh computation error
101 enum ComputeErrorName
104 COMPERR_BAD_INPUT_MESH, // wrong mesh on lower submesh
105 COMPERR_STD_EXCEPTION , // some std exception raised
106 COMPERR_OCC_EXCEPTION , // OCC exception raised
107 COMPERR_SLM_EXCEPTION , // SALOME exception raised
108 COMPERR_EXCEPTION , // other exception raised
109 COMPERR_MEMORY_PB , // memory allocation problem
110 COMPERR_ALGO_FAILED , // computation failed
111 COMPERR_BAD_SHAPE , // bad geometry
112 COMPERR_WARNING , // algo reports error but sub-mesh is computed anyway
113 COMPERR_CANCELED , // compute canceled
114 COMPERR_NO_MESH_ON_SHAPE,// no mesh elements assigned to sub-mesh
115 COMPERR_BAD_PARMETERS // incorrect hypotheses parameters
119 short code; // ComputeErrorName or, if negative, algo specific code
120 string comment; // textual problem description
122 long subShapeID; // id of sub-shape of a shape to mesh
123 boolean hasBadMesh; // there are elements preventing computation available for visualization
125 typedef sequence<ComputeError> compute_error_array;
128 * Way to initialize hypothesis
132 short way; // 0 - by mesh, 1 - by geometry size + preferred parameters, 2 - by averageLength
133 double averageLength;
134 boolean quadDominated;
137 interface SMESH_Gen : Engines::EngineComponent, SALOMEDS::Driver
139 //GEOM::GEOM_Gen SetGeomEngine( in string containerLoc );
140 void SetGeomEngine( in GEOM::GEOM_Gen geomcompo );
142 FilterManager CreateFilterManager();
144 SMESH_Pattern GetPattern();
146 Measurements CreateMeasurements();
151 void SetEmbeddedMode( in boolean theMode );
156 boolean IsEmbeddedMode();
164 Set enable publishing in the study
166 void SetEnablePublish( in boolean theIsEnablePublish );
169 Get enable publishing in the study
171 boolean IsEnablePublish();
174 * Create a hypothesis that can be shared by different parts of the mesh.
175 * An hypothesis is either:
176 * - a method used to generate or modify a part of the mesh (algorithm).
177 * - a parameter or a law used by an algorithm.
178 * Algorithms are 1D, 2D or 3D.
180 SMESH_Hypothesis CreateHypothesis( in string theHypName,
181 in string theLibName )
182 raises ( SALOME::SALOME_Exception );
185 * Create a hypothesis and initialize it by average length
187 SMESH_Hypothesis CreateHypothesisByAverageLength( in string theHypName,
188 in string theLibName,
189 in double theAverageLength,
190 in boolean theQuadDominated)
191 raises ( SALOME::SALOME_Exception );
194 * Return a hypothesis holding parameter values corresponding either to the mesh
195 * existing on the given geometry or to size of the geometry.
196 * The returned hypothesis may be the one existing in a study and used
197 * to compute the mesh, or a temporary one created just to pass parameter
200 SMESH_Hypothesis GetHypothesisParameterValues( in string theHypName,
201 in string theLibName,
202 in SMESH_Mesh theMesh,
203 in GEOM::GEOM_Object theGeom,
204 in HypInitParams theWay)
205 raises ( SALOME::SALOME_Exception );
208 * Returns \c True if a hypothesis is assigned to a sole sub-mesh in a current Study
209 * \param [in] theHyp - the hypothesis of interest
210 * \param [out] theMesh - the sole mesh using \a theHyp
211 * \param [out] theShape - the sole geometry \a theHyp is assigned to
212 * \return boolean - \c True if \a theMesh and \a theShape are sole using \a theHyp
214 boolean GetSoleSubMeshUsingHyp( in SMESH_Hypothesis theHyp,
215 out SMESH_Mesh theMesh,
216 out GEOM::GEOM_Object theShape);
219 * Sets number of segments per diagonal of boundary box of geometry by which
220 * default segment length of appropriate 1D hypotheses is defined
222 void SetBoundaryBoxSegmentation( in long theNbSegments ) raises ( SALOME::SALOME_Exception );
224 * \brief Sets default number of segments per edge
226 void SetDefaultNbSegments( in long theNbSegments) raises ( SALOME::SALOME_Exception );
229 * Set the object name
231 void SetName( in string theObjectIOR,
232 in string theObjectName )
233 raises ( SALOME::SALOME_Exception );
236 * Create a Mesh object, given a geometry shape.
237 * Mesh is created empty (no points, no elements).
238 * Shape is explored via GEOM_Client to create local copies.
239 * of TopoDS_Shapes and bind CORBA references of shape & subshapes
242 SMESH_Mesh CreateMesh( in GEOM::GEOM_Object theObject )
243 raises ( SALOME::SALOME_Exception );
246 * Create a Mesh object, given a geometry shape.
247 * Mesh is created empty (no points, no elements).
248 * Shape is explored via GEOM_Client to create local copies.
249 * of TopoDS_Shapes and bind CORBA references of shape & subshapes
251 * The mesh is a parallel one
253 SMESH_ParallelMesh CreateParallelMesh( in GEOM::GEOM_Object theObject )
254 raises ( SALOME::SALOME_Exception );
256 * Create an empty mesh object
258 SMESH_Mesh CreateEmptyMesh()
259 raises ( SALOME::SALOME_Exception );
262 * Create Mesh object importing data from given UNV file
263 * (UNV supported version is I-DEAS 10)
265 SMESH_Mesh CreateMeshesFromUNV( in string theFileName )
266 raises ( SALOME::SALOME_Exception );
269 * Create Mesh object(s) importing data from given MED file
271 mesh_array CreateMeshesFromMED( in string theFileName,
272 out SMESH::DriverMED_ReadStatus theStatus )
273 raises ( SALOME::SALOME_Exception );
276 * Create Mesh object importing data from given STL file
278 SMESH_Mesh CreateMeshesFromSTL( in string theFileName )
279 raises ( SALOME::SALOME_Exception );
282 * Create Mesh object(s) importing data from given CGNS file
284 mesh_array CreateMeshesFromCGNS( in string theFileName,
285 out SMESH::DriverMED_ReadStatus theStatus )
286 raises ( SALOME::SALOME_Exception );
289 * Create Mesh object importing data from given GMF file
290 * \param theFileName - a name of file to import
291 * \param theMakeRequiredGroups - if true, groups of required entities will be created
293 SMESH_Mesh CreateMeshesFromGMF( in string theFileName,
294 in boolean theMakeRequiredGroups,
295 out SMESH::ComputeError theError)
296 raises ( SALOME::SALOME_Exception );
299 * Create a mesh and import data from any file supported by meshio library
301 mesh_array CreateMeshesFromMESHIO(in string theFileName,
302 out SMESH::DriverMED_ReadStatus theStatus)
303 raises (SALOME::SALOME_Exception);
306 * Create a dual mesh of a Tetrahedron mesh
307 * \param mesh - TetraHedron mesh to create dual from
308 * \param meshName - a name of the new mesh
309 * \param adaptToShape - if True project boundary point on shape
311 SMESH_Mesh CreateDualMesh(in SMESH_IDSource mesh,
313 in boolean adaptToShape)
314 raises ( SALOME::SALOME_Exception );
317 * Create a mesh by copying a part of another mesh
318 * \param meshPart - a part of mesh to copy
319 * \param meshName - a name of the new mesh
320 * \param toCopyGroups - to create in the new mesh groups
321 * the copied elements belongs to
322 * \param toKeepIDs - to preserve IDs of the copied elements or not
324 SMESH_Mesh CopyMesh(in SMESH_IDSource meshPart,
326 in boolean toCopyGroups,
327 in boolean toKeepIDs)
328 raises ( SALOME::SALOME_Exception );
331 * Create a mesh by copying definitions of another mesh to a given geometry
332 * \param sourceMesh - a mesh to copy
333 * \param newGeometry - a new geometry
334 * \param meshName - a name of the new mesh
335 * \param toCopyGroups - to create groups in the new mesh
336 * \param toReuseHypotheses - if True, existing hypothesis will be used by the new mesh,
337 * otherwise new hypotheses with the same parameters will be created for the new mesh.
338 * \param toCopyElements - to copy mesh elements of same sub-shapes of the two geometries
339 * \param newMesh - return a new mesh
340 * \param newGroups - return new groups
341 * \param newSubmeshes - return new sub-meshes
342 * \param newHypotheses - return new algorithms and hypotheses
343 * \param invalidEntries - return study entries of objects whose
344 * counterparts are not found in the newGeometry, followed by entries
345 * of mesh sub-objects that are invalid because they depend on a not found
346 * preceding sub-shape
348 boolean CopyMeshWithGeom( in SMESH_Mesh sourceMesh,
349 in GEOM::GEOM_Object newGeometry,
351 in boolean toCopyGroups,
352 in boolean toReuseHypotheses,
353 in boolean toCopyElements,
354 out SMESH_Mesh newMesh,
355 out ListOfGroups newGroups,
356 out submesh_array newSubmeshes,
357 out ListOfHypothesis newHypotheses,
358 out string_array invalidEntries)
359 raises ( SALOME::SALOME_Exception );
362 * Concatenate the given meshes or groups into one mesh,
363 * optionally to theMeshToAppendTo.
364 * Union groups with the same name and type if
365 * theUniteIdenticalGroups flag is true.
366 * Merge coincident nodes and elements if
367 * theMergeNodesAndElements flag is true.
369 SMESH_Mesh Concatenate(in ListOfIDSources theMeshesArray,
370 in boolean theUniteIdenticalGroups,
371 in boolean theMergeNodesAndElements,
372 in double theMergeTolerance,
373 in SMESH_Mesh theMeshToAppendTo)
374 raises ( SALOME::SALOME_Exception );
377 * Concatenate the given meshes into one mesh,
378 * optionally to theMeshToAppendTo.
379 * Union groups with the same name and type if
380 * theUniteIdenticalGroups flag is true.
381 * Merge coincident nodes and elements if
382 * theMergeNodesAndElements flag is true.
383 * Create the groups of all elements from initial meshes.
385 SMESH_Mesh ConcatenateWithGroups(in ListOfIDSources theMeshesArray,
386 in boolean theUniteIdenticalGroups,
387 in boolean theMergeNodesAndElements,
388 in double theMergeTolerance,
389 in SMESH_Mesh theMeshToAppendTo)
390 raises ( SALOME::SALOME_Exception );
394 * First, verify list of hypothesis associated with the Sub-shape,
395 * return NOK if hypothesis are not sufficient
397 boolean Compute( in SMESH_Mesh theMesh,
398 in GEOM::GEOM_Object theSubObject )
399 raises ( SALOME::SALOME_Exception );
402 * Cancel a computation.
404 void CancelCompute( in SMESH_Mesh theMesh,
405 in GEOM::GEOM_Object theSubObject );
408 * Return true if hypotheses are defined well
410 boolean IsReadyToCompute( in SMESH_Mesh theMesh,
411 in GEOM::GEOM_Object theSubObject )
412 raises ( SALOME::SALOME_Exception );
415 * Evaluates size of prospective mesh on a shape
417 smIdType_array Evaluate(in SMESH_Mesh theMesh,
418 in GEOM::GEOM_Object theSubObject)
419 raises ( SALOME::SALOME_Exception );
422 * Calculate Mesh as preview till indicated dimension
423 * First, verify list of hypothesis associated with the Sub-shape.
424 * Return mesh preview structure
426 MeshPreviewStruct Precompute( in SMESH_Mesh theMesh,
427 in GEOM::GEOM_Object theSubObject,
428 in Dimension theDimension,
429 inout long_array theShapesId )
430 raises ( SALOME::SALOME_Exception );
433 * Return errors of hypotheses definition
434 * algo_error_array is empty if everything is OK
436 algo_error_array GetAlgoState( in SMESH_Mesh theMesh,
437 in GEOM::GEOM_Object theSubObject )
438 raises ( SALOME::SALOME_Exception );
441 * Return errors of mesh computation
442 * compute_error_array is empty if everything is OK
444 compute_error_array GetComputeErrors( in SMESH_Mesh theMesh,
445 in GEOM::GEOM_Object theSubObject )
446 raises ( SALOME::SALOME_Exception );
449 * Return mesh elements preventing computation of a sub-shape
451 MeshPreviewStruct GetBadInputElements( in SMESH_Mesh theMesh,
452 in short theSubShapeID )
453 raises ( SALOME::SALOME_Exception );
456 * Create groups of elements preventing computation of a sub-shape
458 SMESH::ListOfGroups MakeGroupsOfBadInputElements( in SMESH_Mesh theMesh,
459 in short theSubShapeID,
460 in string theGroupName)
461 raises ( SALOME::SALOME_Exception );
464 * Return indices of faces, edges and vertices of given sub-shapes
465 * within theMainObject
467 long_array GetSubShapesId( in GEOM::GEOM_Object theMainObject,
468 in object_array theListOfSubObjects )
469 raises ( SALOME::SALOME_Exception );
472 * Return geometrical object the given element is built on.
473 * The returned geometrical object, if not nil, is either found in the
474 * study or is published by this method with the given name
476 GEOM::GEOM_Object GetGeometryByMeshElement( in SMESH_Mesh theMesh,
477 in smIdType theElementID,
478 in string theGeomName)
479 raises ( SALOME::SALOME_Exception );
482 * Return geometrical object the given element is built on.
483 * The returned geometrical object not published in study by this method.
485 GEOM::GEOM_Object FindGeometryByMeshElement( in SMESH_Mesh theMesh,
486 in smIdType theElementID)
487 raises ( SALOME::SALOME_Exception );
490 * \brief Return id of object, registered in current study context
492 * Can be used to check if the object was created in the same container, as this engine.
494 long GetObjectId(in Object theObject);
497 * \brief Get version of MED format being used.
499 string GetMEDFileVersion();
502 * \brief Get MED version of the file by its name.
504 string GetMEDVersion(in string theFileName);
507 * \brief Check compatibility of file with MED format being used, for read only.
509 boolean CheckCompatibility(in string theFileName);
512 * \brief Check compatibility of file with MED format being used, for append on write.
514 boolean CheckWriteCompatibility(in string theFileName);
517 * \brief Get names of meshes defined in file with the specified name.
519 string_array GetMeshNames(in string theFileName);
522 * \brief Moves objects to the specified position
523 * \param what objects being moved
524 * \param where parent object where objects are moved to
525 * \param row position in the parent object's children list at which objects are moved
527 * This function is used in the drag-n-drop functionality.
529 void Move( in sobject_list what,
530 in SALOMEDS::SObject where,
533 * Returns true if algorithm can be used to mesh a given geometry
534 * \param theAlgoType - the algorithm type
535 * \param theLibName - a name of the Plug-in library implementing the algorithm
536 * \param theShapeObject - the geometry to mesh
537 * \param toCheckAll - if \c True, returns \c True if all shapes are meshable,
538 * else, returns \c True if at least one shape is meshable
540 boolean IsApplicable( in string theAlgoType,
541 in string theLibName,
542 in GEOM::GEOM_Object theShapeObject,
543 in boolean toCheckAll );
547 * Return indices of elements, which are located inside the sphere
548 * \param theSource - mesh, sub-mesh or group
549 * \param theElemType - mesh element type
550 * \param theX - x coordinate of the center of the sphere
551 * \param theY - y coordinate of the center of the sphere
552 * \param theZ - y coordinate of the center of the sphere
553 * \param theR - radius of the sphere
555 long_array GetInsideSphere( in SMESH_IDSource theSource,
556 in ElementType theElemType,
563 * Return indices of elements, which are located inside the box
564 * \param theSource - mesh, sub-mesh or group
565 * \param theElemType - mesh element type
566 * \param theX1 - x coordinate of the first opposite point
567 * \param theY1 - y coordinate of the first opposite point
568 * \param theZ1 - y coordinate of the first opposite point
569 * \param theX2 - x coordinate of the second opposite point
570 * \param theY2 - y coordinate of the second opposite point
571 * \param theZ2 - y coordinate of the second opposite point
573 long_array GetInsideBox( in SMESH_IDSource theSource,
574 in ElementType theElemType,
582 * Return indices of elements, which are located inside the box
583 * \param theSource - mesh, sub-mesh or group
584 * \param theElemType - mesh element type
585 * \param theX - x coordinate of the cented of the bottom face
586 * \param theY - y coordinate of the cented of the bottom face
587 * \param theZ - y coordinate of the cented of the bottom face
588 * \param theDX - x coordinate of the cented of the base vector
589 * \param theDY - y coordinate of the cented of the base vector
590 * \param theDZ - z coordinate of the cented of the base vector
591 * \param theH - height of the cylinder
592 * \param theR - radius of the cylinder
594 long_array GetInsideCylinder( in SMESH_IDSource theSource,
595 in ElementType theElemType,
605 * Return indices of elements, which are located inside the geometry
606 * \param theSource - mesh, sub-mesh or group
607 * \param theElemType - mesh element type
608 * \param theGeom - geometrical object
609 * \param theTolerance - tolerance for selection.
611 long_array GetInside( in SMESH_IDSource theSource,
612 in ElementType theElemType,
613 in GEOM::GEOM_Object theGeom,
614 in double theTolerance );
616 MG_ADAPT CreateMG_ADAPT();
617 SMESHHOMARD::HOMARD_Gen CreateHOMARD_ADAPT() raises ( SALOME::SALOME_Exception );
618 //MG_ADAPT_OBJECT Adaptation(in string adaptType);
619 SALOME::GenericObj Adaptation(in string adaptType) raises ( SALOME::SALOME_Exception );
620 MG_ADAPT CreateAdaptationHypothesis();