Fix VTKRectilinearGridReader

Fix for cases when the coordinate types in the file do not match
vtkm::FloatDefault. This resulted in bad dynamic cast exceptions.
This commit is contained in:
Sujin Philip 2017-05-24 11:47:46 -04:00
parent b6993a7650
commit 3a7a62673c

@ -61,21 +61,25 @@ private:
std::string dataType;
std::size_t numPoints[3];
vtkm::cont::DynamicArrayHandle X,Y,Z;
// Always read coordinates as vtkm::FloatDefault
std::string readDataType =
vtkm::io::internal::DataTypeName<vtkm::FloatDefault>::Name();
this->DataFile->Stream >> tag >> numPoints[0] >> dataType >> std::ws;
if (tag != "X_COORDINATES")
throw vtkm::io::ErrorIO("X_COORDINATES tag not found");
this->DoReadDynamicArray(dataType, numPoints[0], 1, X);
this->DoReadDynamicArray(readDataType, numPoints[0], 1, X);
this->DataFile->Stream >> tag >> numPoints[1] >> dataType >> std::ws;
if (tag != "Y_COORDINATES")
throw vtkm::io::ErrorIO("Y_COORDINATES tag not found");
this->DoReadDynamicArray(dataType, numPoints[1], 1, Y);
this->DoReadDynamicArray(readDataType, numPoints[1], 1, Y);
this->DataFile->Stream >> tag >> numPoints[2] >> dataType >> std::ws;
if (tag != "Z_COORDINATES")
throw vtkm::io::ErrorIO("Z_COORDINATES tag not found");
this->DoReadDynamicArray(dataType, numPoints[2], 1, Z);
this->DoReadDynamicArray(readDataType, numPoints[2], 1, Z);
if (dim != vtkm::Id3(static_cast<vtkm::Id>(numPoints[0]),
static_cast<vtkm::Id>(numPoints[1]),