From ad1d7c52f7a12f0b755a98e925bfd13c3e8daada Mon Sep 17 00:00:00 2001 From: eap Date: Thu, 8 Jul 2021 12:02:05 +0300 Subject: [PATCH] bos #24357 [CEA] Export mesh with field on vertices + fix warnings --- src/DriverMED/DriverMED_W_Field.cxx | 9 +++++---- src/DriverMED/DriverMED_W_SMESHDS_Mesh.cxx | 11 +++++++++++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/DriverMED/DriverMED_W_Field.cxx b/src/DriverMED/DriverMED_W_Field.cxx index 18d6f9734..1db5c32a8 100644 --- a/src/DriverMED/DriverMED_W_Field.cxx +++ b/src/DriverMED/DriverMED_W_Field.cxx @@ -26,16 +26,17 @@ #include "DriverMED_W_Field.h" -#include "MED_TFile.hxx" #include "DriverMED.hxx" #include "DriverMED_W_SMESHDS_Mesh.h" #include "MED_Factory.hxx" +#include "MED_TFile.hxx" #include "MED_Utilities.hxx" #include "MED_Wrapper.hxx" #include "SMDS_IteratorOnIterators.hxx" #include "SMDS_MeshElement.hxx" #include "SMDS_SetIterator.hxx" #include "SMESHDS_Mesh.hxx" +#include "SMESH_TypeDefs.hxx" //================================================================================ /*! @@ -98,10 +99,10 @@ bool DriverMED_W_Field::Set(SMESHDS_Mesh * mesh, _nbElemsByGeom.resize( 1, std::make_pair( SMDSEntity_Last, 0 )); // count nb of elems of each geometry - for ( int iG = 0; iG < SMDSEntity_Last; ++iG ) + SMDSAbs_EntityType geom = SMDSEntity_0D; + for ( ; geom < SMDSEntity_Last; SMESHUtils::Increment( geom )) { - SMDSAbs_EntityType geom = (SMDSAbs_EntityType) iG; - SMDSAbs_ElementType t = SMDS_MeshCell::ElemType( geom ); + SMDSAbs_ElementType t = SMDS_MeshCell::ElemType( geom ); if ( t != _elemType ) continue; nbElems = mesh->GetMeshInfo().NbElements( geom ); diff --git a/src/DriverMED/DriverMED_W_SMESHDS_Mesh.cxx b/src/DriverMED/DriverMED_W_SMESHDS_Mesh.cxx index 7647dc425..cb3be452e 100644 --- a/src/DriverMED/DriverMED_W_SMESHDS_Mesh.cxx +++ b/src/DriverMED/DriverMED_W_SMESHDS_Mesh.cxx @@ -1000,9 +1000,11 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::PerformInternal(LowLevelWriter myM theIsElemNames); TInt aNbNodes = MED::GetNbNodes(aElemTypeData->_geomType); + elemIterator = myMesh->elementsIterator( aElemTypeData->_smdsType ); if ( aElemTypeData->_smdsType == SMDSAbs_0DElement && ! nodesOf0D.empty() ) elemIterator = iterVecIter; + while ( elemIterator->more() ) { const SMDS_MeshElement* anElem = elemIterator->next(); @@ -1029,6 +1031,15 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::PerformInternal(LowLevelWriter myM if ( ++iElem == aCellInfo->GetNbElem() ) break; } + // fix numbers of added SMDSAbs_0DElement + if ( aElemTypeData->_smdsType == SMDSAbs_0DElement && ! nodesOf0D.empty() ) + { + iElem = myMesh->Nb0DElements(); + TInt elem0DNum = FromSmIdType( myMesh->MaxElementID() + 1 ); + for ( size_t i = 0; i < nodesOf0D.size(); ++i ) + aCellInfo->SetElemNum( iElem++, elem0DNum++); + } + // store data in a file myMed->SetCellInfo(aCellInfo); }