[vtkusers] vtkPolyDataToImageStencil

David Gobbi david.gobbi at gmail.com
Thu Apr 30 11:53:24 EDT 2015


Hi Nil,

I wrote a stencil iterator that provides the x, y, and z indices (not in
VTK yet).  It still requires an image to iterate over, but it might be
worth a glance:
https://github.com/dgobbi/AIRS/blob/master/ImageSegmentation/vtkImageRegionIterator.h

In order for your GetNext() function to work as an iterator function, it
should not have any loops, just conditionals:

if ->GetNextExtent() returns zero, it should reset m_Iter to zero and
increment m_Y
if m_Y > maxY, it should reset m_Y to zero and increment m_Z
if m_Z > maxZ, it should reset m_Z to zero and return false

Also, maxZ, maxY, and maxX should not be multiplied by two :)

 - David


On Thu, Apr 30, 2015 at 8:54 AM, Nil Goyette <nil.goyette at imeka.ca> wrote:

>  Hi all,
>
> I'm  using vtkPolyDataToImageStencil to get all voxels index inside of a
> surface. If I understand correctly, I have only two choices here:
> - vtkImageStencil to create a new image
> - vtkImageStencilIterator to iterate on the values (of another image)
> The problem is, I have a different goal in mind. I need the index of all
> voxels inside a surface.
>
> I read the vtkPolyDataToImageStencil code and tried to create my own
> "iterator" but there's probably something I don't understand;
> GetNextExtent always return 0.
> bool GetNext(int& x1, int& x2, int& y, int& z)
> {
>   // m_Y, m_Z and m_Iter == 0
>   int maxX, maxY, maxZ, dump;
>   m_ImageStencilData->GetExtent(dump, maxX, dump, maxY, dump, maxZ);
>   maxX *= 2; maxY *= 2; maxZ *= 2;
>
>   for ( ; m_Z <= maxZ; ++m_Z)
>   {
>     for ( ; m_Y <= maxY; ++m_Y)
>     {
>       if (m_ImageStencilData->GetNextExtent(x1, x2, 0, maxX, m_Y, m_Z,
> m_Iter))
>       {
>         y = m_Y; z = m_Z;
>         return true;
>       }
>     }
>   }
>   return false;
> }
>
> Is there a way to access all inside-voxels hidden in the
> vtkPolyDataToImageStencil? By index or by index range, it's not
> important. I just want to know to access them without useless work (like
> creating an image) because it's gonna be called often; it needs to be fast.
> Thank you for your time.
>
> Nil
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20150430/2efd0129/attachment.html>


More information about the vtkusers mailing list