Salome HOME
bos #24357 [CEA] Export mesh with field on vertices
authoreap <eap@opencascade.com>
Thu, 8 Jul 2021 09:02:05 +0000 (12:02 +0300)
committereap <eap@opencascade.com>
Thu, 8 Jul 2021 09:02:05 +0000 (12:02 +0300)
+ fix warnings

src/DriverMED/DriverMED_W_Field.cxx
src/DriverMED/DriverMED_W_SMESHDS_Mesh.cxx

index 18d6f97..1db5c32 100644 (file)
 
 #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 );
index 7647dc4..cb3be45 100644 (file)
@@ -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<TInt>( myMesh->MaxElementID() + 1 );
+          for ( size_t i = 0; i < nodesOf0D.size(); ++i )
+            aCellInfo->SetElemNum( iElem++, elem0DNum++);
+        }
+
         // store data in a file
         myMed->SetCellInfo(aCellInfo);
       }