X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESH_I%2FSMESH_Gen_i.hxx;h=52cd172b484f98d1d2632e8233361d0c8e92a4f8;hp=53921ba6461aeb569e55cf72ae794b9fad957de6;hb=fad0945128baf5e8d6642d9805727269db28c4cd;hpb=8a9d91b414c3f26586dea735c22c7700898a0a1e diff --git a/src/SMESH_I/SMESH_Gen_i.hxx b/src/SMESH_I/SMESH_Gen_i.hxx index 53921ba64..52cd172b4 100644 --- a/src/SMESH_I/SMESH_Gen_i.hxx +++ b/src/SMESH_I/SMESH_Gen_i.hxx @@ -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 #include #include +#include #include #include @@ -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::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::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 mapIdToIOR; // persistent-to-transient map - std::map 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 }; // =========================================================== @@ -156,10 +117,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,7 +158,7 @@ public: // Update study void UpdateStudy(); - // Create hypothesis/algorothm of given type + // Create hypothesis/algorithm of given type SMESH::SMESH_Hypothesis_ptr CreateHypothesis (const char* theHypType, const char* theLibName) throw ( SALOME::SALOME_Exception ); @@ -285,9 +246,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 +304,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 +341,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 +358,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 +521,8 @@ 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 AddHypothesisToShape(SMESH::SMESH_Mesh_ptr theMesh, GEOM::GEOM_Object_ptr theShapeObject, SMESH::SMESH_Hypothesis_ptr theHyp); @@ -560,7 +549,7 @@ public: // Return an object that previously had an oldID template - 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,6 +627,14 @@ private: SMESH::SMESH_Mesh_ptr createMesh() throw ( SALOME::SALOME_Exception ); + // 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 ); + static void loadGeomData( SALOMEDS::SComponent_ptr theCompRoot ); SMESH::mesh_array* CreateMeshesFromMEDorSAUV( const char* theFileName,