Salome HOME
Merge remote branch 'origin/V8_5_asterstudy'
[modules/smesh.git] / src / SMESH_I / SMESH_Mesh_i.hxx
index 65de305a527b66d98b27ef84936df64db758bac2..867949a9d1df28f1f6741a16d6a9e75a96d83ab9 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2014  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2016  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
@@ -31,6 +31,7 @@
 #include "SMESH_Hypothesis.hxx"
 #include "SMESH_Mesh.hxx"
 #include "SMESH_subMesh.hxx"
+#include "SMDS_ElemIterator.hxx"
 
 #include <SALOME_GenericObj_i.hh>
 #include <SALOMEconfig.h>
@@ -47,6 +48,8 @@ class SMESH_GroupBase_i;
 class SMESH_subMesh_i;
 class SMESH_PreMeshInfo;
 class SMESH_MeshEditor_i;
+class DriverMED_W_Field;
+class SMESHDS_Mesh;
 
 class SMESH_I_EXPORT SMESH_Mesh_i:
   public virtual POA_SMESH::SMESH_Mesh,
@@ -56,8 +59,7 @@ class SMESH_I_EXPORT SMESH_Mesh_i:
   SMESH_Mesh_i(const SMESH_Mesh_i&);
 public:
   SMESH_Mesh_i( PortableServer::POA_ptr thePOA,
-                SMESH_Gen_i*            myGen_i,
-                CORBA::Long             studyId );
+                SMESH_Gen_i*            myGen_i );
 
   virtual ~SMESH_Mesh_i();
 
@@ -84,21 +86,22 @@ public:
   void ClearSubMesh(CORBA::Long ShapeID)
     throw (SALOME::SALOME_Exception);
 
-  SMESH::Hypothesis_Status AddHypothesis(GEOM::GEOM_Object_ptr aSubShapeObject,
-                                         SMESH::SMESH_Hypothesis_ptr anHyp)
+  SMESH::Hypothesis_Status AddHypothesis(GEOM::GEOM_Object_ptr       aSubShape,
+                                         SMESH::SMESH_Hypothesis_ptr anHyp,
+                                         CORBA::String_out           anErrorText)
     throw (SALOME::SALOME_Exception);
 
-  SMESH::Hypothesis_Status RemoveHypothesis(GEOM::GEOM_Object_ptr aSubShapeObject,
+  SMESH::Hypothesis_Status RemoveHypothesis(GEOM::GEOM_Object_ptr       aSubShape,
                                             SMESH::SMESH_Hypothesis_ptr anHyp)
     throw (SALOME::SALOME_Exception);
 
-  SMESH::ListOfHypothesis* GetHypothesisList(GEOM::GEOM_Object_ptr aSubShapeObject)
+  SMESH::ListOfHypothesis* GetHypothesisList(GEOM::GEOM_Object_ptr aSubShape)
     throw (SALOME::SALOME_Exception);
 
   SMESH::submesh_array* GetSubMeshes()
     throw (SALOME::SALOME_Exception);
 
-  SMESH::SMESH_subMesh_ptr GetSubMesh(GEOM::GEOM_Object_ptr aSubShapeObject, const char* theName)
+  SMESH::SMESH_subMesh_ptr GetSubMesh(GEOM::GEOM_Object_ptr aSubShape, const char* theName)
     throw (SALOME::SALOME_Exception);
 
   void RemoveSubMesh( SMESH::SMESH_subMesh_ptr theSubMesh )
@@ -157,9 +160,11 @@ public:
                                           const char* theName )
     throw (SALOME::SALOME_Exception);
 
-  SMESH::SMESH_Group_ptr CreateDimGroup( const SMESH::ListOfGroups& theGroups,
-                                         SMESH::ElementType theElemType,
-                                         const char* theName )
+  SMESH::SMESH_Group_ptr CreateDimGroup( const SMESH::ListOfIDSources& theGroups,
+                                         SMESH::ElementType            theElemType,
+                                         const char*                   theName,
+                                         SMESH::NB_COMMON_NODES_ENUM   theNbCommonNodes,
+                                         CORBA::Boolean                theUnderlyingOnly )
     throw (SALOME::SALOME_Exception);
 
 
