Salome HOME
remove adjusting pointers for covariant returns
[modules/smesh.git] / idl / SMESH_Mesh.idl
index a25ba26bc82f01fa78439a63a0c2e5b3410f635b..53579df6a210624d812957228f2e035927f6df08 100644 (file)
@@ -1,27 +1,56 @@
-//=============================================================================
-// File      : SMESH_Mesh.idl
-// Created   : jeu avr 11 15:31:39 CEST 2002
-// Author    : Paul RASCLE, EDF
-// Project   : SALOME
-// Copyright : EDF 2002
-// $Header$
-//=============================================================================
-
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : SMESH_Mesh.idl
+//  Author : Paul RASCLE, EDF
+//  $Header$
 
 #ifndef _SMESH_MESH_IDL_
 #define _SMESH_MESH_IDL_
 
 #include "SALOME_Exception.idl"
-#include "SMESH_Hypothesis.idl"
+#include "SALOME_GenericObj.idl"
+
+module GEOM
+{
+  interface GEOM_Object;
+};
+
+
+module SALOME_MED
+{
+  interface MESH;
+  interface FAMILY;
+};
 
-#include "GEOM_Shape.idl"
-#include "MED.idl"
 
 module SMESH
 {
+  interface SMESH_Hypothesis;
+  typedef sequence<SMESH_Hypothesis> ListOfHypothesis;
+
   typedef sequence<double> double_array ;
   typedef sequence<long> long_array ;
   typedef sequence<string> string_array ;
+  typedef sequence<long_array> array_of_long_array ;
 
   enum log_command
     {
@@ -29,12 +58,18 @@ module SMESH
       ADD_EDGE,
       ADD_TRIANGLE,
       ADD_QUADRANGLE,
+      ADD_POLYGON,
       ADD_TETRAHEDRON,
       ADD_PYRAMID,
       ADD_PRISM,
       ADD_HEXAHEDRON,
+      ADD_POLYHEDRON,
       REMOVE_NODE,
-      REMOVE_ELEMENT
+      REMOVE_ELEMENT,
+      MOVE_NODE,
+      CHANGE_ELEMENT_NODES,
+      CHANGE_POLYHEDRON_NODES,
+      RENUMBER
     };
 
   struct log_block
@@ -44,18 +79,94 @@ module SMESH
     double_array coords;
     long_array indexes;
   };
+
+  struct PointStruct { double x; 
+                      double y; 
+                      double z; } ; 
+  struct DirStruct   { PointStruct PS ; } ;          // analog to Occ Direction
+   
+  struct AxisStruct  { double x;
+                      double y;
+                      double z;
+                      double vx;
+                      double vy;
+                      double vz; } ;
+
   
+  /*!
+   * Enumeration for element type, like in SMDS
+   */
+  enum ElementType
+  {
+    ALL,
+    NODE,
+    EDGE,
+    FACE,
+    VOLUME
+  };
+  
+  /*!
+   * Enumeration for hypothesis status (used by AddHypothesis() and RemoveHypothesis() methods) 
+   */  
+  enum Hypothesis_Status // in the order of severity
+  {
+    HYP_OK,
+    HYP_MISSING,      // algo misses a hypothesis
+    HYP_CONCURENT,    // several applicable hypotheses
+    HYP_BAD_PARAMETER,// hypothesis has a bad parameter value
+    HYP_UNKNOWN_FATAL,//  --- all statuses below should be considered as fatal
+                      //      for Add/RemoveHypothesis operations
+    HYP_INCOMPATIBLE, // hypothesis does not fit algo
+    HYP_NOTCONFORM,   // not conform mesh is produced appling a hypothesis
+    HYP_ALREADY_EXIST,// such hypothesis already exist
+    HYP_BAD_DIM       // bad dimension
+  }; 
+  
+  /*!
+   * Enumeration for DriverMED read status (used by ImportMEDFile() method)
+   */  
+  enum DriverMED_ReadStatus // in the order of severity
+  {
+    DRS_OK,
+    DRS_EMPTY,          // a MED file contains no mesh with the given name
+    DRS_WARN_RENUMBER,  // a MED file has overlapped ranges of element numbers,
+                        // so the numbers from the file are ignored
+    DRS_WARN_SKIP_ELEM, // some elements were skipped due to incorrect file data
+    DRS_FAIL            // general failure (exception etc.)
+  }; 
+
+  /*!
+   * Enumeration for DriverMED (used by Perform() method)
+   */  
+  enum MED_VERSION // in the order of severity
+  {
+    MED_V2_1,
+    MED_V2_2
+  };
+
   typedef sequence<log_block> log_array;
 
