X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FDriverMED%2FDriverMED_W_Field.cxx;h=938927572aaaa9e08f599a3a3f559776580e5986;hb=63a442b2c3cbc5e2155d83e86dfdb77d6961fab3;hp=721396f04f08fee1bb5b1cf25fe7f07cc0bf8849;hpb=97787812e26d555a6141ece38c9f13167410f425;p=modules%2Fsmesh.git diff --git a/src/DriverMED/DriverMED_W_Field.cxx b/src/DriverMED/DriverMED_W_Field.cxx index 721396f04..938927572 100644 --- a/src/DriverMED/DriverMED_W_Field.cxx +++ b/src/DriverMED/DriverMED_W_Field.cxx @@ -27,6 +27,7 @@ #include "DriverMED_W_Field.h" #include "DriverMED.hxx" +#include "DriverMED_W_SMESHDS_Mesh.h" #include "MED_Factory.hxx" #include "MED_Utilities.hxx" #include "MED_Wrapper.hxx" @@ -108,6 +109,20 @@ bool DriverMED_W_Field::Set(SMESHDS_Mesh * mesh, _nbElemsByGeom.push_back( make_pair( geom, nbElems + _nbElemsByGeom.back().second )); } + // add nodes of missing 0D elements on VERTEXes + if ( _addODOnVertices && _elemType == SMDSAbs_0DElement ) + { + std::vector< const SMDS_MeshElement* >& nodes = _elemsByGeom[SMDSEntity_Node]; + if ( nodes.empty() ) + DriverMED_W_SMESHDS_Mesh::getNodesOfMissing0DOnVert( myMesh, nodes ); + if ( !nodes.empty() ) + { + if ( _nbElemsByGeom.size() == 1 ) + _nbElemsByGeom.push_back( make_pair( SMDSEntity_0D, 0)); + _nbElemsByGeom.push_back( make_pair( SMDSEntity_Node, + nodes.size() + _nbElemsByGeom.back().second )); + } + } // sort elements by their geometry int iGeoType, nbGeomTypes = _nbElemsByGeom.size() - 1; @@ -119,6 +134,7 @@ bool DriverMED_W_Field::Set(SMESHDS_Mesh * mesh, nbElems = _nbElemsByGeom[iG].second - _nbElemsByGeom[iG-1].second; _elemsByGeom[ iGeoType ].reserve( nbElems ); } + iGeoType = _nbElemsByGeom[1].first; // for missing 0D if ( _elemsByGeom[ iGeoType ].empty() ) { nbElems = mesh->GetMeshInfo().NbElements( _elemType ); @@ -283,6 +299,14 @@ Driver_Mesh::Status DriverMED_W_Field::Perform() } medFile->SetFieldInfo( fieldInfo ); + // specific treatment of added 0D elements + if ( _nbElemsByGeom.size() == 3 && + _nbElemsByGeom[1].first == SMDSEntity_0D ) + { + _nbElemsByGeom[1].second += _nbElemsByGeom[2].second; + _nbElemsByGeom.resize( 2 ); + } + // create a time stamp MED::TGeom2Size type2nb; for ( size_t iG = 1; iG < _nbElemsByGeom.size(); ++iG )