X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESH_I%2FSMESH_PreMeshInfo.cxx;h=00383dba4bcea279f183f0b29e10b9c43a09a178;hp=c2181296c5aab928de37fd7ced292a0ee7d792e3;hb=499f29d24922cec66e41b41a0039a954993bc6df;hpb=4c16067d4281f56bd07d3f92fb63fff9c0c1d169 diff --git a/src/SMESH_I/SMESH_PreMeshInfo.cxx b/src/SMESH_I/SMESH_PreMeshInfo.cxx index c2181296c..00383dba4 100644 --- a/src/SMESH_I/SMESH_PreMeshInfo.cxx +++ b/src/SMESH_I/SMESH_PreMeshInfo.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2022 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 @@ -53,6 +53,8 @@ #include "SMESH_TryCatch.hxx" +#include + #include CORBA_SERVER_HEADER(SALOME_Session) using namespace std; @@ -61,10 +63,10 @@ using namespace std; namespace { - enum { GroupOnFilter_OutOfDate = -1 }; + enum { GroupOnFilter_OutOfDate = -777 }; - // a map to count not yet loaded meshes - static std::map< int, int > theStudyIDToMeshCounter; + // count not yet loaded meshes + static int theMeshCounter = 0; //================================================================================ /*! @@ -72,11 +74,9 @@ namespace */ //================================================================================ - void meshInfoLoaded( SMESH_Mesh_i* mesh ) + void meshInfoLoaded( SMESH_Mesh_i* /*mesh*/ ) { - std::map< int, int >::iterator id2counter = - theStudyIDToMeshCounter.insert( std::make_pair( (int) mesh->GetStudyId(), 0 )).first; - id2counter->second++; + theMeshCounter++; } //================================================================================ /*! @@ -84,22 +84,22 @@ namespace */ //================================================================================ - void filesNoMoreNeeded(SMESH_Mesh_i* mesh, + void filesNoMoreNeeded(SMESH_Mesh_i* /*mesh*/, std::string medFile, std::string hdfFile) { - if ( --theStudyIDToMeshCounter[ (int) mesh->GetStudyId() ] == 0 ) + if ( --theMeshCounter == 0 ) { std::string tmpDir = SALOMEDS_Tool::GetDirFromPath( hdfFile ); - SALOMEDS::ListOfFileNames_var aFiles = new SALOMEDS::ListOfFileNames; - aFiles->length(2); + SALOMEDS_Tool::ListOfFiles aFiles; + aFiles.reserve(2); medFile = SALOMEDS_Tool::GetNameFromPath( medFile ) + ".med"; hdfFile = SALOMEDS_Tool::GetNameFromPath( hdfFile ) + ".hdf"; - aFiles[0] = medFile.c_str(); - aFiles[1] = hdfFile.c_str(); + aFiles.push_back(medFile.c_str()); + aFiles.push_back(hdfFile.c_str()); - SALOMEDS_Tool::RemoveTemporaryFiles( tmpDir.c_str(), aFiles.in(), true ); + SALOMEDS_Tool::RemoveTemporaryFiles( tmpDir.c_str(), aFiles, true ); } } @@ -117,25 +117,22 @@ namespace SignalToGUI( SMESH_Mesh_i* mesh ) { SMESH_Gen_i* gen = SMESH_Gen_i::GetSMESHGen(); - SALOMEDS::Study_var study = gen->GetCurrentStudy(); - if ( !study->_is_nil() && study->StudyId() == mesh->GetStudyId() ) + + SALOMEDS::SObject_wrap meshSO = gen->ObjectToSObject( mesh->_this() ); + CORBA::Object_var obj = gen->GetNS()->Resolve( "/Kernel/Session" ); + _session = SALOME::Session::_narrow( obj ); + if ( !meshSO->_is_nil() && !_session->_is_nil() ) { - SALOMEDS::SObject_wrap meshSO = gen->ObjectToSObject(study, mesh->_this() ); - CORBA::Object_var obj = gen->GetNS()->Resolve( "/Kernel/Session" ); - _session = SALOME::Session::_narrow( obj ); - if ( !meshSO->_is_nil() && !_session->_is_nil() ) - { - CORBA::String_var meshEntry = meshSO->GetID(); - _messagePrefix = "SMESH/mesh_loading/"; - _messagePrefix += meshEntry.in(); + CORBA::String_var meshEntry = meshSO->GetID(); + _messagePrefix = "SMESH/mesh_loading/"; + _messagePrefix += meshEntry.in(); - std::string msgToGUI = _messagePrefix + "/"; - msgToGUI += SMESH_Comment( mesh->NbNodes() ); - msgToGUI += "/"; - msgToGUI += SMESH_Comment( mesh->NbElements() ); + std::string msgToGUI = _messagePrefix + "/"; + msgToGUI += SMESH_Comment( mesh->NbNodes() ); + msgToGUI += "/"; + msgToGUI += SMESH_Comment( mesh->NbElements() ); - _session->emitMessageOneWay( msgToGUI.c_str()); - } + _session->emitMessageOneWay( msgToGUI.c_str()); } } void sendStop() @@ -247,9 +244,9 @@ namespace */ //================================================================================ - void meshInfo2hdf( SMESH::long_array_var meshInfo, - const std::string& name, - HDFgroup* hdfGroup) + void meshInfo2hdf( SMESH::smIdType_array_var meshInfo, + const std::string& name, + HDFgroup* hdfGroup) { // we use med identification of element (MED::EGeometrieElement) types // but not enum SMDSAbs_EntityType because values of SMDSAbs_EntityType may @@ -259,7 +256,7 @@ namespace std::vector data; for ( size_t i = 0; i < meshInfo->length(); ++i ) - if ( meshInfo[i] > 0 ) + if ( meshInfo[i] > 0 || meshInfo[i] == GroupOnFilter_OutOfDate ) { data.push_back( DriverMED::GetMedGeoType( SMDSAbs_EntityType( i ))); //medTypes[ i ] ); data.push_back( meshInfo[ i ] ); @@ -267,8 +264,8 @@ namespace if ( !data.empty() ) { - hdf_size datasetSize[] = { data.size() }; - HDFarray* anArray = new HDFarray(0, HDF_INT32, 1, datasetSize); + hdf_size *datasetSize = new hdf_size[1]; datasetSize[0] = data.size(); + std::unique_ptr anArray( new HDFarray(0, HDF_INT32, 1, datasetSize) ); anArray->CreateOnDisk(); datasetSize[0] = 1; HDFdataset* dataset = new HDFdataset( name.c_str(), hdfGroup, HDF_ARRAY, datasetSize, 1 ); @@ -461,6 +458,7 @@ bool SMESH_PreMeshInfo::readPreInfoFromHDF() mapOfNames ); } } + infoHdfGroup->CloseOnDisk(); } aFile->CloseOnDisk(); @@ -479,14 +477,11 @@ bool SMESH_PreMeshInfo::readMeshInfo() { _isInfoOk = true; - MED::PWrapper aMed = MED::CrWrapper(_medFileName,true); - // if ( aMed->GetVersion() != MED::eV2_2 ) - // return false; - + MED::PWrapper aMed = MED::CrWrapperR(_medFileName); MED::PMeshInfo medMeshInfo = aMed->CrMeshInfo(3,3,SMESH_Comment( _meshID )); // read nb nodes - int nbNodes = std::max( 0, aMed->GetNbNodes( medMeshInfo )); + int nbNodes = Max( 0, aMed->GetNbNodes( medMeshInfo )); if ( nbNodes > 0 ) { setNb( SMDSEntity_Node, nbNodes); @@ -535,7 +530,7 @@ void SMESH_PreMeshInfo::readGroupInfo() map< int, vector< SMESH_PreMeshInfo* > > famId2grInfo; - MED::PWrapper aMed = MED::CrWrapper(_medFileName,false); + MED::PWrapper aMed = MED::CrWrapperR(_medFileName); MED::PMeshInfo medMeshInfo = aMed->CrMeshInfo(3,3,SMESH_Comment( _meshID )); // read families to fill in famId2grInfo @@ -848,8 +843,9 @@ void SMESH_PreMeshInfo::FullLoadFromFile() const meshDS->Modified(); // load dependent meshes referring/referred via hypotheses - mesh.GetSubMesh( mesh.GetShapeToMesh() )-> - ComputeStateEngine (SMESH_subMesh::SUBMESH_LOADED); + SMESH_subMesh* mainSub = mesh.GetSubMesh( mesh.GetShapeToMesh() ); + mainSub->ComputeStateEngine (SMESH_subMesh::SUBMESH_RESTORED); // #16648 + mainSub->ComputeStateEngine (SMESH_subMesh::SUBMESH_LOADED); MYDEBUGOUT( "END FullLoadFromFile()" ); } @@ -958,7 +954,7 @@ void SMESH_PreMeshInfo::readSubMeshes(DriverMED_R_SMESHDS_Mesh* reader) const if ( isNode ) { SMDS_PositionPtr pos = aPositionCreator.MakePosition( smType[ smID ]); SMDS_MeshNode* node = const_cast( static_cast( elem )); - node->SetPosition( pos ); + node->SetPosition( pos, sm->GetID() ); sm->AddNode( node ); } else { sm->AddElement( elem ); @@ -1204,9 +1200,9 @@ SMESH::array_of_ElementType* SMESH_PreMeshInfo::GetTypes() const */ //================================================================================ -SMESH::long_array* SMESH_PreMeshInfo::GetMeshInfo() const +SMESH::smIdType_array* SMESH_PreMeshInfo::GetMeshInfo() const { - SMESH::long_array_var aRes = new SMESH::long_array(); + SMESH::smIdType_array_var aRes = new SMESH::smIdType_array(); aRes->length(SMESH::Entity_Last); for (int i = SMESH::Entity_Node; i < SMESH::Entity_Last; i++) aRes[i] = 0; @@ -1237,10 +1233,9 @@ bool SMESH_PreMeshInfo::IsMeshInfoCorrect() const void SMESH_PreMeshInfo::RemoveStudyFiles_TMP_METHOD(SALOMEDS::SComponent_ptr smeshComp) { - SALOMEDS::Study_var study = smeshComp->GetStudy(); - if ( theStudyIDToMeshCounter[ (int) study->StudyId() ] > 0 ) + if ( theMeshCounter > 0 ) { - SALOMEDS::ChildIterator_wrap itBig = study->NewChildIterator( smeshComp ); + SALOMEDS::ChildIterator_wrap itBig = SMESH_Gen_i::GetSMESHGen()->getStudyServant()->NewChildIterator( smeshComp ); for ( ; itBig->More(); itBig->Next() ) { SALOMEDS::SObject_wrap gotBranch = itBig->Value(); CORBA::Object_var anObject = SMESH_Gen_i::SObjectToObject( gotBranch );