Salome HOME
Merge branch 'occ/shaper2smesh'
[modules/smesh.git] / src / SMESH_I / SMESH_Gen_i.hxx
index 1cc0ae4aa44d5172994d06c617c222c5d1064b1a..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
@@ -58,7 +58,7 @@ 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
 {
@@ -67,58 +67,24 @@ class SMESH_I_EXPORT StudyContext
 public:
   // constructor
   StudyContext() {}
-
   // register object in the internal map and return its id
-  int addObject( std::string theIOR )
-  {
-    int nextId = getNextId();
-    mapIdToIOR.Bind( 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 )
-  {
-    TInt2StringMap::iterator imap;
-    for ( imap = mapIdToIOR.begin(); imap != mapIdToIOR.end(); ++imap ) {
-      if ( *imap == theIOR )
-        return imap.Iterator().Key();
-    }
-    return 0;
-  }
+  int         findId( const std::string& theIOR );
   // get object's IOR by id
-  std::string getIORbyId( const int theId )
-  {
-    if ( mapIdToIOR.IsBound( theId ) )
-      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.IsBound( theOldId ) )
-      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.Bind( oldId, newId );
-  }
+  void        mapOldToNew( const int oldId, const int newId );
   // get old id by a new one
-  int getOldId( const int newId ) {
-    TInt2IntMap::iterator imap;
-    for ( imap = mapIdToId.begin(); imap != mapIdToId.end(); ++imap ) {
-      if ( *imap == newId )
-        return imap.Iterator().Key();
-    }
-    return 0;
-  }
+  int         getOldId( const int newId );
+  // clear data
+  void        Clear();
 
 private:
   // get next free object identifier
-  int getNextId()
-  {
-    return mapIdToIOR.Extent() + 1;
-  }
+  int         getNextId() { return mapIdToIOR.Extent() + 1; }
 
   TInt2StringMap mapIdToIOR; // persistent-to-transient map
   TInt2IntMap    mapIdToId;  // to translate object from persistent to transient form
@@ -143,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
@@ -151,7 +118,7 @@ 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();
+  static SALOMEDS::Study_var getStudyServant();
   // Get GEOM Object corresponding to TopoDS_Shape
   GEOM::GEOM_Object_ptr ShapeToGeomObject (const TopoDS_Shape& theShape );
   // Get TopoDS_Shape corresponding to GEOM_Object
@@ -192,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 );
 
   /*
@@ -280,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 );
 
-  // Compute mesh on a shape
+  // 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
   CORBA::Boolean Compute( SMESH::SMESH_Mesh_ptr theMesh,
                           GEOM::GEOM_Object_ptr theShapeObject )
     throw ( SALOME::SALOME_Exception );
@@ -326,7 +321,7 @@ public:
   // 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,
@@ -360,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
@@ -375,7 +372,8 @@ 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.
@@ -384,9 +382,12 @@ public:
   // Get MED version of the file by its name
   char* GetMEDVersion(const char* theFileName);
 
-  // Check compatibility of file with MED format being used.
+  // 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);
@@ -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,