Hi paraview list Based on this blog post: http://www.kitware.com/blog/home/post/534, I am trying to make a Python plugin (source) that reads a stack of unsigned short TIFFs (uint16) and outputs 3D unsigned short imagedata in Paraview.
Assigning the geometry to the imagedata works fine (see def RequestInformation). My problem is that the values of the voxels in the imagedata is not assigned correct (see def RequestData). According to Paraview information tab the data type is unsigned short, but when reading in a known TIFF (8x8 with uint16 values 1..64) the values of the imagedata are not correct. I suspect the last line "array.SetValue(offset+v, vals.GetValue(v))" is the problem. Does the vals.GetValue(v) get casted into a Python type int before stored in the array? When I print vals.GetValue(v) to a textfile, I can see that I read the correct values from the TIFF. Can anybody see what the problem is? Cheers, Allan def RequestData(): import os from paraview import vtk from vtk import vtkTIFFReader # this reader does not exist in paraview?? filepath = Filepath # path to file filestr = Filename # string containing filename and %d first = First # first image, e.g. 0 or 1 last = Last # last image N = last-first+1 # number of images # Get a vtkImageData object for the output pdo = self.GetOutput() print 'read' # set up reader reader = vtkTIFFReader() filename = filestr % first reader.SetFileName(os.path.join(filepath, filename)) reader.Update() # get tiff info ext = reader.GetDataExtent() # set up output volume pdo.SetExtent(0, ext[1], 0, ext[3], 0, N-1) #pdo.SetDimensions(ext[1]+1,ext[3]+1,N) pdo.SetOrigin(0,0,0) pdo.SetSpacing(1,1,1) pdo.AllocateScalars(vtk.VTK_UNSIGNED_SHORT,1) # temporary array for voxel values array = vtk.vtkUnsignedShortArray() array.SetName('Voxels') array.SetNumberOfComponents(1) #array.SetNumberOfTuples(pdo.GetNumberOfPoints()) array.SetNumberOfValues(pdo.GetNumberOfPoints()) pdo.GetPointData().AddArray(array) # fill array with tiffs for i in range(N): filename = filestr % (first+i) print filename reader.SetFileName(os.path.join(filepath, filename)) reader.Update() image = reader.GetOutput() vals = image.GetPointData().GetArray('Tiff Scalars') offset = i*N for v in range((ext[0]+1)*(ext[1]+1)): print vals.GetValue(v) array.SetValue(offset+v, vals.GetValue(v)) def RequestInformation(): import os from paraview import vtk, util from vtk import vtkTIFFReader filepath = Filepath # path to file filestr = Filename # string containing filename and %d first = First # first image, e.g. 0 or 1 last = Last # last image # set up reader reader = vtkTIFFReader() filename = filestr % first reader.SetFileName(os.path.join(filepath, filename)) reader.Update() # get tiff info ext = reader.GetDataExtent() # update extent information util.SetOutputWholeExtent(self, [0, ext[1], 0, ext[3], 0, last-first])
_______________________________________________ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the ParaView Wiki at: http://paraview.org/Wiki/ParaView Follow this link to subscribe/unsubscribe: http://public.kitware.com/mailman/listinfo/paraview