X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FMEDLoader%2FSauvWriter.cxx;h=13f44b92f7c405b79184e7a70a5da5e6ef80ecdc;hb=48e3deca564ef5e3d0b5db1b23993b1f73e1682a;hp=b86f34dfa7489bedbf267c7f3530824ab2164737;hpb=10f37bf6f33a762626d7f1093b2f5450c1688667;p=tools%2Fmedcoupling.git diff --git a/src/MEDLoader/SauvWriter.cxx b/src/MEDLoader/SauvWriter.cxx index b86f34dfa..13f44b92f 100644 --- a/src/MEDLoader/SauvWriter.cxx +++ b/src/MEDLoader/SauvWriter.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D +// Copyright (C) 2007-2013 CEA/DEN, EDF R&D // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -244,7 +244,10 @@ void SauvWriter::setMEDFileDS(const MEDFileData* medData, if ( fields ) for ( int i = 0; i < fields->getNumberOfFields(); ++i ) { - MEDFileFieldMultiTS * f = fields->getFieldAtPos(i); + MEDFileAnyTypeFieldMultiTS * fB = fields->getFieldAtPos(i); + MEDFileFieldMultiTS * f = dynamic_cast(fB); + if(!f) + continue;// fields on int32 not managed if ( f->getMeshName() == _fileMesh->getName() ) { vector< vector > fTypes = f->getTypesOfFieldAvailable(); @@ -404,7 +407,7 @@ void SauvWriter::fillFamilySubMeshes() //================================================================================ /*! - * \brief fill sub-mehses of groups + * \brief fill sub-meshes of groups */ //================================================================================ @@ -418,22 +421,30 @@ void SauvWriter::fillGroupSubMeshes() const vector& famNames = g2ff->second; if ( famNames.empty() ) continue; std::vector famSubMeshes( famNames.size() ); + std::size_t k = 0; for ( size_t i = 0; i < famNames.size(); ++i ) { int famID = _fileMesh->getFamilyId( famNames[i].c_str() ); map< int, SubMesh* >::iterator i2f = _famIDs2Sub.find( famID ); - if ( i2f == _famIDs2Sub.end() ) - THROW_IK_EXCEPTION("SauvWriter::fillGroupSubMeshes(): unknown family ID: " << famID); - famSubMeshes[ i ] = i2f->second; + if ( i2f != _famIDs2Sub.end() ) + { + famSubMeshes[ k ] = i2f->second; + ++k; + } } + // if a family exists but has no element, no submesh has been found for this family + // => we have to resize famSubMeshes with the number of submeshes stored + if (k != famNames.size()) + famSubMeshes.resize(k); SubMesh* grpSubMesh = addSubMesh( groupName, famSubMeshes[0]->_dimRelExt ); grpSubMesh->_subs.swap( famSubMeshes ); } } + //================================================================================ /*! - * \brief fill sub-mehses of profiles + * \brief fill sub-meshes of profiles */ //================================================================================ @@ -572,7 +583,7 @@ void SauvWriter::write(const char* fileName) std::fstream fileStream; fileStream.open( fileName, ios::out); if -#ifdef WNT +#ifdef WIN32 ( !fileStream || !fileStream.is_open() ) #else ( !fileStream || !fileStream.rdbuf()->is_open() ) @@ -737,7 +748,7 @@ void SauvWriter::writeSubMeshes() if ( toMedConn ) { for ( unsigned j = 0; j < nbElemNodes; ++j ) - transformedConn[ j ] = cellConn[ toMedConn[ j ]]; + transformedConn[ toMedConn[ j ]] = cellConn[ j ]; cellConn.swap( transformedConn ); } for ( unsigned j = 0; j < nbElemNodes; ++j, fcount++ )