X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESH_I%2FSMESH_PreMeshInfo.cxx;h=0a3d58614a4a37e466e9c35517af8492cc6d9f0b;hb=87905be5e7e38aef260a20f625170c86247ffe69;hp=31cd9aeb783702992df00d8484d42bb9fbc473d1;hpb=4986d0a274862b02d4cac7d5fc826339d6812895;p=modules%2Fsmesh.git diff --git a/src/SMESH_I/SMESH_PreMeshInfo.cxx b/src/SMESH_I/SMESH_PreMeshInfo.cxx index 31cd9aeb7..0a3d58614 100644 --- a/src/SMESH_I/SMESH_PreMeshInfo.cxx +++ b/src/SMESH_I/SMESH_PreMeshInfo.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2012 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 @@ -149,7 +149,7 @@ namespace if ( !meshSO->_is_nil() && !_session->_is_nil() ) { CORBA::String_var meshEntry = meshSO->GetID(); - _messagePrefix = "mesh_loading/"; + _messagePrefix = "SMESH/mesh_loading/"; _messagePrefix += meshEntry.in(); string msgToGUI = _messagePrefix + "/"; @@ -230,6 +230,17 @@ namespace return ids; } + //================================================================================ + /*! + * \brief Return EEntiteMaillage by EGeometrieElement + */ + //================================================================================ + + MED::EEntiteMaillage entityByGeom(const MED::EGeometrieElement geom ) + { + return geom == MED::eBALL ? MED::eSTRUCT_ELEMENT : MED::eMAILLE; + } + //================================================================================ /*! * \brief Return a map< EGeometrieElement, SMDSAbs_EntityType > @@ -263,6 +274,7 @@ namespace med2smeshTypes[ MED::ePOLYGONE ] = SMDSEntity_Polygon ; med2smeshTypes[ MED::ePOLYEDRE ] = SMDSEntity_Polyhedra ; med2smeshTypes[ MED::eNONE ] = SMDSEntity_Node ; + med2smeshTypes[ MED::eBALL ] = SMDSEntity_Ball ; } return med2smeshTypes; } @@ -342,21 +354,22 @@ void SMESH_PreMeshInfo::hdf2meshInfo( const std::string& name, HDFdataset* dataset = new HDFdataset( name.c_str(), hdfGroup ); dataset->OpenOnDisk(); - // hdf_size datasetSize[ 1 ]; - // HDFarray *array = new HDFarray(dataset); - // array->GetDim( datasetSize ); - int size = dataset->GetSize(); + // // hdf_size datasetSize[ 1 ]; + // // HDFarray *array = new HDFarray(dataset); + // // array->GetDim( datasetSize ); + // int size = dataset->GetSize(); - int info[ SMDSEntity_Last * 2 ]; - dataset->ReadFromDisk( info ); + vector info( SMDSEntity_Last * 2, 0 ); + dataset->ReadFromDisk( &info[0] ); dataset->CloseOnDisk(); const Tmed2smeshElemTypeMap& med2smesh = med2smeshElemTypeMap(); Tmed2smeshElemTypeMap::const_iterator me2sme, me2smeEnd = med2smesh.end(); - for ( int i = 0; i < size /**datasetSize*/; ) + for ( size_t i = 0; i < info.size(); ) { int medType = info[i++]; int nbElems = info[i++]; + if ( !nbElems ) break; me2sme = med2smesh.find( (MED::EGeometrieElement) medType ); if ( me2sme != me2smeEnd ) setNb( me2sme->second, nbElems ); @@ -462,7 +475,6 @@ bool SMESH_PreMeshInfo::readPreInfoFromHDF() const bool infoAvailable = aFile->ExistInternalObject( hdfGroupName ); if ( infoAvailable ) { - HDFgroup* infoHdfGroup = new HDFgroup( hdfGroupName, aFile ); infoHdfGroup->OpenOnDisk(); @@ -529,7 +541,7 @@ bool SMESH_PreMeshInfo::readMeshInfo() Tmed2smeshElemTypeMap::const_iterator me2smeEnd = med2smeshElemTypeMap().end(); for ( ; me2sme != me2smeEnd; ++me2sme ) { - int nbElems = aMed->GetNbCells( medMeshInfo, MED::eMAILLE, me2sme->first ); + int nbElems = aMed->GetNbCells( medMeshInfo, entityByGeom(me2sme->first), me2sme->first ); if ( nbElems > 0 ) setNb( me2sme->second, nbElems ); } @@ -599,7 +611,7 @@ void SMESH_PreMeshInfo::readGroupInfo() { famNums.resize( NbEntities( me2sme->second )); if ( famNums.empty() ) continue; - aMed->GetFamilies( medElemInfo, famNums.size(), MED::eMAILLE, me2sme->first ); + aMed->GetFamilies( medElemInfo, famNums.size(), entityByGeom(me2sme->first), me2sme->first ); // distribute elements of a type among groups map< int, vector< SMESH_PreMeshInfo* > >::iterator f2infos = famId2grInfo.begin(); for ( size_t i = 0; i < famNums.size(); ++i ) @@ -846,7 +858,7 @@ void SMESH_PreMeshInfo::FullLoadFromFile() const SMESH_PreMeshInfo* meshInfo = _mesh->changePreMeshInfo(); _mesh->changePreMeshInfo() = NULL; // to allow GUI accessing to real info - ::SMESH_Mesh& mesh = _mesh->GetImpl(); + ::SMESH_Mesh& mesh = _mesh->GetImpl(); SMESHDS_Mesh* meshDS = mesh.GetMeshDS(); PreMeshInfo_TRY; @@ -907,6 +919,18 @@ void SMESH_PreMeshInfo::readSubMeshes(DriverMED_R_SMESHDS_Mesh* reader) const SMESHDS_Mesh* meshDS = _mesh->GetImpl().GetMeshDS(); + // issue 0020693. Restore _isModified flag + if ( aTopGroup->ExistInternalObject( "_isModified" )) + { + HDFdataset* aDataset = new HDFdataset( "_isModified", aTopGroup ); + aDataset->OpenOnDisk(); + hdf_size size = aDataset->GetSize(); + int* isModified = new int[ size ]; + aDataset->ReadFromDisk( isModified ); + aDataset->CloseOnDisk(); + _mesh->GetImpl().SetIsModified( bool(*isModified)); + } + bool submeshesInFamilies = ( ! aTopGroup->ExistInternalObject( "Submeshes" )); if ( submeshesInFamilies ) // from MED { @@ -1198,14 +1222,11 @@ SMESH::array_of_ElementType* SMESH_PreMeshInfo::GetTypes() const types->length( 4 ); int nbTypes = 0; - if (NbEdges()) - types[nbTypes++] = SMESH::EDGE; - if (NbFaces()) - types[nbTypes++] = SMESH::FACE; - if (NbVolumes()) - types[nbTypes++] = SMESH::VOLUME; - if (Nb0DElements()) - types[nbTypes++] = SMESH::ELEM0D; + if (NbEdges()) types[nbTypes++] = SMESH::EDGE; + if (NbFaces()) types[nbTypes++] = SMESH::FACE; + if (NbVolumes()) types[nbTypes++] = SMESH::VOLUME; + if (Nb0DElements()) types[nbTypes++] = SMESH::ELEM0D; + if (NbBalls()) types[nbTypes++] = SMESH::BALL; types->length( nbTypes ); return types._retn();