Salome HOME
Generalization of meshes without cells but only nodes
[modules/paravis.git] / src / Plugins / MEDWriter / IO / vtkMEDWriter.cxx
index d268f5e451e3a6b8b96446431bed27cf21f43f8b..69e1cba972de2130a23de132e524909984f7c71c 100644 (file)
@@ -22,6 +22,7 @@
 
 #include "vtkAdjacentVertexIterator.h"
 #include "vtkIntArray.h"
+#include "vtkLongArray.h"
 #include "vtkCellData.h"
 #include "vtkPointData.h"
 #include "vtkFloatArray.h"
@@ -152,6 +153,13 @@ DataArrayInt *ConvertVTKArrayToMCArrayInt(vtkDataArray *data)
       std::copy(pt,pt+nbElts,ptOut);
       return ret.retn();
     }
+  vtkLongArray *d1(vtkLongArray::SafeDownCast(data));
+  if(d1)
+    {
+      const long *pt(d1->GetPointer(0));
+      std::copy(pt,pt+nbElts,ptOut);
+      return ret.retn();
+    }
   std::ostringstream oss;
   oss << "ConvertVTKArrayToMCArrayInt : unrecognized array \"" << typeid(*data).name() << "\" type !";
   throw MZCException(oss.str());
@@ -201,7 +209,8 @@ DataArray *ConvertVTKArrayToMCArray(vtkDataArray *data)
   if(d0 || d1)
     return ConvertVTKArrayToMCArrayDouble(data);
   vtkIntArray *d2(vtkIntArray::SafeDownCast(data));
-  if(d2)
+  vtkLongArray *d3(vtkLongArray::SafeDownCast(data));
+  if(d2 || d3)
     return ConvertVTKArrayToMCArrayInt(data);
   std::ostringstream oss;
   oss << "ConvertVTKArrayToMCArray : unrecognized array \"" << typeid(*data).name() << "\" type !";
@@ -486,7 +495,14 @@ void AddNodeFields(MEDFileData *mfd, vtkDataSetAttributes *dsa)
   MEDFileUMesh *mmu(dynamic_cast<MEDFileUMesh *>(mm));
   if(!mmu)
     throw MZCException("AddNodeFields : internal error 2 !");
-  MCAuto<MEDCouplingUMesh> mesh(mmu->getMeshAtLevel(0));
+  MCAuto<MEDCouplingUMesh> mesh;
+  if(!mmu->getNonEmptyLevels().empty())
+    mesh=mmu->getMeshAtLevel(0);
+  else
+    {
+      mesh=MEDCouplingUMesh::Build0DMeshFromCoords(mmu->getCoords());
+      mesh->setName(mmu->getName());
+    }
   int nba(dsa->GetNumberOfArrays());
   for(int i=0;i<nba;i++)
     {
@@ -705,7 +721,6 @@ void ConvertFromUnstructuredGrid(MEDFileData *ret, vtkUnstructuredGrid *ds, cons
         }
     }
   int dummy(0);
-  int meshDim(lev->getMaxValue(dummy));
   MCAuto<DataArrayInt> levs(lev->getDifferentValues());
   std::vector< MicroField > ms;
   vtkIdTypeArray *faces(ds->GetFaces()),*faceLoc(ds->GetFaceLocations());