Salome HOME
#24666 [CEA][Windows] BLSURPLUGIN compilation issue
[modules/smesh.git] / idl / SMESH_Gen.idl
index aadfb1e33a99850be5213ce9da58e2fb8f12eee0..eeb8f0c7128e989c2f592c70c9f4cc84ee145745 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2013  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2021  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -6,7 +6,7 @@
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -33,6 +33,7 @@
 
 #include "SMESH_Mesh.idl"
 #include "SMESH_Hypothesis.idl"
+#include "SMESH_smIdType.idl"
 
 module SMESH
 {
@@ -43,6 +44,8 @@ module SMESH
   interface FilterManager;
   interface SMESH_Pattern;
   interface Measurements;
+  interface MG_ADAPT;
+  interface MG_ADAPT_OBJECT;
 
   /*!
    * Tags definition
@@ -76,7 +79,7 @@ module SMESH
   const long Tag_LastGroup              = 16;
 
   /*!
-   * Hypothesis definintion error
+   * Hypothesis definition error
    */
   struct AlgoStateError
   {
@@ -103,7 +106,8 @@ module SMESH
     COMPERR_BAD_SHAPE     ,  // bad geometry
     COMPERR_WARNING       ,  // algo reports error but sub-mesh is computed anyway
     COMPERR_CANCELED      ,  // compute canceled
-    COMPERR_NO_MESH_ON_SHAPE // no mesh elements assigned to sub-mesh
+    COMPERR_NO_MESH_ON_SHAPE,// no mesh elements assigned to sub-mesh
+    COMPERR_BAD_PARMETERS    // incorrect hypotheses parameters
   };
   struct ComputeError
   {
@@ -115,6 +119,15 @@ module SMESH
   };
   typedef sequence<ComputeError> compute_error_array;
 
+  /*!
+   * Way to initialize hypothesis
+   */
+  struct HypInitParams
+  {
+    short   way; // 0 - by mesh, 1 - by geometry size + preferred parameters, 2 - by averageLength
+    double  averageLength;
+    boolean quadDominated;
+  };
 
   interface SMESH_Gen : Engines::EngineComponent, SALOMEDS::Driver
   {
@@ -138,17 +151,22 @@ module SMESH
     boolean IsEmbeddedMode();
 
     /*!
-      Set the current study
+      Update the study
      */
-    void SetCurrentStudy( in SALOMEDS::Study theStudy );
-
+    void UpdateStudy();
+    
+    /*!
+      Set enable publishing in the study
+     */
+    void SetEnablePublish( in boolean theIsEnablePublish );
+    
     /*!
-      Get the current study
+      Get enable publishing in the study
      */
-    SALOMEDS::Study GetCurrentStudy();
+    boolean IsEnablePublish();
 
     /*!
-     * Create a hypothesis that can be shared by differents parts of the mesh.
+     * Create a hypothesis that can be shared by different parts of the mesh.
      * An hypothesis is either:
      * - a method used to generate or modify a part of the mesh (algorithm).
      * - a parameter or a law used by an algorithm.
@@ -158,6 +176,15 @@ module SMESH
                                        in string theLibName )
       raises ( SALOME::SALOME_Exception );
 
+    /*!
+     * Create a hypothesis and initialize it by average length
+     */
+    SMESH_Hypothesis CreateHypothesisByAverageLength( in string  theHypName,
+                                                      in string  theLibName,
+                                                      in double  theAverageLength,
+                                                      in boolean theQuadDominated)
+      raises ( SALOME::SALOME_Exception );
+
     /*!
      * Return a hypothesis holding parameter values corresponding either to the mesh
      * existing on the given geometry or to size of the geometry.
@@ -169,9 +196,20 @@ module SMESH
                                                    in string            theLibName,
                                                    in SMESH_Mesh        theMesh,
                                                    in GEOM::GEOM_Object theGeom,
-                                                   in boolean           byMesh)
+                                                   in HypInitParams     theWay)
       raises ( SALOME::SALOME_Exception );
 
+    /*!
+     * Returns \c True if a hypothesis is assigned to a sole sub-mesh in a current Study
+     *  \param [in] theHyp - the hypothesis of interest
+     *  \param [out] theMesh - the sole mesh using \a theHyp
+     *  \param [out] theShape - the sole geometry \a theHyp is assigned to
+     *  \return boolean - \c True if \a theMesh and \a theShape are sole using \a theHyp
+     */
+    boolean GetSoleSubMeshUsingHyp( in SMESH_Hypothesis   theHyp,
+                                    out SMESH_Mesh        theMesh,
+                                    out GEOM::GEOM_Object theShape);
+
     /*!
      * Sets number of segments per diagonal of boundary box of geometry by which
      * default segment length of appropriate 1D hypotheses is defined
@@ -264,30 +302,65 @@ module SMESH
       raises ( SALOME::SALOME_Exception );
 
     /*!
-     * Concatenate the given meshes into one mesh.
+     * Create a mesh by copying definitions of another mesh to a given geometry
+     *  \param sourceMesh - a mesh to copy
+     *  \param newGeometry - a new geometry
+     *  \param meshName - a name of the new mesh
+     *  \param toCopyGroups - to create groups in the new mesh
+     *  \param toReuseHypotheses - if True, existing hypothesis will be used by the new mesh, 
+     *         otherwise new hypotheses with the same parameters will be created for the new mesh.
+     *  \param toCopyElements - to copy mesh elements of same sub-shapes of the two geometries
+     *  \param newMesh - return a new mesh
+     *  \param newGroups - return new groups
+     *  \param newSubmeshes - return new sub-meshes
+     *  \param newHypotheses - return new algorithms and hypotheses
+     *  \param invalidEntries - return study entries of objects whose
+     *         counterparts are not found in the newGeometry, followed by entries
+     *         of mesh sub-objects that are invalid because they depend on a not found
+     *         preceding sub-shape
+     */
+    boolean CopyMeshWithGeom( in SMESH_Mesh        sourceMesh,
+                              in GEOM::GEOM_Object newGeometry,
+                              in string            meshName,
+                              in boolean           toCopyGroups,
+                              in boolean           toReuseHypotheses,
+                              in boolean           toCopyElements,
+                              out SMESH_Mesh       newMesh,
+                              out ListOfGroups     newGroups,
+                              out submesh_array    newSubmeshes,
+                              out ListOfHypothesis newHypotheses,
+                              out string_array     invalidEntries)
+      raises ( SALOME::SALOME_Exception );
+
+    /*!
+     * Concatenate the given meshes or groups into one mesh,
+     * optionally to theMeshToAppendTo.
      * Union groups with the same name and type if
      * theUniteIdenticalGroups flag is true.
      * Merge coincident nodes and elements if
      * theMergeNodesAndElements flag is true.
      */
-    SMESH_Mesh Concatenate(in mesh_array theMeshesArray,
-                           in boolean    theUniteIdenticalGroups,
-                           in boolean    theMergeNodesAndElements,
-                           in double     theMergeTolerance)
+    SMESH_Mesh Concatenate(in ListOfIDSources theMeshesArray,
+                           in boolean         theUniteIdenticalGroups,
+                           in boolean         theMergeNodesAndElements,
+                           in double          theMergeTolerance,
+                           in SMESH_Mesh      theMeshToAppendTo)
       raises ( SALOME::SALOME_Exception );
 
     /*!
-     * Concatenate the given meshes into one mesh.
+     * Concatenate the given meshes into one mesh,
+     * optionally to theMeshToAppendTo.
      * Union groups with the same name and type if
      * theUniteIdenticalGroups flag is true.
      * Merge coincident nodes and elements if
      * theMergeNodesAndElements flag is true.
      * Create the groups of all elements from initial meshes.
      */
-    SMESH_Mesh ConcatenateWithGroups(in mesh_array theMeshesArray,
-                                     in boolean    theUniteIdenticalGroups,
-                                     in boolean    theMergeNodesAndElements,
-                                     in double     theMergeTolerance)
+    SMESH_Mesh ConcatenateWithGroups(in ListOfIDSources theMeshesArray,
+                                     in boolean         theUniteIdenticalGroups,
+                                     in boolean         theMergeNodesAndElements,
+                                     in double          theMergeTolerance,
+                                     in SMESH_Mesh      theMeshToAppendTo)
       raises ( SALOME::SALOME_Exception );
 
     /*!
@@ -315,8 +388,8 @@ module SMESH
     /*!
      * Evaluates size of prospective mesh on a shape
      */
-    long_array  Evaluate(in SMESH_Mesh        theMesh,
-                         in GEOM::GEOM_Object theSubObject)
+    smIdType_array  Evaluate(in SMESH_Mesh        theMesh,
+                             in GEOM::GEOM_Object theSubObject)
       raises ( SALOME::SALOME_Exception );
 
     /*!
@@ -331,7 +404,7 @@ module SMESH
       raises ( SALOME::SALOME_Exception );
 
     /*!
-     * Return errors of hypotheses definintion
+     * Return errors of hypotheses definition
      * algo_error_array is empty if everything is OK
      */
     algo_error_array GetAlgoState( in SMESH_Mesh        theMesh,
@@ -362,7 +435,7 @@ module SMESH
       raises ( SALOME::SALOME_Exception );
 
     /*!
-     * Return indeces of faces, edges and vertices of given sub-shapes
+     * Return indices of faces, edges and vertices of given sub-shapes
      * within theMainObject
      */
     long_array GetSubShapesId( in GEOM::GEOM_Object theMainObject,
@@ -374,17 +447,17 @@ module SMESH
      * The returned geometrical object, if not nil, is either found in the
      * study or is published by this method with the given name
      */
-    GEOM::GEOM_Object GetGeometryByMeshElement( in SMESH_Mesh  theMesh,
-                                                in long        theElementID,
-                                                in string      theGeomName)
+    GEOM::GEOM_Object GetGeometryByMeshElement( in SMESH_Mesh theMesh,
+                                                in smIdType   theElementID,
+                                                in string     theGeomName)
       raises ( SALOME::SALOME_Exception );
 
     /*!
      * Return geometrical object the given element is built on.
      * The returned geometrical object not published in study by this method.
      */
-    GEOM::GEOM_Object FindGeometryByMeshElement( in SMESH_Mesh  theMesh,
-                                                 in long        theElementID)
+    GEOM::GEOM_Object FindGeometryByMeshElement( in SMESH_Mesh theMesh,
+                                                 in smIdType   theElementID)
       raises ( SALOME::SALOME_Exception );
 
     /*!
@@ -394,10 +467,25 @@ module SMESH
      */
     long GetObjectId(in Object theObject);
 
+    /*!
+     * \brief Get version of MED format being used.
+     */
+    string GetMEDFileVersion();
+
     /*!
      * \brief Get MED version of the file by its name.
      */
-    boolean GetMEDVersion(in string theFileName, out MED_VERSION theVersion);
+    string GetMEDVersion(in string theFileName);
+
+    /*!
+     * \brief Check compatibility of file with MED format being used, for read only.
+     */
+    boolean CheckCompatibility(in string theFileName);
+
+    /*!
+     * \brief Check compatibility of file with MED format being used, for append on write.
+     */
+    boolean CheckWriteCompatibility(in string theFileName);
 
     /*!
      * \brief Get names of meshes defined in file with the specified name.
@@ -406,16 +494,102 @@ module SMESH
 
     /*!
      * \brief Moves objects to the specified position
+     *  \param what objects being moved
+     *  \param where parent object where objects are moved to
+     *  \param row position in the parent object's children list at which objects are moved
      *
      * This function is used in the drag-n-drop functionality.
-     *
-     * \param what objects being moved
-     * \param where parent object where objects are moved to
-     * \param row position in the parent object's children list at which objects are moved
      */
-    void Move( in sobject_list what, 
-              in SALOMEDS::SObject where, 
+    void Move( in sobject_list what,
+              in SALOMEDS::SObject where,
               in long row );
+    /*!
+     * Returns true if algorithm can be used to mesh a given geometry
+     *  \param theAlgoType - the algorithm type
+     *  \param theLibName - a name of the Plug-in library implementing the algorithm
+     *  \param theShapeObject - the geometry to mesh
+     *  \param toCheckAll - if \c True, returns \c True if all shapes are meshable,
+     *         else, returns \c True if at least one shape is meshable
+     */
+    boolean IsApplicable( in string             theAlgoType,
+                          in string             theLibName,
+                          in GEOM::GEOM_Object  theShapeObject,
+                          in boolean            toCheckAll );
+
+
+    /*!
+     * Return indices of elements, which are located inside the sphere
+     *  \param theSource - mesh, sub-mesh or group
+     *  \param theElemType - mesh element type
+     *  \param theX - x coordinate of the center of the sphere
+     *  \param theY - y coordinate of the center of the sphere
+     *  \param theZ - y coordinate of the center of the sphere
+     *  \param theR - radius of the sphere
+     */
+    long_array GetInsideSphere( in SMESH_IDSource theSource,
+                               in ElementType    theElemType,
+                               in double theX, 
+                               in double theY, 
+                               in double theZ,
+                               in double theR );    
+
+    /*!
+     * Return indices of elements, which are located inside the box
+     *  \param theSource - mesh, sub-mesh or group
+     *  \param theElemType - mesh element type
+     *  \param theX1 - x coordinate of the first opposite point
+     *  \param theY1 - y coordinate of the first opposite point
+     *  \param theZ1 - y coordinate of the first opposite point
+     *  \param theX2 - x coordinate of the second opposite point
+     *  \param theY2 - y coordinate of the second opposite point
+     *  \param theZ2 - y coordinate of the second opposite point
+     */
+    long_array GetInsideBox( in SMESH_IDSource theSource,
+                            in ElementType    theElemType,
+                            in double theX1, 
+                            in double theY1, 
+                            in double theZ1,
+                            in double theX2,
+                            in double theY2,
+                            in double theZ2);    
+    /*!
+     * Return indices of elements, which are located inside the box
+     *  \param theSource - mesh, sub-mesh or group
+     *  \param theElemType - mesh element type
+     *  \param theX - x coordinate of the cented of the bottom face
+     *  \param theY - y coordinate of the cented of the bottom face
+     *  \param theZ - y coordinate of the cented of the bottom face
+     *  \param theDX - x coordinate of the cented of the base vector
+     *  \param theDY - y coordinate of the cented of the base vector
+     *  \param theDZ - z coordinate of the cented of the base vector
+     *  \param theH - height of the cylinder
+     *  \param theR - radius of the cylinder
+     */
+    long_array GetInsideCylinder( in SMESH_IDSource theSource,
+                                 in ElementType    theElemType,
+                                 in double theX, 
+                                 in double theY, 
+                                 in double theZ,
+                                 in double theDX,
+                                 in double theDY,
+                                 in double theDZ,
+                                 in double theH,
+                                 in double theR );    
+    /*!
+     * Return indices of elements, which are located inside the geometry
+     *  \param theSource - mesh, sub-mesh or group
+     *  \param theElemType - mesh element type
+     *  \param theGeom - geometrical object
+     *  \param theTolerance - tolerance for selection.
+     */
+    long_array GetInside( in SMESH_IDSource theSource,
+                         in ElementType    theElemType,
+                         in GEOM::GEOM_Object theGeom,
+                         in double theTolerance );    
+
+    MG_ADAPT CreateMG_ADAPT();
+    MG_ADAPT_OBJECT Adaptation(in string adaptType);
+    MG_ADAPT CreateAdaptationHypothesis();
   };
 
 };