PolyDataToImageDataStencil

VTKExamples/Python/PolyData/PolyDataToImageDataStencil


Description

  • Contributed by: Peter Gruber

This is an example from the vtkPolyDataToImageStencil tests. It converts the the polydata to imagedata and masks the given imagedata.

Code

PolyDataToImageDataStencil.py

import vtk
from vtk.util.misc import vtkGetDataRoot

VTK_DATA_ROOT = vtkGetDataRoot()

# A script to test the stencil filter with a polydata stencil.
# Image pipeline
reader = vtk.vtkPNGReader()
reader.SetDataSpacing(0.8, 0.8, 1.5)
reader.SetDataOrigin(0.0, 0.0, 0.0)
reader.SetFileName("" + str(VTK_DATA_ROOT) + "/Data/fullhead15.png")
sphere = vtk.vtkSphereSource()
sphere.SetPhiResolution(12)
sphere.SetThetaResolution(12)
sphere.SetCenter(102, 102, 0)
sphere.SetRadius(60)
triangle = vtk.vtkTriangleFilter()
if vtk.VTK_MAJOR_VERSION <= 5:
    triangle.SetInput(sphere.GetOutput())
else:
    triangle.SetInputConnection(sphere.GetOutputPort())

stripper = vtk.vtkStripper()
if vtk.VTK_MAJOR_VERSION <= 5:
    stripper.SetInput(triangle.GetOutput())
else:
    stripper.SetInputConnection(triangle.GetOutputPort())
dataToStencil = vtk.vtkPolyDataToImageStencil()
if vtk.VTK_MAJOR_VERSION <= 5:
    dataToStencil.SetInput(stripper.GetOutput())
else:
    dataToStencil.SetInputConnection(stripper.GetOutputPort())
dataToStencil.SetOutputSpacing(0.8, 0.8, 1.5)
dataToStencil.SetOutputOrigin(0.0, 0.0, 0.0)

stencil = vtk.vtkImageStencil()
if vtk.VTK_MAJOR_VERSION <= 5:
    stencil.SetInput(reader.GetOutput())
    stencil.SetStencil(dataToStencil.GetOutput())
else:
    stencil.SetInputConnection(reader.GetOutputPort())
    stencil.SetStencilConnection(dataToStencil.GetOutputPort())
stencil.ReverseStencilOn()
stencil.SetBackgroundValue(500)

# test again with a contour
reader2 = vtk.vtkPNGReader()
reader2.SetDataSpacing(0.8, 0.8, 1.5)
reader2.SetDataOrigin(0.0, 0.0, 0.0)
reader2.SetFileName("" + str(VTK_DATA_ROOT) + "/Data/fullhead15.png")
plane = vtk.vtkPlane()
plane.SetOrigin(0, 0, 0)
plane.SetNormal(0, 0, 1)
cutter = vtk.vtkCutter()
if vtk.VTK_MAJOR_VERSION <= 5:
    cutter.SetInput(sphere.GetOutput())
else:
    cutter.SetInputConnection(sphere.GetOutputPort())
cutter.SetCutFunction(plane)
stripper2 = vtk.vtkStripper()
if vtk.VTK_MAJOR_VERSION <= 5:
    stripper2.SetInput(cutter.GetOutput())
else:
    stripper2.SetInputConnection(cutter.GetOutputPort())
dataToStencil2 = vtk.vtkPolyDataToImageStencil()
if vtk.VTK_MAJOR_VERSION <= 5:
    dataToStencil2.SetInput(stripper2.GetOutput())
else:
    dataToStencil2.SetInputConnection(stripper2.GetOutputPort())
dataToStencil2.SetOutputSpacing(0.8, 0.8, 1.5)
dataToStencil2.SetOutputOrigin(0.0, 0.0, 0.0)
stencil2 = vtk.vtkImageStencil()
if vtk.VTK_MAJOR_VERSION <= 5:
    stencil2.SetInput(reader2.GetOutput())
    stencil2.SetStencil(dataToStencil2.GetOutput())
else:
    stencil2.SetInputConnection(reader2.GetOutputPort())
    stencil2.SetStencilConnection(dataToStencil2.GetOutputPort())
stencil2.SetBackgroundValue(500)

imageAppend = vtk.vtkImageAppend()
if vtk.VTK_MAJOR_VERSION <= 5:
    imageAppend.SetInput(stencil.GetOutput())
    imageAppend.AddInput(stencil2.GetOutput())
else:
    imageAppend.SetInputConnection(stencil.GetOutputPort())
    imageAppend.AddInputConnection(stencil2.GetOutputPort())

viewer = vtk.vtkImageViewer()
interator = vtk.vtkRenderWindowInteractor()
if vtk.VTK_MAJOR_VERSION <= 5:
    viewer.SetInput(imageAppend.GetOutput())
else:
    viewer.SetInputConnection(imageAppend.GetOutputPort())
viewer.SetupInteractor(interator)
viewer.SetZSlice(0)
viewer.SetColorWindow(2000)
viewer.SetColorLevel(1000)
viewer.Render()

interator.Start()