Salome HOME
Merge branch 'occ/shaper2smesh'
[modules/smesh.git] / src / SMESH_I / SMESH_Gen_i.hxx
index 53921ba6461aeb569e55cf72ae794b9fad957de6..b288eec86d3784c4dd7dbff3d78cfdd83b57b818 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2019  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
@@ -49,6 +49,7 @@
 #include <TCollection_AsciiString.hxx>
 #include <Resource_DataMapOfAsciiStringAsciiString.hxx>
 #include <TColStd_HSequenceOfAsciiString.hxx>
+#include <NCollection_DataMap.hxx>
 
 #include <map>
 #include <sstream>
@@ -57,76 +58,36 @@ class SMESH_Mesh_i;
 class SALOME_LifeCycleCORBA;
 
 // ===========================================================
-// Study context - stores study-connected objects references
+// Study context - store study-connected objects references
 // ==========================================================
 class SMESH_I_EXPORT StudyContext
 {
+  typedef NCollection_DataMap< int, std::string > TInt2StringMap;
+  typedef NCollection_DataMap< int, int >         TInt2IntMap;
 public:
   // constructor
   StudyContext() {}
-  // destructor
-  ~StudyContext()
-  {
-    mapIdToIOR.clear();
-    mapIdToId.clear();
-  }
   // register object in the internal map and return its id
-  int addObject( std::string theIOR )
-  {
-    int nextId = getNextId();
-    mapIdToIOR[ nextId ]  = theIOR;
-    return nextId;
-  }
+  int         addObject( const std::string& theIOR );
   // find the object id in the internal map by the IOR
-  int findId( std::string theIOR )
-  {
-    std::map<int, std::string>::iterator imap;
-    for ( imap = mapIdToIOR.begin(); imap != mapIdToIOR.end(); ++imap ) {
-      if ( imap->second == theIOR )
-        return imap->first;
-    }
-    return 0;
-  }
+  int         findId( const std::string& theIOR );
   // get object's IOR by id
-  std::string getIORbyId( const int theId )
-  {
-    if ( mapIdToIOR.find( theId ) != mapIdToIOR.end() )
-      return mapIdToIOR[ theId ];
-    return std::string( "" );
-  }
+  std::string getIORbyId( const int theId );
   // get object's IOR by old id
-  std::string getIORbyOldId( const int theOldId )
-  {
-    if ( mapIdToId.find( theOldId ) != mapIdToId.end() )
-      return getIORbyId( mapIdToId[ theOldId ] );
-    return std::string( "" );
-  }
+  std::string getIORbyOldId( const int theOldId );
   // maps old object id to the new one (used when restoring data)
-  void mapOldToNew( const int oldId, const int newId ) {
-    mapIdToId[ oldId ] = newId;
-  }
+  void        mapOldToNew( const int oldId, const int newId );
   // get old id by a new one
-  int getOldId( const int newId ) {
-    std::map<int, int>::iterator imap;
-    for ( imap = mapIdToId.begin(); imap != mapIdToId.end(); ++imap ) {
-      if ( imap->second == newId )
-        return imap->first;
-    }
-    return 0;
-  }
+  int         getOldId( const int newId );
+  // clear data
+  void        Clear();
 
 private:
   // get next free object identifier
-  int getNextId()
-  {
-    int id = 1;
-    while( mapIdToIOR.find( id ) != mapIdToIOR.end() )
-      id++;
-    return id;
-  }
+  int         getNextId() { return mapIdToIOR.Extent() + 1; }
 
-  std::map<int, std::string> mapIdToIOR; // persistent-to-transient map
-  std::map<int, int>         mapIdToId;  // to translate object from persistent to transient form
+  TInt2StringMap mapIdToIOR; // persistent-to-transient map
+  TInt2IntMap    mapIdToId;  // to translate object from persistent to transient form
 };
 
 // ===========================================================
@@ -148,7 +109,8 @@ public:
   // Get SALOME_LifeCycleCORBA object
   static SALOME_LifeCycleCORBA* GetLCC();
   // Retrieve and get GEOM engine reference
-  static GEOM::GEOM_Gen_var GetGeomEngine();
+  static GEOM::GEOM_Gen_var GetGeomEngine( bool isShaper );
+  static GEOM::GEOM_Gen_var GetGeomEngine( GEOM::GEOM_Object_ptr );
   // Get object of the CORBA reference
   static PortableServer::ServantBase_var GetServant( CORBA::Object_ptr theObject );
   // Get CORBA object corresponding to the SALOMEDS::SObject
