#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace crea { template vtkImageData* CREA_EXPORT NewVtkImageDataFromRaw( T* data, int nx, int ny, int nz, bool do_not_desalloc) { // std::cout << "NV "<::SizedName() << std::endl; vtkImageData *image = vtkImageData::New(); image->SetNumberOfScalarComponents(1); int vtktype = vtkTypeTraits::VTKTypeID(); image->SetScalarType(vtktype); image->SetDimensions(nx,ny,nz); image->SetSpacing(1,1,1); image->AllocateScalars(); vtkDataArray* array = 0; switch (vtktype) { case VTK_CHAR: array = vtkCharArray::New(); break; case VTK_SIGNED_CHAR: array = vtkSignedCharArray::New(); break; case VTK_UNSIGNED_CHAR: array = vtkUnsignedCharArray::New(); break; case VTK_SHORT: array = vtkShortArray::New(); break; case VTK_UNSIGNED_SHORT: array = vtkUnsignedShortArray::New(); break; case VTK_INT: array = vtkIntArray::New(); break; case VTK_UNSIGNED_INT: array = vtkUnsignedIntArray::New(); break; case VTK_LONG: array = vtkLongArray::New(); break; case VTK_UNSIGNED_LONG: array = vtkUnsignedLongArray::New(); break; case VTK_FLOAT: array = vtkFloatArray::New(); break; case VTK_DOUBLE: array = vtkDoubleArray::New(); break; default: creaGlobalError("NewVtkImageDataFromRaw : type " <::SizedName() <<" non implemented"); } vtkDataArrayTemplate* tarray = dynamic_cast*>(array); array->SetNumberOfComponents( 1 ); size_t size = (long)nx*(long)ny*(long)nz; // The last param of SetArray is set to 1 to keep the class from deleting the array // when it cleans up or reallocates memory. int dndesa = 0; if (do_not_desalloc) dndesa = 1; tarray->SetArray( data, size, dndesa ); image->GetPointData( )->SetScalars( tarray ); array->Delete( ); return image; } }