Salome HOME
Merge branch 'OCCT780'
[modules/smesh.git] / src / SMESH_I / SMESH_Mesh_i.hxx
index 56edeee76b2d030a91b718027fc92ab40f8bd897..131993a40c8ddbac76c5e21e36149ebb2bd2d9c8 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -212,10 +212,11 @@ public:
                   CORBA::Boolean     overwrite,
                   CORBA::Boolean     autoDimension = true);
 
-  void ExportSAUV( const char* file, CORBA::Boolean auto_groups );
+  CORBA::LongLong ExportMEDCoupling(CORBA::Boolean auto_groups,
+                                    CORBA::Boolean autoDimension = true);
 
-  void ExportDAT( const char* file );
-  void ExportUNV( const char* file );
+  void ExportDAT( const char* file, const CORBA::Boolean renumber );
+  void ExportUNV( const char* file, const CORBA::Boolean renumber  );
   void ExportSTL( const char* file, bool isascii );
   void ExportCGNS(SMESH::SMESH_IDSource_ptr meshPart,
                   const char*               file,
@@ -225,6 +226,17 @@ public:
                  const char*               file,
                  CORBA::Boolean            withRequiredGroups);
 
+
+  template<class SPECLS>
+    void ExportPartToMEDCommon(SPECLS&                   speCls,
+                               SMESH::SMESH_IDSource_ptr meshPart,
+                               CORBA::Boolean            auto_groups,
+                               CORBA::Boolean            autoDim,
+                               const GEOM::ListOfFields& fields,
+                               const char*               geomAssocFields,
+                               CORBA::Double             ZTolerance,
+                               CORBA::Boolean            saveNumbers );
+
   void ExportPartToMED(SMESH::SMESH_IDSource_ptr meshPart,
                        const char*               file,
                        CORBA::Boolean            auto_groups,
@@ -233,100 +245,116 @@ public:
                        CORBA::Boolean            autoDim,
                        const GEOM::ListOfFields& fields,
                        const char*               geomAssocFields,
-                       CORBA::Double             ZTolerance);
+                       CORBA::Double             ZTolerance,
+                       CORBA::Boolean            saveNumbers );
+
+  void ExportPartToMESHIO(SMESH::SMESH_IDSource_ptr meshPart,
+                          const char*               file,
+                          const char*               selectedFilter);
+
+  CORBA::LongLong ExportPartToMEDCoupling(SMESH::SMESH_IDSource_ptr meshPart,
+                                          CORBA::Boolean            auto_groups,
+                                          CORBA::Boolean            autoDim,
+                                          const GEOM::ListOfFields& fields,
+                                          const char*               geomAssocFields,
+                                          CORBA::Double             ZTolerance,
+                                          CORBA::Boolean            saveNumbers);
+
   void ExportPartToDAT(SMESH::SMESH_IDSource_ptr meshPart,
-                       const char*               file);
+                       const char*               file,
+                       CORBA::Boolean            renumber);
   void ExportPartToUNV(SMESH::SMESH_IDSource_ptr meshPart,
-                       const char*               file);
+                       const char*               file,
+                       CORBA::Boolean            renumber);
   void ExportPartToSTL(SMESH::SMESH_IDSource_ptr meshPart,
                        const char*               file,
                        CORBA::Boolean            isascii);
 
   CORBA::Double GetComputeProgress();
 
-  CORBA::Long NbNodes();
+  SMESH::smIdType NbNodes();
 
-  CORBA::Long NbElements();
+  SMESH::smIdType NbElements();
 
-  CORBA::Long Nb0DElements();
+  SMESH::smIdType Nb0DElements();
 
-  CORBA::Long NbBalls();
+  SMESH::smIdType NbBalls();
 
-  CORBA::Long NbEdges();
+  SMESH::smIdType NbEdges();
 
-  CORBA::Long NbEdgesOfOrder(SMESH::ElementOrder order);
+  SMESH::smIdType NbEdgesOfOrder(SMESH::ElementOrder order);
 
-  CORBA::Long NbFaces();
+  SMESH::smIdType NbFaces();
 
-  CORBA::Long NbFacesOfOrder(SMESH::ElementOrder order);
+  SMESH::smIdType NbFacesOfOrder(SMESH::ElementOrder order);
 
-  CORBA::Long NbTriangles();
+  SMESH::smIdType NbTriangles();
 