@@ -156,10 +118,10 @@ public:
   // Get the SALOMEDS::SObject corresponding to a CORBA object
   static SALOMEDS::SObject_ptr ObjectToSObject(CORBA::Object_ptr theObject);
   // Get the SALOMEDS::Study from naming service
-  static SALOMEDS::Study_ptr getStudyServant();
-  // Get GEOM Object correspoding to TopoDS_Shape
+  static SALOMEDS::Study_var getStudyServant();
+  // Get GEOM Object corresponding to TopoDS_Shape
   GEOM::GEOM_Object_ptr ShapeToGeomObject (const TopoDS_Shape& theShape );
-  // Get TopoDS_Shape correspoding to GEOM_Object
+  // Get TopoDS_Shape corresponding to GEOM_Object
   TopoDS_Shape GeomObjectToShape(GEOM::GEOM_Object_ptr theGeomObject);
 
   // Default constructor
@@ -197,17 +159,30 @@ public:
   // Update study
   void UpdateStudy();
 
-  // Create hypothesis/algorothm of given type
+  // Do provide info on objects
+  bool hasObjectInfo();
+
+  // Return an information for a given object
+  char* getObjectInfo(const char* entry);
+
+  // Create hypothesis/algorithm of given type
   SMESH::SMESH_Hypothesis_ptr CreateHypothesis (const char* theHypType,
                                                 const char* theLibName)
     throw ( SALOME::SALOME_Exception );
 
+  SMESH::SMESH_Hypothesis_ptr CreateHypothesisByAverageLength( const char*    theHypType,
+                                                               const char*    theLibName,
+                                                               CORBA::Double  theAverageLength,
+                                                               CORBA::Boolean theQuadDominated)
+    throw ( SALOME::SALOME_Exception );
+
   // Return hypothesis of given type holding parameter values of the existing mesh
