[vtkusers] confused with vtkProbeFilter

Sujin Philip sujin.philip at kitware.com
Fri May 13 12:53:29 EDT 2016


Hi Martin,

You need to set names for the point and cell data arrays.
farray.SetName("pointdata") and farray.SetName("celldata")

after doing that your code works for me.

-Sujin


On Fri, May 13, 2016 at 12:16 PM, Martin Genet <
martin.genet at polytechnique.edu> wrote:

> Dear everyone:
>
> Sorry for the triviality, but I'm getting confused with vtkProbeFilter:
> trying to probe an image with a mesh (not the opposite: I need the mesh
> data interpolated onto the image points), but can't get it to work.
>
> Consider the following code:
>
>> import numpy
>> import vtk
>>
>> image = vtk.vtkImageData()
>> image.SetDimensions([3, 3, 1])
>> image.SetSpacing(1./numpy.array(image.GetDimensions()))
>> image.SetOrigin(numpy.array(image.GetSpacing())/2)
>>
>> points = vtk.vtkPoints()
>> points.InsertNextPoint([1./4, 1./4, 2./4])
>> points.InsertNextPoint([3./4, 1./4, 2./4])
>> points.InsertNextPoint([3./4, 3./4, 2./4])
>> points.InsertNextPoint([1./4, 3./4, 2./4])
>>
>> cell = vtk.vtkQuad()
>> cell.GetPointIds().SetId(0, 0)
>> cell.GetPointIds().SetId(1, 1)
>> cell.GetPointIds().SetId(2, 2)
>> cell.GetPointIds().SetId(3, 3)
>>
>> cell_array = vtk.vtkCellArray()
>> cell_array.InsertNextCell(cell)
>>
>> ugrid = vtk.vtkUnstructuredGrid()
>> ugrid.SetPoints(points)
>> ugrid.SetCells(vtk.VTK_QUAD, cell_array)
>>
>> farray = vtk.vtkFloatArray()
>> farray.SetNumberOfComponents(1)
>> farray.SetNumberOfTuples(1)
>> farray.SetTuple1(0, 2.)
>> ugrid.GetCellData().AddArray(farray)
>>
>> farray = vtk.vtkFloatArray()
>> farray.SetNumberOfComponents(1)
>> farray.SetNumberOfTuples(4)
>> farray.SetTuple1(0, 2.)
>> farray.SetTuple1(2, 2.)
>> farray.SetTuple1(3, 2.)
>> farray.SetTuple1(4, 2.)
>> ugrid.GetPointData().AddArray(farray)
>>
>> probe = vtk.vtkProbeFilter()
>> if (vtk.vtkVersion.GetVTKMajorVersion() >= 6):
>>     probe.SetInputData(image)
>>     probe.SetSourceData(ugrid)
>> else:
>>     probe.SetInput(image)
>>     probe.SetSource(ugrid)
>> probe.Update()
>> probed_image = probe.GetOutput()
>>
>
> Problem is: probed_image contains only one array, called
> vtkValidPointMask, but no interpolated data.
>
> If I do:
>
>> probed_scalars = probed_image.GetPointData().GetArray("vtkValidPointMask")
>> for k_voxels in xrange(probed_scalars.GetNumberOfTuples()): print
>> probed_scalars.GetTuple1(k_voxels)
>>
> I'm getting:
>
>> 0.0
>> 0.0
>> 0.0
>> 0.0
>> 1.0
>> 0.0
>> 0.0
>> 0.0
>> 0.0
>>
> So I'm guessing the filter is able to figure out which image point lies
> within the mesh and which does not, but I can't find the interpolated data?
> Any help would be super appreciated. Thanks!
>
> Martin
>
> _______________________________________________
> 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 VTK FAQ at:
> http://www.vtk.org/Wiki/VTK_FAQ
>
> Search the list archives at: http://markmail.org/search/?q=vtkusers
>
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/mailman/listinfo/vtkusers
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20160513/7bf8189c/attachment.html>


More information about the vtkusers mailing list