X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FMEDLoader%2FSauvWriter.cxx;h=73e59c3d4320b12ee6c219a0e37f3da7cef53450;hb=96bc4e98b56b27856dced632cdb6767afb411179;hp=0ff5777aa3a41b4f95905b4eee99bcbdb5cf38c8;hpb=6be7c1a24c8879945e9451245a92d66d3aa091f8;p=tools%2Fmedcoupling.git diff --git a/src/MEDLoader/SauvWriter.cxx b/src/MEDLoader/SauvWriter.cxx index 0ff5777aa..73e59c3d4 100644 --- a/src/MEDLoader/SauvWriter.cxx +++ b/src/MEDLoader/SauvWriter.cxx @@ -212,11 +212,9 @@ namespace } } -//================================================================================ -/*! - * \brief Creates SauvWriter - */ -//================================================================================ +SauvWriter::SauvWriter():_cpy_grp_if_on_single_family(false) +{ +} SauvWriter* SauvWriter::New() { @@ -233,6 +231,16 @@ std::vector SauvWriter::getDirectChildren() const return std::vector(); } +void SauvWriter::setCpyGrpIfOnASingleFamilyStatus(bool status) +{ + _cpy_grp_if_on_single_family=status; +} + +bool SauvWriter::getCpyGrpIfOnASingleFamilyStatus() const +{ + return _cpy_grp_if_on_single_family; +} + //================================================================================ /*! * \brief Fills own DS by MEDFileData @@ -447,7 +455,23 @@ void SauvWriter::fillGroupSubMeshes() if (k != famNames.size()) famSubMeshes.resize(k); SubMesh* grpSubMesh = addSubMesh( groupName, famSubMeshes[0]->_dimRelExt ); - grpSubMesh->_subs.swap( famSubMeshes ); + if(!_cpy_grp_if_on_single_family) + grpSubMesh->_subs.swap( famSubMeshes ); + else + { + /* If a group sub mesh consists of only one family, the group is written as + * a copy of this family. + * A mesh composed of only one submesh may cause an issue with some Gibi operators.*/ + if (famSubMeshes.size() == 1) + { + for(int i = 0; i < famSubMeshes[0]->cellIDsByTypeSize() ; i++) + { + grpSubMesh->_cellIDsByType[i] = famSubMeshes[0]->_cellIDsByType[i]; + } + } + else + grpSubMesh->_subs.swap( famSubMeshes ); + } } } @@ -578,7 +602,16 @@ void SauvWriter::makeProfileIDs( SubMesh* sm, vector idsPerType( 1, profile ); MEDCouplingAutoRefCountObjectPtr resIDs = uMesh->checkTypeConsistencyAndContig( code, idsPerType ); - ids.assign( resIDs->begin(), resIDs->end() ); + if (( const DataArrayInt *) resIDs ) + { + ids.assign( resIDs->begin(), resIDs->end() ); + } + else // mesh includes only one type + { + int nbE = code[1]; + for ( ids.resize( nbE ); nbE; --nbE ) + ids[ nbE-1 ] = nbE-1; + } } } @@ -588,10 +621,10 @@ void SauvWriter::makeProfileIDs( SubMesh* sm, */ //================================================================================ -void SauvWriter::write(const char* fileName) +void SauvWriter::write(const std::string& fileName) { std::fstream fileStream; - fileStream.open( fileName, ios::out); + fileStream.open( fileName.c_str(), ios::out); if #ifdef WIN32 ( !fileStream || !fileStream.is_open() )