+
+  interface SMESH_IDSource
+  {
+    /*!
+     * Returns a sequence of all element IDs
+     */
+    long_array GetIDs();
+  };
+  
+  interface SMESH_GroupBase;
+  interface SMESH_Group;
+  interface SMESH_GroupOnGeom;
   interface SMESH_subMesh;
   interface SMESH_MeshEditor;
-  interface SMESH_Mesh
+  interface SMESH_Mesh : SALOME::GenericObj, SMESH_IDSource
   {
     /*!
      * Associate a Shape to a Mesh created with NewEmpty
      */
 
-//     boolean SetMesh(in GEOM::GEOM_Shape aShape)
+//     boolean SetMesh(in GEOM::GEOM_Object anObject)
 //        raises (SALOME::SALOME_Exception);
 
     /*!
@@ -64,7 +175,7 @@ module SMESH
      * SubMesh will be used instead of SubShape in a next idl version to 
      * adress a specific subMesh...
      */
-    SMESH_subMesh GetElementsOnShape(in GEOM::GEOM_Shape aSubShape)
+    SMESH_subMesh GetSubMesh(in GEOM::GEOM_Object aSubObject, in string name)
       raises (SALOME::SALOME_Exception);
 
     /*!
@@ -73,6 +184,75 @@ module SMESH
 //     SMESH_subMesh NewEmpty()
 //       raises (SALOME::SALOME_Exception);
 
+    /*!
+     * Get geom shape to mesh. A result may be nil
+     */
+    GEOM::GEOM_Object GetShapeToMesh()
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Remove a submesh
+     */
+    void RemoveSubMesh(in SMESH_subMesh aSubMesh)
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Create a group
+     */
+    SMESH_Group CreateGroup( in ElementType elem_type,
+                            in string name )
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Create a group from geometry group
+     */
+    SMESH_GroupOnGeom CreateGroupFromGEOM( in ElementType elem_type,
+                                          in string name,
+                                          in GEOM::GEOM_Object theGeomObject )
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Remove a group
+     */
+    void RemoveGroup(in SMESH_GroupBase aGroup)
+      raises (SALOME::SALOME_Exception);
+
+     /*!
+     *  Remove group with its contents
+     */
+    void RemoveGroupWithContents( in SMESH_GroupBase aGroup )
+        raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Union of two groups
+     *    New group is created. All mesh elements that are 
+     *    present in initial groups are added to the new one
+     */
+    SMESH_Group UnionGroups (in SMESH_GroupBase aGroup1,
+                             in SMESH_GroupBase aGroup2,
+                             in string          name )
+        raises (SALOME::SALOME_Exception);
+
+    /*!
+     *  Intersection of two groups
+     *  New group is created. All mesh elements that are 
+     *  present in both initial groups are added to the new one.
+     */
+    SMESH_Group IntersectGroups (in SMESH_GroupBase aGroup1,
+                                 in SMESH_GroupBase aGroup2,
+                                 in string          name )
+        raises (SALOME::SALOME_Exception);
+
+      /*!
+       *  Cut of two groups
+       *  New group is created. All mesh elements that are present in 
+       *  main group but do not present in tool group are added to the new one
+       */
+      SMESH_Group CutGroups (in SMESH_GroupBase aMainGroup,
+                             in SMESH_GroupBase aToolGroup,
+                             in string          name )
+          raises (SALOME::SALOME_Exception);
+
     /*!
      * Add hypothesis to the mesh, under a particular subShape
      * (or the main shape itself)
@@ -90,7 +270,8 @@ module SMESH
      *   (or one previous hypothesis on the subShape)
      * raises exception if hypothesis has not been created
      */
-    boolean AddHypothesis(in GEOM::GEOM_Shape aSubShape, in SMESH_Hypothesis anHyp)
+    Hypothesis_Status AddHypothesis(in GEOM::GEOM_Object aSubObject,
+                                   in SMESH_Hypothesis anHyp)
       raises (SALOME::SALOME_Exception);
 //     boolean AddHypothesis(in SMESH_subMesh aSubMesh, in SMESH_Hypothesis anHyp)
 //       raises (SALOME::SALOME_Exception);
@@ -99,8 +280,8 @@ module SMESH
     /*!
      * Remove an hypothesis previouly added with AddHypothesis.
      */
-    boolean RemoveHypothesis(in GEOM::GEOM_Shape aSubShape,
-                            in SMESH_Hypothesis anHyp)
+    Hypothesis_Status RemoveHypothesis(in GEOM::GEOM_Object aSubObject,
+                                      in SMESH_Hypothesis anHyp)
       raises (SALOME::SALOME_Exception);
 //     boolean RemoveHypothesis(in SMESH_subMesh aSubMesh,
 //                          in SMESH_Hypothesis anHyp)
@@ -109,7 +290,7 @@ module SMESH
     /*!
      * Get the list of hypothesis added on a subShape
      */
-    ListOfHypothesis GetHypothesisList(in GEOM::GEOM_Shape aSubShape)
+    ListOfHypothesis GetHypothesisList(in GEOM::GEOM_Object aSubObject)
       raises (SALOME::SALOME_Exception);
 //     ListOfHypothesis GetHypothesisList(in SMESH_subMesh aSubMesh)
 //       raises (SALOME::SALOME_Exception);
@@ -146,14 +327,32 @@ module SMESH
        raises (SALOME::SALOME_Exception);
 
     /*!
-     * Export Mesh with DAT and MED Formats
+     * Export Mesh to different MED Formats
+     * @params
+     * - auto_groups : boolean parameter for creating/not creating
+     *   the groups Group_On_All_Nodes, Group_On_All_Faces, ... ;
+     *   the typical use is auto_groups=false.
+     * - theVersion : define the version of format of MED file, that will be created
      */
-    void ExportDAT( in string file )
+    void ExportToMED( in string file, in boolean auto_groups, in MED_VERSION theVersion )
+      raises (SALOME::SALOME_Exception);
+    /*!
+     * Export Mesh to MED_V2_1 MED format
+     * Works, just the same as ExportToMED, with MED_VERSION parameter equal to MED_V2_1.
+     * The method is kept in order to support old functionality
+     */
+    void ExportMED( in string file, in boolean auto_groups )
       raises (SALOME::SALOME_Exception);
-    void ExportMED( in string file )
+
+    /*!
+     * Export Mesh to DAT, UNV and STL Formats
+     */
+    void ExportDAT( in string file )
       raises (SALOME::SALOME_Exception);
     void ExportUNV( in string file )
       raises (SALOME::SALOME_Exception);
+    void ExportSTL( in string file, in boolean isascii )
+      raises (SALOME::SALOME_Exception);
 
     /*!
      * Get MED Mesh
@@ -164,6 +363,9 @@ module SMESH
     long NbNodes()
       raises (SALOME::SALOME_Exception);
 
+    long NbElements()
+      raises (SALOME::SALOME_Exception);
+
     long NbEdges()
       raises (SALOME::SALOME_Exception);
 
@@ -176,6 +378,9 @@ module SMESH
     long NbQuadrangles()
       raises (SALOME::SALOME_Exception);
 
+    long NbPolygons()
+      raises (SALOME::SALOME_Exception);
+
     long NbVolumes()
       raises (SALOME::SALOME_Exception);
 
@@ -185,11 +390,31 @@ module SMESH
     long NbHexas()
       raises (SALOME::SALOME_Exception);
 
+    long NbPyramids()
+      raises (SALOME::SALOME_Exception);
+
+    long NbPrisms()
+      raises (SALOME::SALOME_Exception);
+
+    long NbPolyhedrons()
+      raises (SALOME::SALOME_Exception);
+
     long NbSubMesh()
       raises (SALOME::SALOME_Exception);
+
+    long_array GetElementsId()
+      raises (SALOME::SALOME_Exception);
+
+    long_array GetElementsByType( in ElementType theType )
+      raises (SALOME::SALOME_Exception);
+
+    long_array GetNodesId()
+      raises (SALOME::SALOME_Exception);
+
+    string Dump();
   };
 
-  interface SMESH_subMesh
+  interface SMESH_subMesh : SALOME::GenericObj, SMESH_IDSource
   {
     /*!
      * 
@@ -200,7 +425,7 @@ module SMESH
     /*!
      * 
      */
-    long GetNumberOfNodes()
+    long GetNumberOfNodes( in boolean all )
       raises (SALOME::SALOME_Exception);
 
     /*!
@@ -209,12 +434,24 @@ module SMESH
     long_array GetElementsId()
       raises (SALOME::SALOME_Exception);
 
+    /*!
+     * 
+     */
+    long_array GetElementsByType( in ElementType theType )
+      raises (SALOME::SALOME_Exception);
+
     /*!
      * 
      */
     long_array GetNodesId()
       raises (SALOME::SALOME_Exception);
 
+    /*!
+     * Get geom shape the submesh is dedicated to
+     */
+    GEOM::GEOM_Object GetSubShape()
+      raises (SALOME::SALOME_Exception);
+
     /*!
      * Get SMESH_Mesh which stores nodes coordinates & elements definition
      */
@@ -233,29 +470,238 @@ module SMESH
       raises (SALOME::SALOME_Exception);
   };
   
