[vtkusers] intersect plane and vtkPolyData

João Domingos joao.sousa.domingos at gmail.com
Thu Aug 2 17:11:07 EDT 2012


Dear all,

an anyone tried this before for a specific given plane of vtkImageReslice
type?

Any help is appreciated!


Many thanks,
Joao




On 30 July 2012 13:17, João Domingos <joao.sousa.domingos at gmail.com> wrote:

> Dear all,
>
> I was trying to use the PolyDataToImageData example (
> http://www.vtk.org/Wiki/VTK/Examples/PolyData/PolyDataToImageData) to get
> the intersection of a vtkPolyData with a plane in a given orientation, but
> to start with, I cannot even run the example in python. With the code below
> I get a TypeError: no overloads of SetInput() take 0 arguments
>
>
>
> #--------------------------------------------------------------------------------
> # Create LV segmentation image where the foreground voxels are 1 and the
> background voxels are 0. Internally vtkPolyDataToImageStencil is utilized.
> The resultant image is saved to disk
>  spacing = np.zeros(3)
>
> whiteImage = vtk.vtkImageData()
> bounds = self.dsurf.dense_representation_grid.GetBounds()
>  spacing[0] = 0.0960 # desired volume spacing (.mha info): ElementSpacing
> = 0.0960 0.0968 0.0726
>  spacing[1] = 0.0968
> spacing[2] = 0.0726
> whiteImage.SetSpacing(spacing)
>  # Compute dimensions:
>  dim = []
> dim.append((bounds[1] - bounds[0])/spacing[0])
> dim.append((bounds[3] - bounds[2])/spacing[1])
>  dim.append((bounds[5] - bounds[4])/spacing[2])
>
> whiteImage.SetDimensions(dim)
>  whiteImage.SetExtent(0, dim[0]-1,0,dim[1]-1,0,dim[2]-1)
>
> origin = np.zeros(3)
>
> origin[0] = bounds[0] + spacing[0] / 2;
>   origin[1] = bounds[2] + spacing[1] / 2;
>   origin[2] = bounds[4] + spacing[2] / 2;
>   whiteImage.SetOrigin(origin);
>
> whiteImage.SetScalarTypeToUnsignedChar()
> whiteImage.AllocateScalars();
>
> inval = 255;
>   outval = 0;
>   count = whiteImage.GetNumberOfPoints();
>   for i in range(0,count):
>     whiteImage.GetPointData().GetScalars().SetTuple1(i, inval);
>
> # polygonal data --> image stencil:
> pol2stenc = vtk.vtkPolyDataToImageStencil()
>  pol2stenc.SetInput(self.dsurf.dense_representation_grid)
> pol2stenc.SetOutputOrigin(origin);
>   pol2stenc.SetOutputSpacing(spacing);
>   pol2stenc.SetOutputWholeExtent(whiteImage.GetExtent());
>   pol2stenc.Update();
>
> # cut the corresponding white image and set the background:
>  imgstenc = vtk.vtkImageStencil
> imgstenc.SetInput(whiteImage);
>   imgstenc.SetStencilConnection(pol2stenc.GetOutputPort());
>  imgstenc.ReverseStencilOff();
>   imgstenc.SetBackgroundValue(outval);
>   imgstenc.Update();
>
>   writer = vtk.vtkMetaImageWriter()
>   writer.SetFileName("SphereVolume.mhd");
>  writer.SetInputData(imgstenc.GetOutput());
> writer.Write();
>
> #------------------------------------------------------------------------------------
>
>
> Do you see what can the problem be? Also, I have a plane, vtkImageReslice
> type, that I want to specifically give as input to the vtkImageStencil (If
> I'm not mistaken) to get the intersection of my vtkPolyData with that
> oriented plane. How can I do this the most simple way?
>
>
> Many thanks for your time,
> Joao
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20120802/18de10cc/attachment.htm>


More information about the vtkusers mailing list