Salome HOME
Overload of MEDLoader.ReadField method to ease access of medcoupling for new comers
[tools/medcoupling.git] / src / MEDLoader / MEDFileData.cxx
index f5a33b39146cce0c7b0b896f2900fc91408326d3..af66dda5b732f8dde5e2f91f3b6c119401255fe4 100644 (file)
@@ -21,6 +21,7 @@
 #include "MEDFileData.hxx"
 #include "MEDLoaderBase.hxx"
 #include "MEDFileSafeCaller.txx"
+#include "MEDFileBlowStrEltUp.hxx"
 
 #include "InterpKernelAutoPtr.hxx"
 
@@ -70,6 +71,7 @@ std::vector<const BigMemoryObject *> MEDFileData::getDirectChildrenWithNull() co
   ret.push_back((const MEDFileMeshes *)_meshes);
   ret.push_back((const MEDFileParameters *)_params);
   ret.push_back((const MEDFileMeshSupports *)_mesh_supports);
+  ret.push_back((const MEDFileStructureElements *)_struct_elems);
   return ret;
 
 }
@@ -230,6 +232,15 @@ bool MEDFileData::unPolyzeMeshes()
   return !meshesImpacted.empty();
 }
 
+void MEDFileData::dealWithStructureElements()
+{
+  if(_struct_elems.isNull())
+    throw INTERP_KERNEL::Exception("MEDFileData::dealWithStructureElements : no structure elements in this !");
+  if(_meshes.isNull() || _fields.isNull())
+    throw INTERP_KERNEL::Exception("MEDFileData::dealWithStructureElements : meshes and fields must be not null !");
+  MEDFileBlowStrEltUp::DealWithSE(_fields,_meshes,_struct_elems);
+}
+
 /*!
  * Precondition : all instances in \a mfds should have a single mesh with fields on it. If there is an instance with not exactly one mesh an exception will be thrown.
  * You can invoke MEDFileFields::partOfThisLyingOnSpecifiedMeshName method to make it work.
@@ -306,10 +317,11 @@ MEDFileData::MEDFileData(med_idt fid)
 try
 {
   readHeader(fid);
-  _fields=MEDFileFields::New(fid);
+  _mesh_supports=MEDFileMeshSupports::New(fid);
+  _struct_elems=MEDFileStructureElements::New(fid,_mesh_supports);
+  _fields=MEDFileFields::NewWithDynGT(fid,_struct_elems,true);
   _meshes=MEDFileMeshes::New(fid);
   _params=MEDFileParameters::New(fid);
-  _mesh_supports=MEDFileMeshSupports::New(fid);
 }
 catch(INTERP_KERNEL::Exception& e)
 {
@@ -327,6 +339,8 @@ void MEDFileData::writeLL(med_idt fid) const
     _params->writeLL(fid);
   if(_mesh_supports.isNotNull())
     _mesh_supports->writeLL(fid);
+  if(_struct_elems.isNotNull())
+    _struct_elems->writeLL(fid);
 }
 
 std::string MEDFileData::getHeader() const