@@ -179,8 +184,6 @@ public:
 
   CORBA::Long GetId() throw (SALOME::SALOME_Exception);
 
-  CORBA::Long GetStudyId() throw (SALOME::SALOME_Exception);
-
   // --- C++ interface
 
   void SetImpl(::SMESH_Mesh* impl);
@@ -225,18 +228,13 @@ public:
   /*!
    * Return string representation of a MED file version comprising nbDigits
    */
-  char* GetVersionString(SMESH::MED_VERSION version, CORBA::Short nbDigits);
+  char* GetVersionString(CORBA::Long minor, CORBA::Short nbDigits);
 
-  void ExportToMEDX( const char*        file,
-                     CORBA::Boolean     auto_groups,
-                     SMESH::MED_VERSION version,
-                     CORBA::Boolean     overwrite,
-                     CORBA::Boolean     autoDimension=true) throw (SALOME::SALOME_Exception);
-  void ExportToMED ( const char*        file,
-                     CORBA::Boolean     auto_groups,
-                     SMESH::MED_VERSION version ) throw (SALOME::SALOME_Exception);
-  void ExportMED   ( const char*        file,
-                     CORBA::Boolean     auto_groups ) throw (SALOME::SALOME_Exception);
+  void ExportMED( const char*        file,
+                  CORBA::Boolean     auto_groups,
+                  CORBA::Long        minor,
+                  CORBA::Boolean     overwrite,
+                  CORBA::Boolean     autoDimension = true) throw (SALOME::SALOME_Exception);
 
   void ExportSAUV( const char* file, CORBA::Boolean auto_groups ) throw (SALOME::SALOME_Exception);
 
@@ -245,7 +243,8 @@ public:
   void ExportSTL( const char* file, bool isascii ) throw (SALOME::SALOME_Exception);
   void ExportCGNS(SMESH::SMESH_IDSource_ptr meshPart,
                   const char*               file,
-                  CORBA::Boolean            overwrite) throw (SALOME::SALOME_Exception);
+                  CORBA::Boolean            overwrite,
+                  CORBA::Boolean            groupElemsByType) throw (SALOME::SALOME_Exception);
   void ExportGMF(SMESH::SMESH_IDSource_ptr meshPart,
                  const char*               file,
                  CORBA::Boolean            withRequiredGroups) throw (SALOME::SALOME_Exception);
@@ -253,9 +252,11 @@ public:
   void ExportPartToMED(SMESH::SMESH_IDSource_ptr meshPart,
                        const char*               file,
                        CORBA::Boolean            auto_groups,
-                       SMESH::MED_VERSION        version,
+                       CORBA::Long               minor,
                        CORBA::Boolean            overwrite,
-                       CORBA::Boolean            autoDim=true) throw (SALOME::SALOME_Exception);
+                       CORBA::Boolean            autoDim,
+                       const GEOM::ListOfFields& fields,
+                       const char*               geomAssocFields) throw (SALOME::SALOME_Exception);
   void ExportPartToDAT(SMESH::SMESH_IDSource_ptr meshPart,
                        const char*               file) throw (SALOME::SALOME_Exception);
   void ExportPartToUNV(SMESH::SMESH_IDSource_ptr meshPart,
@@ -311,6 +312,9 @@ public:
   CORBA::Long NbPolygons()
     throw (SALOME::SALOME_Exception);
 
+  CORBA::Long NbPolygonsOfOrder(SMESH::ElementOrder order = SMESH::ORDER_ANY)
+    throw (SALOME::SALOME_Exception);
+
   CORBA::Long NbVolumes()
     throw (SALOME::SALOME_Exception);
 
@@ -398,12 +402,16 @@ public:
                                                      const char* theGroupName)
     throw (SALOME::SALOME_Exception);
 
+  // ===================================================
   // Internal methods not available through CORBA
   // They are called by corresponding interface methods
-  SMESH_Hypothesis::Hypothesis_Status addHypothesis(GEOM::GEOM_Object_ptr aSubShapeObject,
-                                                    SMESH::SMESH_Hypothesis_ptr anHyp);
+  // ===================================================
 
