X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FcreaVtk.txx;h=ce64d91a8f806b91df0b1417af2d9640a9313bce;hb=a19dd400a71fc95b4f264aa9f1d6f976717a22d5;hp=a7d6a04733b9805a2180f6232302054d85a9be92;hpb=6aa75781acefe70179e26b1d5573e00c493fe0e7;p=crea.git diff --git a/src/creaVtk.txx b/src/creaVtk.txx index a7d6a04..ce64d91 100644 --- a/src/creaVtk.txx +++ b/src/creaVtk.txx @@ -1,25 +1,79 @@ #include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include namespace crea { template - vtkImageData* CREA_EXPORT NewVtkImageDataFromRaw( T* data, - size_t size) + vtkImageData* 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); - image->SetScalarType(GetVtkIdType(*data)); + int vtktype = vtkTypeTraits::VTKTypeID(); + image->SetScalarType(vtktype); + image->SetDimensions(nx,ny,nz); + image->SetSpacing(1,1,1); image->AllocateScalars(); - vtkDataArrayTemplate* array - = (vtkDataArrayTemplate*)vtkDataArrayTemplate::New(); + 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 ); - // The last param of SetArray is set to 1 to keep the class from deleting the array when it cleans up or reallocates memory. - array->SetArray( data, size, 1 ); - //Pay attention in particular to the last param of SetArray: - //http://www.vtk.org/doc/nightly/html/classvtkUnsignedShortArray.html#z798_0 - image->GetPointData( )->SetScalars( array ); + 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; }