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