-  SMESH_Hypothesis::Hypothesis_Status removeHypothesis(GEOM::GEOM_Object_ptr aSubShapeObject,
+  SMESH_Hypothesis::Hypothesis_Status addHypothesis(GEOM::GEOM_Object_ptr       aSubShape,
+                                                    SMESH::SMESH_Hypothesis_ptr anHyp,
+                                                    std::string*                anErrorText=0);
+
+  SMESH_Hypothesis::Hypothesis_Status removeHypothesis(GEOM::GEOM_Object_ptr aSubShape,
                                                        SMESH::SMESH_Hypothesis_ptr anHyp);
 
   static SMESH::Hypothesis_Status
@@ -436,10 +444,16 @@ public:
 
   void checkMeshLoaded();
 
+  /*!
+   * \brief Update data if geometry changes
+   *
+   * Issue 0022501
+   */
+  void CheckGeomModif();
   /*!
    * \brief Update hypotheses assigned to geom groups if the latter change
    *
-   * NPAL16168: "geometrical group edition from a submesh don't modifiy mesh computation"
+   * NPAL16168: "geometrical group edition from a submesh don't modify mesh computation"
    */
   void CheckGeomGroupModif();
 
@@ -450,6 +464,16 @@ 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 groups cantained in _mapGroups by their IDs
    */
@@ -518,8 +542,8 @@ public:
    * Returns true if given node is medium node
    * in one of quadratic elements
    */
-  CORBA::Boolean IsMediumNodeOfAnyElem(CORBA::Long idn,
-                                       SMESH::ElementType theElemType);
+  CORBA::Boolean IsMediumNodeOfAnyElem(CORBA::Long        idn,
+                                       SMESH::ElementType elemType);
 
   /*!
    * Returns number of edges for given element
@@ -545,6 +569,12 @@ public:
    */
   CORBA::Long FindElementByNodes(const SMESH::long_array& nodes);
 
+  /*!
+   * Return elements including all given nodes.
+   */
+  SMESH::long_array* GetElementsByNodes(const SMESH::long_array& nodes,
+                                        SMESH::ElementType       elemType);
+
   /*!
    * Returns true if given element is polygon
    */
@@ -570,6 +600,12 @@ public:
    */
   virtual SMESH::MedFileInfo* GetMEDFileInfo();
 
+  /*!
+   * Persistence of file info
+   */
+  std::string FileInfoToString();
+  void FileInfoFromString(const std::string& info);
+
   /*!
    * Sets list of notebook variables used for Mesh operations separated by ":" symbol
    */
@@ -638,6 +674,11 @@ public:
    * happen if mesh data is not yet fully loaded from the file of study.
    */
   bool IsMeshInfoCorrect();
+  /*!
+   * Returns mesh unstructed grid information.
+   */
+  virtual SALOMEDS::TMPFile* GetVtkUgStream();
+
 
   std::map<int, SMESH_subMesh_i*> _mapSubMesh_i; //NRI
   std::map<int, ::SMESH_subMesh*> _mapSubMesh;   //NRI
@@ -650,6 +691,13 @@ private:
    */
   void checkGroupNames();
 
+  /*
+   * Write GEOM fields to MED file
+   */
+  void exportMEDFields( DriverMED_W_Field &       writer,
+                        SMESHDS_Mesh*             meshDS,
+                        const GEOM::ListOfFields& fields,
+                        const char*               geomAssocFields);
   /*!
    * Convert submesh ids into submesh interfaces
    */
@@ -668,7 +716,6 @@ private:
   ::SMESH_Mesh* _impl;        // :: force no namespace here
   SMESH_Gen_i*  _gen_i;
   int           _id;          // id given by creator (unique within the creator instance)
-  int           _studyId;
   std::map<int, SMESH::SMESH_subMesh_ptr>    _mapSubMeshIor;
   std::map<int, SMESH::SMESH_GroupBase_ptr>  _mapGroups;
   std::map<int, SMESH::SMESH_Hypothesis_ptr> _mapHypo;
@@ -691,6 +738,7 @@ private:
     CORBA::Object_var _smeshObject; // SMESH object depending on GEOM group
   };
   std::list<TGeomGroupData> _geomGroupData;
+  int                       _mainShapeTick; // to track modifications of the meshed shape
 
   /*!
    * Remember GEOM group data