-  SMESH::SMESH_Hypothesis_ptr GetHypothesisParameterValues (const char*           theHypType,
-                                                            const char*           theLibName,
-                                                            SMESH::SMESH_Mesh_ptr theMesh,
-                                                            GEOM::GEOM_Object_ptr theGeom,
-                                                            CORBA::Boolean        byMesh)
+  SMESH::SMESH_Hypothesis_ptr
+    GetHypothesisParameterValues (const char*                 theHypType,
+                                  const char*                 theLibName,
+                                  SMESH::SMESH_Mesh_ptr       theMesh,
+                                  GEOM::GEOM_Object_ptr       theGeom,
+                                  const SMESH::HypInitParams& theWay)
     throw ( SALOME::SALOME_Exception );
 
   /*
@@ -285,9 +260,24 @@ public:
   SMESH::SMESH_Mesh_ptr CopyMesh(SMESH::SMESH_IDSource_ptr meshPart,
                                  const char*               meshName,
                                  CORBA::Boolean            toCopyGroups,
-                                 CORBA::Boolean            toKeepIDs);
+                                 CORBA::Boolean            toKeepIDs)
+    throw ( SALOME::SALOME_Exception );
+
+  // Create a mesh by copying definitions of another mesh to a given geometry
+  CORBA::Boolean CopyMeshWithGeom( SMESH::SMESH_Mesh_ptr       sourceMesh,
+                                   GEOM::GEOM_Object_ptr       newGeometry,
+                                   const char*                 meshName,
+                                   CORBA::Boolean              toCopyGroups,
+                                   CORBA::Boolean              toReuseHypotheses,
+                                   CORBA::Boolean              toCopyElements,
+                                   SMESH::SMESH_Mesh_out       newMesh,
+                                   SMESH::ListOfGroups_out     newGroups,
+                                   SMESH::submesh_array_out    newSubmeshes,
+                                   SMESH::ListOfHypothesis_out newHypotheses,
+                                   SMESH::string_array_out     invalidEntries)
+    throw ( SALOME::SALOME_Exception );
 
-  // Compute mesh on a shape
+    // Compute mesh on a shape
   CORBA::Boolean Compute( SMESH::SMESH_Mesh_ptr theMesh,
                           GEOM::GEOM_Object_ptr theShapeObject )
     throw ( SALOME::SALOME_Exception );
@@ -328,10 +318,10 @@ public:
                                         SMESH::long_array&    theShapesId )
     throw ( SALOME::SALOME_Exception );
 
-  // Returns errors of hypotheses definintion
+  // Returns errors of hypotheses definition
   SMESH::algo_error_array* GetAlgoState( SMESH::SMESH_Mesh_ptr theMesh,
                                          GEOM::GEOM_Object_ptr theSubObject )
-      throw ( SALOME::SALOME_Exception );
+    throw ( SALOME::SALOME_Exception );
 
   // Return mesh elements preventing computation of a subshape
   SMESH::MeshPreviewStruct* GetBadInputElements( SMESH::SMESH_Mesh_ptr theMesh,
@@ -365,14 +355,16 @@ public:
                                           CORBA::Boolean                uniteIdenticalGroups,
                                           CORBA::Boolean                mergeNodesAndElements,
                                           CORBA::Double                 mergeTolerance,
-                                          CORBA::Boolean                commonGroups)
+                                          CORBA::Boolean                commonGroups,
+                                          SMESH::SMESH_Mesh_ptr         meshToAppendTo)
     throw ( SALOME::SALOME_Exception );
 
   // Concatenate the given meshes into one mesh
   SMESH::SMESH_Mesh_ptr Concatenate(const SMESH::ListOfIDSources& meshesArray,
                                     CORBA::Boolean                uniteIdenticalGroups,
                                     CORBA::Boolean                mergeNodesAndElements,
-                                    CORBA::Double                 mergeTolerance)
+                                    CORBA::Double                 mergeTolerance,
+                                    SMESH::SMESH_Mesh_ptr         meshToAppendTo)
     throw ( SALOME::SALOME_Exception );
 
   // Concatenate the given meshes into one mesh
@@ -380,12 +372,21 @@ public:
   SMESH::SMESH_Mesh_ptr ConcatenateWithGroups(const SMESH::ListOfIDSources& meshesArray,
                                               CORBA::Boolean                uniteIdenticalGroups,
                                               CORBA::Boolean                mergeNodesAndElements,
-                                              CORBA::Double                 mergeTolerance)
+                                              CORBA::Double                 mergeTolerance,
+                                              SMESH::SMESH_Mesh_ptr         meshToAppendTo)
     throw ( SALOME::SALOME_Exception );
 
+  // Get version of MED format being used.
+  char* GetMEDFileVersion();
+
   // Get MED version of the file by its name
-  CORBA::Boolean GetMEDVersion(const char* theFileName,
-                               SMESH::MED_VERSION& theVersion);
+  char* GetMEDVersion(const char* theFileName);
+
+  // Check compatibility of file with MED format being used, read only.
+  CORBA::Boolean CheckCompatibility(const char* theFileName);
+
+  // Check compatibility of file with MED format being used, for append on write.
+  CORBA::Boolean CheckWriteCompatibility(const char* theFileName);
 
   // Get names of meshes defined in file with the specified name
   SMESH::string_array* GetMeshNames(const char* theFileName);
@@ -534,6 +535,9 @@ public:
                                       SMESH::SMESH_GroupBase_ptr theGroup,
                                       GEOM::GEOM_Object_ptr  theShapeObject,
                                       const char*            theName = 0);
+  void UpdateIcons(SMESH::SMESH_Mesh_ptr theMesh);
+  void HighLightInvalid(CORBA::Object_ptr theObject, bool isInvalid);
+  bool IsInvalid(SALOMEDS::SObject_ptr theObject);
   bool AddHypothesisToShape(SMESH::SMESH_Mesh_ptr       theMesh,
                             GEOM::GEOM_Object_ptr       theShapeObject,
                             SMESH::SMESH_Hypothesis_ptr theHyp);
@@ -560,7 +564,7 @@ public:
 
   // Return an object that previously had an oldID
   template<class TInterface>
-  typename TInterface::_var_type GetObjectByOldId( const int oldID )
+    typename TInterface::_var_type GetObjectByOldId( const int oldID )
   {
     if ( myStudyContext ) {
       std::string ior = myStudyContext->getIORbyOldId( oldID );
@@ -638,7 +642,16 @@ private:
   SMESH::SMESH_Mesh_ptr createMesh()
     throw ( SALOME::SALOME_Exception );
 
-  static void loadGeomData( SALOMEDS::SComponent_ptr theCompRoot );
+  // Check mesh icon
+  bool isGeomModifIcon( SMESH::SMESH_Mesh_ptr mesh );
+
+  // Create a sub-mesh on a geometry that is not a sub-shape of the main shape
+  // for the case where a valid sub-shape not found by CopyMeshWithGeom()
+  SMESH::SMESH_subMesh_ptr createInvalidSubMesh( SMESH::SMESH_Mesh_ptr mesh,
+                                                 GEOM::GEOM_Object_ptr strangerGeom,
+                                                 const char*           name );
+
+  void highLightInvalid( SALOMEDS::SObject_ptr theSObject, bool isInvalid );
 
   SMESH::mesh_array* CreateMeshesFromMEDorSAUV( const char* theFileName,
                                                 SMESH::DriverMED_ReadStatus& theStatus,