-  CORBA::Long NbTrianglesOfOrder(SMESH::ElementOrder order);
+  SMESH::smIdType NbTrianglesOfOrder(SMESH::ElementOrder order);
 
-  CORBA::Long NbBiQuadTriangles();
+  SMESH::smIdType NbBiQuadTriangles();
 
-  CORBA::Long NbQuadrangles();
+  SMESH::smIdType NbQuadrangles();
 
-  CORBA::Long NbQuadranglesOfOrder(SMESH::ElementOrder order);
+  SMESH::smIdType NbQuadranglesOfOrder(SMESH::ElementOrder order);
 
-  CORBA::Long NbBiQuadQuadrangles();
+  SMESH::smIdType NbBiQuadQuadrangles();
 
-  CORBA::Long NbPolygons();
+  SMESH::smIdType NbPolygons();
 
-  CORBA::Long NbPolygonsOfOrder(SMESH::ElementOrder order = SMESH::ORDER_ANY);
+  SMESH::smIdType NbPolygonsOfOrder(SMESH::ElementOrder order = SMESH::ORDER_ANY);
 
-  CORBA::Long NbVolumes();
+  SMESH::smIdType NbVolumes();
 
-  CORBA::Long NbVolumesOfOrder(SMESH::ElementOrder order);
+  SMESH::smIdType NbVolumesOfOrder(SMESH::ElementOrder order);
 
-  CORBA::Long NbTetras();
+  SMESH::smIdType NbTetras();
 
-  CORBA::Long NbTetrasOfOrder(SMESH::ElementOrder order);
+  SMESH::smIdType NbTetrasOfOrder(SMESH::ElementOrder order);
 
-  CORBA::Long NbHexas();
+  SMESH::smIdType NbHexas();
 
-  CORBA::Long NbHexasOfOrder(SMESH::ElementOrder order);
+  SMESH::smIdType NbHexasOfOrder(SMESH::ElementOrder order);
 
-  CORBA::Long NbTriQuadraticHexas();
+  SMESH::smIdType NbTriQuadraticHexas();
 
-  CORBA::Long NbPyramids();
+  SMESH::smIdType NbPyramids();
 
-  CORBA::Long NbPyramidsOfOrder(SMESH::ElementOrder order);
+  SMESH::smIdType NbPyramidsOfOrder(SMESH::ElementOrder order);
 
-  CORBA::Long NbPrisms();
+  SMESH::smIdType NbPrisms();
 
-  CORBA::Long NbPrismsOfOrder(SMESH::ElementOrder order);
+  SMESH::smIdType NbPrismsOfOrder(SMESH::ElementOrder order);
 
-  CORBA::Long NbHexagonalPrisms();
+  SMESH::smIdType NbHexagonalPrisms();
 
-  CORBA::Long NbPolyhedrons();
+  SMESH::smIdType NbPolyhedrons();
 
-  CORBA::Long NbSubMesh();
+  SMESH::smIdType NbSubMesh();
 
-  SMESH::long_array* GetElementsId();
+  SMESH::smIdType_array* GetElementsId();
 
-  SMESH::long_array* GetElementsByType( SMESH::ElementType theElemType );
+  SMESH::smIdType_array* GetElementsByType( SMESH::ElementType theElemType );
 
-  SMESH::long_array* GetNodesId();
+  SMESH::smIdType_array* GetNodesId();
 
-  SMESH::ElementType GetElementType( CORBA::Long id, bool iselem );
+  SMESH::ElementType GetElementType( SMESH::smIdType id, bool iselem );
 
-  SMESH::EntityType GetElementGeomType( CORBA::Long id );
+  SMESH::EntityType GetElementGeomType( SMESH::smIdType id );
 
-  SMESH::GeometryType GetElementShape( CORBA::Long id );
+  SMESH::GeometryType GetElementShape( SMESH::smIdType id );
 
   /*!
    * Returns ID of elements for given submesh
    */
-  SMESH::long_array* GetSubMeshElementsId(CORBA::Long ShapeID);
+  SMESH::smIdType_array* GetSubMeshElementsId(CORBA::Long ShapeID);
 
   /*!
    * Returns ID of nodes for given submesh
    * If param all==true - returns all nodes, else -
    * returns only nodes on shapes.
    */
-  SMESH::long_array* GetSubMeshNodesId(CORBA::Long ShapeID, CORBA::Boolean all);
+  SMESH::smIdType_array* GetSubMeshNodesId(CORBA::Long ShapeID, CORBA::Boolean all);
 
   /*!
    * Returns type of elements for given submesh
@@ -400,15 +428,15 @@ public:
    */
   void CreateGroupServants();
 
