X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESH_I%2FSMESH_Gen_i.hxx;h=1cc0ae4aa44d5172994d06c617c222c5d1064b1a;hb=c704eadf0489f1776156b36aea985c18a6915ec2;hp=b60ef8d242e9ae24470c192b94c24a0a39547018;hpb=920fe932b10ce5e9da132f0fce3be2bbef95fa3a;p=modules%2Fsmesh.git diff --git a/src/SMESH_I/SMESH_Gen_i.hxx b/src/SMESH_I/SMESH_Gen_i.hxx index b60ef8d24..1cc0ae4aa 100644 --- a/src/SMESH_I/SMESH_Gen_i.hxx +++ b/src/SMESH_I/SMESH_Gen_i.hxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2015 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 @@ -49,6 +49,7 @@ #include #include #include +#include #include #include @@ -61,56 +62,53 @@ class SALOME_LifeCycleCORBA; // ========================================================== 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; + mapIdToIOR.Bind( nextId, theIOR ); return nextId; } // find the object id in the internal map by the IOR int findId( std::string theIOR ) { - std::map::iterator imap; + TInt2StringMap::iterator imap; for ( imap = mapIdToIOR.begin(); imap != mapIdToIOR.end(); ++imap ) { - if ( imap->second == theIOR ) - return imap->first; + if ( *imap == theIOR ) + return imap.Iterator().Key(); } return 0; } // get object's IOR by id std::string getIORbyId( const int theId ) { - if ( mapIdToIOR.find( theId ) != mapIdToIOR.end() ) - return mapIdToIOR[ theId ]; - return std::string( "" ); + if ( mapIdToIOR.IsBound( theId ) ) + return mapIdToIOR( theId ); + return std::string(); } // 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( "" ); + if ( mapIdToId.IsBound( theOldId ) ) + return getIORbyId( mapIdToId( theOldId )); + return std::string(); } // maps old object id to the new one (used when restoring data) void mapOldToNew( const int oldId, const int newId ) { - mapIdToId[ oldId ] = newId; + mapIdToId.Bind( oldId, newId ); } // get old id by a new one int getOldId( const int newId ) { - std::map::iterator imap; + TInt2IntMap::iterator imap; for ( imap = mapIdToId.begin(); imap != mapIdToId.end(); ++imap ) { - if ( imap->second == newId ) - return imap->first; + if ( *imap == newId ) + return imap.Iterator().Key(); } return 0; } @@ -119,14 +117,11 @@ private: // get next free object identifier int getNextId() { - int id = 1; - while( mapIdToIOR.find( id ) != mapIdToIOR.end() ) - id++; - return id; + 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 }; // =========================================================== @@ -154,11 +149,12 @@ public: // Get CORBA object corresponding to the SALOMEDS::SObject static CORBA::Object_var SObjectToObject( SALOMEDS::SObject_ptr theSObject ); // Get the SALOMEDS::SObject corresponding to a CORBA object - static SALOMEDS::SObject_ptr ObjectToSObject(SALOMEDS::Study_ptr theStudy, - CORBA::Object_ptr theObject); - // Get GEOM Object correspoding to TopoDS_Shape + static SALOMEDS::SObject_ptr ObjectToSObject(CORBA::Object_ptr theObject); + // Get the SALOMEDS::Study from naming service + static SALOMEDS::Study_ptr 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 @@ -182,15 +178,19 @@ public: //GEOM::GEOM_Gen_ptr SetGeomEngine( const char* containerLoc ); void SetGeomEngine( GEOM::GEOM_Gen_ptr geomcompo ); - // Set current study + // Set embedded mode void SetEmbeddedMode( CORBA::Boolean theMode ); - // Get current study + // Check embedded mode CORBA::Boolean IsEmbeddedMode(); - // Set current study - void SetCurrentStudy( SALOMEDS::Study_ptr theStudy ); - // Get current study - SALOMEDS::Study_ptr GetCurrentStudy(); + // Set enable publishing in the study + void SetEnablePublish( CORBA::Boolean theIsEnablePublish ); + + // Check enable publishing + CORBA::Boolean IsEnablePublish(); + + // Update study + void UpdateStudy(); // Create hypothesis/algorothm of given type SMESH::SMESH_Hypothesis_ptr CreateHypothesis (const char* theHypType, @@ -323,7 +323,7 @@ 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 ); @@ -378,9 +378,14 @@ public: CORBA::Double mergeTolerance) 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. + CORBA::Boolean CheckCompatibility(const char* theFileName); // Get names of meshes defined in file with the specified name SMESH::string_array* GetMeshNames(const char* theFileName); @@ -437,8 +442,7 @@ public: // Returns true if object can be published in the study bool CanPublishInStudy( CORBA::Object_ptr theIOR ); // Publish object in the study - SALOMEDS::SObject_ptr PublishInStudy( SALOMEDS::Study_ptr theStudy, - SALOMEDS::SObject_ptr theSObject, + SALOMEDS::SObject_ptr PublishInStudy( SALOMEDS::SObject_ptr theSObject, CORBA::Object_ptr theObject, const char* theName ) throw ( SALOME::SALOME_Exception ); @@ -467,19 +471,17 @@ public: // Dump python // ============ - virtual Engines::TMPFile* DumpPython(CORBA::Object_ptr theStudy, - CORBA::Boolean isPublished, + virtual Engines::TMPFile* DumpPython(CORBA::Boolean isPublished, CORBA::Boolean isMultiFile, CORBA::Boolean& isValidScript); - void AddToPythonScript (int theStudyID, const TCollection_AsciiString& theString); + void AddToPythonScript (const TCollection_AsciiString& theString); - void RemoveLastFromPythonScript (int theStudyID); + void RemoveLastFromPythonScript(); - void SavePython (SALOMEDS::Study_ptr theStudy); + void SavePython(); - TCollection_AsciiString DumpPython_impl (SALOMEDS::Study_ptr theStudy, - Resource_DataMapOfAsciiStringAsciiString& theObjectNames, + TCollection_AsciiString DumpPython_impl (Resource_DataMapOfAsciiStringAsciiString& theObjectNames, Resource_DataMapOfAsciiStringAsciiString& theNames, bool isPublished, bool isMultiFile, @@ -487,9 +489,9 @@ public: bool& aValidScript, TCollection_AsciiString& theSavedTrace); - TCollection_AsciiString GetNewPythonLines (int theStudyID); + TCollection_AsciiString GetNewPythonLines(); - void CleanPythonTrace (int theStudyID); + void CleanPythonTrace(); // ***************************************** // Internal methods @@ -519,33 +521,26 @@ public: static long GetBallElementsGroupsTag(); // publishing methods - SALOMEDS::SComponent_ptr PublishComponent(SALOMEDS::Study_ptr theStudy); - SALOMEDS::SObject_ptr PublishMesh (SALOMEDS::Study_ptr theStudy, - SMESH::SMESH_Mesh_ptr theMesh, + SALOMEDS::SComponent_ptr PublishComponent(); + SALOMEDS::SObject_ptr PublishMesh (SMESH::SMESH_Mesh_ptr theMesh, const char* theName = 0); - SALOMEDS::SObject_ptr PublishHypothesis (SALOMEDS::Study_ptr theStudy, - SMESH::SMESH_Hypothesis_ptr theHyp, + SALOMEDS::SObject_ptr PublishHypothesis (SMESH::SMESH_Hypothesis_ptr theHyp, const char* theName = 0); - SALOMEDS::SObject_ptr PublishSubMesh (SALOMEDS::Study_ptr theStudy, - SMESH::SMESH_Mesh_ptr theMesh, + SALOMEDS::SObject_ptr PublishSubMesh (SMESH::SMESH_Mesh_ptr theMesh, SMESH::SMESH_subMesh_ptr theSubMesh, GEOM::GEOM_Object_ptr theShapeObject, const char* theName = 0); - SALOMEDS::SObject_ptr PublishGroup (SALOMEDS::Study_ptr theStudy, - SMESH::SMESH_Mesh_ptr theMesh, + SALOMEDS::SObject_ptr PublishGroup (SMESH::SMESH_Mesh_ptr theMesh, SMESH::SMESH_GroupBase_ptr theGroup, GEOM::GEOM_Object_ptr theShapeObject, const char* theName = 0); - bool AddHypothesisToShape(SALOMEDS::Study_ptr theStudy, - SMESH::SMESH_Mesh_ptr theMesh, + bool AddHypothesisToShape(SMESH::SMESH_Mesh_ptr theMesh, GEOM::GEOM_Object_ptr theShapeObject, SMESH::SMESH_Hypothesis_ptr theHyp); - bool RemoveHypothesisFromShape(SALOMEDS::Study_ptr theStudy, - SMESH::SMESH_Mesh_ptr theMesh, + bool RemoveHypothesisFromShape(SMESH::SMESH_Mesh_ptr theMesh, GEOM::GEOM_Object_ptr theShapeObject, SMESH::SMESH_Hypothesis_ptr theHyp); - SALOMEDS::SObject_ptr GetMeshOrSubmeshByShape (SALOMEDS::Study_ptr theStudy, - SMESH::SMESH_Mesh_ptr theMesh, + SALOMEDS::SObject_ptr GetMeshOrSubmeshByShape (SMESH::SMESH_Mesh_ptr theMesh, GEOM::GEOM_Object_ptr theShape); static void SetName(SALOMEDS::SObject_ptr theSObject, const char* theName, @@ -555,7 +550,7 @@ public: const char* thePixMap); // Get study context - StudyContext* GetCurrentStudyContext(); + StudyContext* GetStudyContext(); // Register an object in a StudyContext; return object id int RegisterObject(CORBA::Object_ptr theObject); @@ -565,9 +560,9 @@ 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 ( StudyContext* myStudyContext = GetCurrentStudyContext() ) { + if ( myStudyContext ) { std::string ior = myStudyContext->getIORbyOldId( oldID ); if ( !ior.empty() ) return TInterface::_narrow(GetORB()->string_to_object( ior.c_str() )); @@ -575,9 +570,6 @@ public: return TInterface::_nil(); } - // Get current study ID - int GetCurrentStudyID(); - /*! * \brief Find SObject for an algo */ @@ -653,9 +645,6 @@ private: const char* theCommandNameForPython, const char* theFileNameForPython); - void setCurrentStudy( SALOMEDS::Study_ptr theStudy, - bool theStudyIsBeingClosed=false); - std::vector _GetInside(SMESH::SMESH_IDSource_ptr meshPart, SMESH::ElementType theElemType, TopoDS_Shape& aShape, @@ -673,11 +662,11 @@ private: // hypotheses managing std::map myHypCreatorMap; - std::map myStudyContextMap; // Map of study context objects + StudyContext* myStudyContext; // study context GEOM_Client* myShapeReader; // Shape reader - SALOMEDS::Study_var myCurrentStudy; // Current study CORBA::Boolean myIsEmbeddedMode; // Current mode + CORBA::Boolean myIsEnablePublish; // Enable publishing // Default color of groups std::string myDefaultGroupColor; @@ -686,11 +675,11 @@ private: bool myToForgetMeshDataOnHypModif; // Dump Python: trace of API methods calls - std::map < int, Handle(TColStd_HSequenceOfAsciiString) > myPythonScripts; - bool myIsHistoricalPythonDump; - std::vector< int > myLastParamIndex; - std::vector< std::string > myLastParameters; - std::string myLastObj; + Handle(TColStd_HSequenceOfAsciiString) myPythonScript; + bool myIsHistoricalPythonDump; + std::vector< int > myLastParamIndex; + std::vector< std::string > myLastParameters; + std::string myLastObj; };