1#!/usr/bin/env python 2 3import vtk 4from vtk.util.misc import vtkGetDataRoot 5VTK_DATA_ROOT = vtkGetDataRoot() 6 7# This little example shows how a cursor can be created in 8# image viewers, and renderers. 9 10# Global values 11 12CURSOR_X = 20 13CURSOR_Y = 20 14CURSOR_Z = 20 15 16IMAGE_MAG_X = 4 17IMAGE_MAG_Y = 4 18IMAGE_MAG_Z = 1 19 20# Pipeline stuff 21 22reader = vtk.vtkSLCReader() 23reader.SetFileName(str(VTK_DATA_ROOT) + "/Data/neghip.slc") 24 25# Cursor stuff 26 27magnify = vtk.vtkImageMagnify() 28magnify.SetInputConnection(reader.GetOutputPort()) 29magnify.SetMagnificationFactors(IMAGE_MAG_X,IMAGE_MAG_Y,IMAGE_MAG_Z) 30 31image_cursor = vtk.vtkImageCursor3D() 32image_cursor.SetInputConnection(magnify.GetOutputPort()) 33image_cursor.SetCursorPosition(CURSOR_X*IMAGE_MAG_X, 34 CURSOR_Y*IMAGE_MAG_Y, 35 CURSOR_Z*IMAGE_MAG_Z) 36image_cursor.SetCursorValue(255) 37image_cursor.SetCursorRadius(50*IMAGE_MAG_X) 38 39axes = vtk.vtkAxes() 40axes.SymmetricOn() 41axes.SetOrigin(CURSOR_X,CURSOR_Y,CURSOR_Z) 42axes.SetScaleFactor(50.0) 43 44axes_mapper = vtk.vtkPolyDataMapper() 45axes_mapper.SetInputConnection(axes.GetOutputPort()) 46 47axesActor = vtk.vtkActor() 48axesActor.SetMapper(axes_mapper) 49axesActor.GetProperty().SetAmbient(0.5) 50 51# Image viewer stuff 52 53viewer = vtk.vtkImageViewer() 54viewer.SetInputConnection(image_cursor.GetOutputPort()) 55viewer.SetZSlice(CURSOR_Z*IMAGE_MAG_Z) 56viewer.SetColorWindow(256) 57viewer.SetColorLevel(128) 58 59# Create transfer functions for opacity and color 60 61opacity_transfer_function = vtk.vtkPiecewiseFunction() 62opacity_transfer_function.AddPoint(20, 0.0) 63opacity_transfer_function.AddPoint(255, 0.2) 64 65color_transfer_function = vtk.vtkColorTransferFunction() 66color_transfer_function.AddRGBPoint(0, 0, 0, 0) 67color_transfer_function.AddRGBPoint(64, 1, 0, 0) 68color_transfer_function.AddRGBPoint(128, 0, 0, 1) 69color_transfer_function.AddRGBPoint(192, 0, 1, 0) 70color_transfer_function.AddRGBPoint(255, 0, .2, 0) 71 72# Create properties, mappers, volume actors, and ray cast function 73 74volume_property = vtk.vtkVolumeProperty() 75volume_property.SetColor(color_transfer_function) 76volume_property.SetScalarOpacity(opacity_transfer_function) 77 78volume_mapper = vtk.vtkFixedPointVolumeRayCastMapper() 79volume_mapper.SetInputConnection(reader.GetOutputPort()) 80 81volume = vtk.vtkVolume() 82volume.SetMapper(volume_mapper) 83volume.SetProperty(volume_property) 84 85# Create outline 86 87outline = vtk.vtkOutlineFilter() 88outline.SetInputConnection(reader.GetOutputPort()) 89 90outline_mapper = vtk.vtkPolyDataMapper() 91outline_mapper.SetInputConnection(outline.GetOutputPort()) 92 93outlineActor = vtk.vtkActor() 94outlineActor.SetMapper(outline_mapper) 95outlineActor.GetProperty().SetColor(1, 1, 1) 96 97# Create the renderer 98 99ren = vtk.vtkRenderer() 100ren.AddActor(axesActor) 101ren.AddVolume(volume) 102ren.SetBackground(0.1, 0.2, 0.4) 103 104renWin2 = vtk.vtkRenderWindow() 105renWin2.AddRenderer(ren) 106renWin2.SetSize(256, 256) 107 108renWin2.Render() 109