-  /*!
-   * \brief Return true if all sub-meshes are computed OK - to update an icon
-   */
-  bool IsComputedOK();
 
 
   // ====================================
   // SMESH_Mesh interface (continuation)
   // ====================================
+  /*!
+   * \brief Return true if all sub-meshes are computed OK - to update an icon
+   */
+  CORBA::Boolean IsComputedOK();
 
   /*!
    * \brief Return groups cantained in _mapGroups by their IDs
@@ -419,82 +447,82 @@ public:
    * Get XYZ coordinates of node as list of double
    * If there is not node for given ID - returns empty list
    */
-  SMESH::double_array* GetNodeXYZ(CORBA::Long id);
+  SMESH::double_array* GetNodeXYZ(SMESH::smIdType id);
 
   /*!
    * For given node returns list of IDs of inverse elements
    * If there is not node for given ID - returns empty list
    */
-  SMESH::long_array* GetNodeInverseElements(CORBA::Long        id,
+  SMESH::smIdType_array* GetNodeInverseElements(SMESH::smIdType    id,
                                             SMESH::ElementType elemType);
 
   /*!
    * \brief Return position of a node on shape
    */
-  SMESH::NodePosition* GetNodePosition(CORBA::Long NodeID);
+  SMESH::NodePosition* GetNodePosition(SMESH::smIdType NodeID);
 
   /*!
    * \brief Return position of an element on shape
    */
-  SMESH::ElementPosition GetElementPosition(CORBA::Long ElemID);
+  SMESH::ElementPosition GetElementPosition(SMESH::smIdType ElemID);
 
   /*!
    * If given element is node returns IDs of shape from position
    * If there is not node for given ID - returns -1
    */
-  CORBA::Long GetShapeID(CORBA::Long id);
+  CORBA::Long GetShapeID(SMESH::smIdType id);
 
   /*!
    * For given element returns ID of result shape after
    * ::FindShape() from SMESH_MeshEditor
    * If there is not element for given ID - returns -1
    */
-  CORBA::Long GetShapeIDForElem(CORBA::Long id);
+  CORBA::Long GetShapeIDForElem(SMESH::smIdType id);
 
   /*!
    * Returns number of nodes for given element
    * If there is not element for given ID - returns -1
    */
-  CORBA::Long GetElemNbNodes(CORBA::Long id);
+  CORBA::Short GetElemNbNodes(SMESH::smIdType id);
 
   /*!
    * Returns IDs of nodes of given element
    */
-  SMESH::long_array* GetElemNodes(CORBA::Long id);
+  SMESH::smIdType_array* GetElemNodes(SMESH::smIdType id);
 
   /*!
    * Returns ID of node by given index for given element
    * If there is not element for given ID - returns -1
    * If there is not node for given index - returns -2
    */
-  CORBA::Long GetElemNode(CORBA::Long id, CORBA::Long index);
+  SMESH::smIdType GetElemNode(SMESH::smIdType id, CORBA::Short index);
 
   /*!
    * Returns true if given node is medium node
    * in given quadratic element
    */
-  CORBA::Boolean IsMediumNode(CORBA::Long ide, CORBA::Long idn);
+  CORBA::Boolean IsMediumNode(SMESH::smIdType ide, SMESH::smIdType idn);
 
   /*!
    * Returns true if given node is medium node
    * in one of quadratic elements
    */
-  CORBA::Boolean IsMediumNodeOfAnyElem(CORBA::Long        idn,
+  CORBA::Boolean IsMediumNodeOfAnyElem(SMESH::smIdType    idn,
                                        SMESH::ElementType elemType);
 
   /*!
    * Returns number of edges for given element
    */
-  CORBA::Long ElemNbEdges(CORBA::Long id);
+  CORBA::Long ElemNbEdges(SMESH::smIdType id);
 
   /*!
    * Returns number of faces for given element
    */
-  CORBA::Long ElemNbFaces(CORBA::Long id);
+  CORBA::Long ElemNbFaces(SMESH::smIdType id);
   /*!
    * Returns nodes of given face (counted from zero) for given element.
    */
-  SMESH::long_array* GetElemFaceNodes(CORBA::Long elemId, CORBA::Short faceIndex);
+  SMESH::smIdType_array* GetElemFaceNodes(SMESH::smIdType elemId, CORBA::Short faceIndex);
 
   /*!
    * Returns three components of normal of given mesh face (or an empty array in KO case)
@@ -504,33 +532,33 @@ public:
   /*!
    * Returns an element based on all given nodes.
    */
-  CORBA::Long FindElementByNodes(const SMESH::long_array& nodes);
+  SMESH::smIdType FindElementByNodes(const SMESH::smIdType_array& nodes);
 
   /*!
    * Return elements including all given nodes.
    */
-  SMESH::long_array* GetElementsByNodes(const SMESH::long_array& nodes,
+  SMESH::smIdType_array* GetElementsByNodes(const SMESH::smIdType_array& nodes,
                                         SMESH::ElementType       elemType);
 
   /*!
    * Returns true if given element is polygon
    */
-  CORBA::Boolean IsPoly(CORBA::Long id);
+  CORBA::Boolean IsPoly(SMESH::smIdType id);
 
   /*!
    * Returns true if given element is quadratic
    */
-  CORBA::Boolean IsQuadratic(CORBA::Long id);
+  CORBA::Boolean IsQuadratic(SMESH::smIdType id);
 
   /*!
    * Returns diameter of ball discrete element or zero in case of an invalid \a id
    */
-  CORBA::Double GetBallDiameter(CORBA::Long id);
+  CORBA::Double GetBallDiameter(SMESH::smIdType id);
 
   /*!
    * Returns bary center for given element
    */
-  SMESH::double_array* BaryCenter(CORBA::Long id);
+  SMESH::double_array* BaryCenter(SMESH::smIdType id);
 
   /*!
    * Returns information about imported MED file
@@ -547,7 +575,7 @@ public:
    * Persistence of geometry tick
    */
   int& MainShapeTick() { return _mainShapeTick; }
-  
+
 
   /*!
    * Sets list of notebook variables used for Mesh operations separated by ":" symbol
@@ -582,7 +610,7 @@ public:
    * Collect statistic of mesh elements given by iterator
    */
   static void CollectMeshInfo(const SMDS_ElemIteratorPtr theItr,
-                              SMESH::long_array&         theInfo);
+                              SMESH::smIdType_array&     theInfo);
   /*!
    * \brief Return iterator on elements of given type in given object
    */
@@ -593,17 +621,17 @@ public:
   // SMESH_IDSource interface
   // =========================
 
-  virtual SMESH::long_array* GetIDs();
+  virtual SMESH::smIdType_array* GetIDs();
   /*!
    * Returns number of mesh elements of each \a EntityType
    * Result array of number of elements per \a EntityType
    * Inherited from SMESH_IDSource
    */
-  virtual SMESH::long_array* GetMeshInfo();
+  virtual SMESH::smIdType_array* GetMeshInfo();
   /*!
    * Returns number of mesh elements of each \a ElementType
    */
-  virtual SMESH::long_array* GetNbElementsByType();
+  virtual SMESH::smIdType_array* GetNbElementsByType();
   /*!
    * Returns types of elements it contains
    */
@@ -626,14 +654,9 @@ public:
   std::map<int, SMESH_subMesh_i*> _mapSubMesh_i; //NRI
   std::map<int, ::SMESH_subMesh*> _mapSubMesh;   //NRI
 
-private:
+public:
+  std::string generateMeshName( );
   std::string prepareMeshNameAndGroups( const char* file, CORBA::Boolean overwrite );
-
-  /*!
-   * Check and correct names of mesh groups
-   */
-  void checkGroupNames();
-
   /*
    * Write GEOM fields to MED file
    */
@@ -641,6 +664,12 @@ private:
                         SMESHDS_Mesh*             meshDS,
                         const GEOM::ListOfFields& fields,
                         const char*               geomAssocFields);
+private:
+  /*!
+   * Check and correct names of mesh groups
+   */
+  void checkGroupNames();
+
   /*!
    * Convert submesh ids into submesh interfaces
    */
@@ -653,10 +682,11 @@ private:
    */
   TListOfListOfInt findConcurrentSubMeshes();
 
+ protected:
+  ::SMESH_Mesh* _impl;        // :: force no namespace here
  private:
 
   static int    _idGenerator;
-  ::SMESH_Mesh* _impl;        // :: force no namespace here
   SMESH_Gen_i*  _gen_i;
   int           _id;          // id given by creator (unique within the creator instance)
   int           _nbInvalidHypos;