[vtkusers] Get IDs within vtkImageStencilData

David Gobbi david.gobbi at gmail.com
Mon Jan 25 08:40:38 EST 2016


Hi Richard,

I've put my code up on gitlab, three classes in total:
https://gitlab.kitware.com/vtk/vtk/merge_requests/1118

Two of these classes are iterators, meaning that they allow you to
write your own loop.  The third class is a filter that extracts all of
the point data that lies within the stencil.  Here are some examples
(the examples are python, C++ code would be similar):

# Example for iterating over all point Ids in an image
iter = vtkImagePointDataIterator(image, image.GetExtent(), stencil)
scalars = image.GetPointData().GetScalars()
while (not iter.IsAtEnd()):
    # loop over a contiguous span of Ids
    for i in range(iter.GetId(), iter.GetId() + iter.GetSpanSize()):
        value = scalars.GetTuple(i)
    # advance to the next span
    iter.NextSpan()

# Example for iterating over all points in an image
iter = vtkImagePointIterator(image, image.GetExtent(), stencil)
scalars = image.GetPointData().GetScalars()
while (not iter.IsAtEnd()):
    point = iter.GetPosition()
    idx = iter.GetIndex()
    value = scalars.GetTuple(iter.GetId())
    iter.Next()

# Example for using the vtkImageToPoints filter
filter = vtkImageToPoints()
filter.SetInputConnection(reader.GetOutputPort())
filter.SetStencilConnection(polyToStencil.GetOutputPort())
filter.Update()
# Get a polydata object with points and attributes
polyData = filter.GetOutput()
points = polyData.GetPoints()
scalars = polyData.GetPointData().GetScalars()

I'm not sure if these were quite what you were looking for, I was
aiming to create general-purpose classes.

Cheers,
 - David




On Wed, Jan 20, 2016 at 9:31 AM, David Gobbi <david.gobbi at gmail.com> wrote:

> Proposed patches for VTK are at this page:
> https://gitlab.kitware.com/vtk/vtk/merge_requests
> And a log of accepted patches is at this page:
> https://gitlab.kitware.com/groups/vtk
>
> When my patch is ready, I'll send you a link.
>
>  - David
>
>
> On Wed, Jan 20, 2016 at 9:10 AM, Richard Brown <richard.j.brown at live.co.uk
> > wrote:
>
>> Great thanks David.
>>
>> Silly question, but where is gitlab?
>>
>> Regards,
>> Richard
>>
>> On 19 Jan 2016, at 23:09, David Gobbi <david.gobbi at gmail.com> wrote:
>>
>> Hi Rich,
>>
>> The quick answer is no, there are no classes in VTK to do this.
>>
>> However, I have a class of my own called vtkImageExtractVoxels that
>> almost does what you need: it creates a vtkDataArray that contains the
>> the values of all of the voxels in the stencil.  It would be trivial to
>> modify
>> this class so it so that it gives all the IDs.
>>
>> Coincidentally, just 5 minutes before I saw your email, I started editing
>> this class because I need it to give the (x,y,z) of all in-stencil voxels.
>> So I'll get it to produce the IDs as well, and then put it on gitlab if
>> you
>> want to try it out.
>>
>>  - David
>>
>> On Tue, Jan 19, 2016 at 2:59 PM, mbcx9rb9 <richard.j.brown at live.co.uk>
>> wrote:
>>
>>> Hi all,
>>>
>>> Is there any way to get a list containing the IDs of all voxels within a
>>> vtkImageStencilData?
>>>
>>> My method at the moment for getting all the voxels in the stencil is to
>>> create a vtkOBBTree and check if the centre of each voxel is inside the
>>> vtkPolyData related to the stencil, but this is very slow.
>>>
>>> Thanks in advance for any pointers,
>>> Rich
>>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20160125/4844414a/attachment.html>


More information about the vtkusers mailing list