-  /* 
-   * This interface makes modifications on the Mesh - removing elements and nodes
-   */     
+  /*!
+   * This interface makes modifications on the Mesh - removing elements and nodes etc.
+   */
+  interface NumericalFunctor;
   interface SMESH_MeshEditor {
 
 
-    boolean RemoveElements(in long_array IDsOfElements)
-       raises (SALOME::SALOME_Exception);
+    boolean RemoveElements(in long_array IDsOfElements);
 
-    boolean RemoveNodes(in long_array IDsOfNodes)
-      raises (SALOME::SALOME_Exception);
+    boolean RemoveNodes(in long_array IDsOfNodes);
 
-    boolean AddNode(in double x, in double y, in double z)
-      raises (SALOME::SALOME_Exception);
+    boolean AddNode(in double x, in double y, in double z);
 
-    boolean AddEdge(in long_array IDsOfNodes)
-      raises (SALOME::SALOME_Exception);
+    boolean AddEdge(in long_array IDsOfNodes);
 
-    boolean AddFace(in long_array IDsOfNodes)
-      raises (SALOME::SALOME_Exception);
+    boolean AddFace(in long_array IDsOfNodes);
+
+    boolean AddVolume(in long_array IDsOfNodes);
+
+    //boolean AddPolygonalFace (in long_array IdsOfNodes);
+
+    /*!
+     *  Create volume of many faces, giving nodes for each face.
+     *  \param IdsOfNodes List of node IDs for volume creation face by face.
+     *  \param Quantities List of integer values, Quantities[i]
+     *         gives quantity of nodes in face number i.
+     */
+    boolean AddPolyhedralVolume (in long_array IdsOfNodes,
+                                in long_array Quantities);
+
+    /*!
+     *  Create volume of many faces, giving IDs of existing faces.
+     *  \param IdsOfFaces List of face IDs for volume creation.
+     *  \note The created volume will refer only to nodes
+     *        of the given faces, not to the faces itself.
+     */
+    boolean AddPolyhedralVolumeByFaces (in long_array IdsOfFaces);
+
+    boolean MoveNode(in long NodeID, in double x, in double y, in double z);
+
+    boolean InverseDiag(in long NodeID1, in long NodeID2);
+
+    boolean DeleteDiag(in long NodeID1, in long NodeID2);
+
+    boolean Reorient(in long_array IDsOfElements);
+    
+    boolean ReorientObject(in SMESH_IDSource  theObject);
+
+    boolean TriToQuad(in long_array       IDsOfElements,
+                      in NumericalFunctor Criterion,
+                      in double           MaxAngle);
+    
+    boolean TriToQuadObject(in SMESH_IDSource   theObject,
+                           in NumericalFunctor Criterion,
+                           in double           MaxAngle);
+    
+    boolean QuadToTri(in long_array       IDsOfElements,
+                      in NumericalFunctor Criterion);
+
+    boolean SplitQuad(in long_array IDsOfElements,
+                      in boolean    Diag13);
+
+    boolean SplitQuadObject(in SMESH_IDSource   theObject,
+                           in boolean    Diag13);
+
+    enum Smooth_Method { LAPLACIAN_SMOOTH, CENTROIDAL_SMOOTH };
+
+    boolean Smooth(in long_array    IDsOfElements,
+                   in long_array    IDsOfFixedNodes,
+                   in long          MaxNbOfIterations,
+                   in double        MaxAspectRatio,
+                   in Smooth_Method Method);
+
+    boolean SmoothObject(in SMESH_IDSource  theObject,
+                        in long_array      IDsOfFixedNodes,
+                        in long            MaxNbOfIterations,
+                        in double          MaxAspectRatio,
+                        in Smooth_Method   Method);
+
+    boolean SmoothParametric(in long_array    IDsOfElements,
+                             in long_array    IDsOfFixedNodes,
+                             in long          MaxNbOfIterations,
+                             in double        MaxAspectRatio,
+                             in Smooth_Method Method);
+
+    boolean SmoothParametricObject(in SMESH_IDSource  theObject,
+                                   in long_array      IDsOfFixedNodes,
+                                   in long            MaxNbOfIterations,
+                                   in double          MaxAspectRatio,
+                                   in Smooth_Method   Method);
+
+    void RenumberNodes();
+
+    void RenumberElements();
+
+    void RotationSweep(in long_array       IDsOfElements,
+                       in AxisStruct       Axix,
+                       in double           AngleInRadians,
+                       in long             NbOfSteps,
+                       in double           Tolerance);
+
+    void RotationSweepObject(in SMESH_IDSource  theObject,
+                            in AxisStruct      Axix,
+                            in double          AngleInRadians,
+                            in long            NbOfSteps,
+                            in double          Tolerance);
+                       
+    void ExtrusionSweep(in long_array      IDsOfElements,
+                        in DirStruct       StepVector,
+                        in long            NbOfSteps);
+
+    void ExtrusionSweepObject(in SMESH_IDSource  theObject,
+                             in DirStruct       StepVector,
+                             in long            NbOfSteps);
+
+    void ExtrusionSweepObject1D(in SMESH_IDSource theObject,
+                               in DirStruct      StepVector,
+                               in long           NbOfSteps);
+
+    void ExtrusionSweepObject2D(in SMESH_IDSource theObject,
+                               in DirStruct      StepVector,
+                               in long           NbOfSteps);
+
+    enum Extrusion_Error {
+      EXTR_OK,
+      EXTR_NO_ELEMENTS, 
+      EXTR_PATH_NOT_EDGE,
+      EXTR_BAD_PATH_SHAPE,
+      EXTR_BAD_STARTING_NODE,
+      EXTR_BAD_ANGLES_NUMBER,
+      EXTR_CANT_GET_TANGENT
+      };
+
+    Extrusion_Error ExtrusionAlongPath(in long_array        IDsOfElements,
+                                      in SMESH_Mesh        PathMesh,
+                                      in GEOM::GEOM_Object PathShape,
+                                      in long              NodeStart,
+                                      in boolean           HasAngles,
+                                      in double_array      Angles,
+                                      in boolean           HasRefPoint,
+                                      in PointStruct       RefPoint);
+
+    Extrusion_Error ExtrusionAlongPathObject(in SMESH_IDSource    theObject,
+                                            in SMESH_Mesh        PathMesh,
+                                            in GEOM::GEOM_Object PathShape,
+                                            in long              NodeStart,
+                                            in boolean           HasAngles,
+                                            in double_array      Angles,
+                                            in boolean           HasRefPoint,
+                                            in PointStruct       RefPoint);
+
+    enum MirrorType { POINT, AXIS, PLANE };
+
+    void Mirror (in long_array       IDsOfElements,
+                 in AxisStruct       Mirror,
+                 in MirrorType       theMirrorType,
+                 in boolean          Copy);
+
+    void MirrorObject (in SMESH_IDSource  theObject,
+                      in AxisStruct      Mirror,
+                      in MirrorType      theMirrorType,
+                      in boolean         Copy);
+
+    void Translate (in long_array      IDsOfElements,
+                    in DirStruct       Vector,
+                    in boolean         Copy);
+
+    void TranslateObject (in SMESH_IDSource  theObject,
+                         in DirStruct       Vector,
+                         in boolean         Copy);
+    
+    void Rotate (in long_array       IDsOfElements,
+                 in AxisStruct       Axis,
+                 in double           AngleInRadians,
+                 in boolean          Copy);
+
+    void RotateObject (in SMESH_IDSource  theObject,
+                      in AxisStruct      Axis,
+                      in double          AngleInRadians,
+                      in boolean         Copy);
+    
+    void FindCoincidentNodes (in  double              Tolerance,
+                              out array_of_long_array GroupsOfNodes);
+
+    void MergeNodes (in array_of_long_array GroupsOfNodes);
+
+    void MergeEqualElements();
+
+    enum Sew_Error {
+      SEW_OK,
+      SEW_BORDER1_NOT_FOUND,
+      SEW_BORDER2_NOT_FOUND,
+      SEW_BOTH_BORDERS_NOT_FOUND,
+      SEW_BAD_SIDE_NODES,
+      SEW_VOLUMES_TO_SPLIT,
+      // for SewSideElements() only:
+      SEW_DIFF_NB_OF_ELEMENTS,
+      SEW_TOPO_DIFF_SETS_OF_ELEMENTS,
+      SEW_BAD_SIDE1_NODES,
+      SEW_BAD_SIDE2_NODES
+      };
+
+    Sew_Error SewFreeBorders (in long FirstNodeID1,
+                              in long SecondNodeID1,
+                              in long LastNodeID1,
+                              in long FirstNodeID2,
+                              in long SecondNodeID2,
+                              in long LastNodeID2,
+                             in boolean CreatePolygons,
+                             in boolean CreatePolyedrs);
+
+    Sew_Error SewConformFreeBorders (in long FirstNodeID1,
+                                     in long SecondNodeID1,
+                                     in long LastNodeID1,
+                                     in long FirstNodeID2,
+                                     in long SecondNodeID2);
+
+    Sew_Error SewBorderToSide (in long FirstNodeIDOnFreeBorder,
+                               in long SecondNodeIDOnFreeBorder,
+                               in long LastNodeIDOnFreeBorder,
+                               in long FirstNodeIDOnSide,
+                               in long LastNodeIDOnSide,
+                              in boolean CreatePolygons,
+                              in boolean CreatePolyedrs);
+
+    Sew_Error SewSideElements (in long_array IDsOfSide1Elements,
+                               in long_array IDsOfSide2Elements,
+                               in long       NodeID1OfSide1ToMerge,
+                               in long       NodeID1OfSide2ToMerge,
+                               in long       NodeID2OfSide1ToMerge,
+                               in long       NodeID2OfSide2ToMerge);
 
-    boolean AddVolume(in long_array IDsOfNodes)
-      raises (SALOME::SALOME_Exception);
   };
 };