1#!/usr/bin/env python
2
3import os
4import vtk
5from vtk.util.misc import vtkGetDataRoot
6from vtk.util.misc import vtkGetTempDir
7
8VTK_DATA_ROOT = vtkGetDataRoot()
9VTK_TEMP_DIR = vtkGetTempDir()
10
11file0 = VTK_TEMP_DIR + '/idFile0.vti'
12file1 = VTK_TEMP_DIR + '/idFile1.vti'
13file2 = VTK_TEMP_DIR + '/idFile2.vti'
14
15# read in some image data
16imageReader = vtk.vtkImageReader()
17imageReader.SetDataByteOrderToLittleEndian()
18imageReader.SetDataExtent(0, 63, 0, 63, 1, 93)
19imageReader.SetDataSpacing(3.2, 3.2, 1.5)
20imageReader.SetFilePrefix(VTK_DATA_ROOT + '/Data/headsq/quarter')
21imageReader.Update()
22
23# Add direction to the image here since it isn't
24# yet supported in vtkImageReader
25direction = [1, 0, 0, 0, -1, 0, 0, 0, -1]
26image = imageReader.GetOutput()
27image.SetDirectionMatrix(direction)
28
29# extract to reduce extents of grid
30extract = vtk.vtkExtractVOI()
31extract.SetInputData(image)
32extract.SetVOI(0, 63, 0, 63, 0, 45)
33extract.Update()
34
35# write just a piece (extracted piece) as well as the whole thing
36idWriter = vtk.vtkXMLImageDataWriter()
37idWriter.SetFileName(file0)
38idWriter.SetDataModeToAscii()
39idWriter.SetInputData(extract.GetOutput())
40idWriter.Write()
41
42idWriter.SetFileName(file1)
43idWriter.SetDataModeToAppended()
44idWriter.SetInputData(image)
45idWriter.SetNumberOfPieces(2)
46idWriter.Write()
47
48idWriter.SetFileName(file2)
49idWriter.SetDataModeToBinary()
50idWriter.SetWriteExtent(1, 31, 4, 63, 12, 92)
51idWriter.Write()
52
53# read the extracted grid
54reader = vtk.vtkXMLImageDataReader()
55reader.SetFileName(file0)
56reader.WholeSlicesOff()
57reader.Update()
58
59id0 = vtk.vtkImageData()
60id0.DeepCopy(reader.GetOutput())
61cF0 = vtk.vtkContourFilter()
62cF0.SetInputData(id0)
63cF0.SetValue(0, 500)
64
65mapper0 = vtk.vtkPolyDataMapper()
66mapper0.SetInputConnection(cF0.GetOutputPort())
67mapper0.ScalarVisibilityOff()
68
69actor0 = vtk.vtkActor()
70actor0.SetMapper(mapper0)
71actor0.SetPosition(180, -60, 0)
72
73
74# read the whole image
75reader.SetFileName(file1)
76reader.WholeSlicesOn()
77reader.Update()
78
79readDirection = reader.GetOutput().GetDirectionMatrix()
80assert readDirection.GetElement(0,0) == direction[0]
81assert readDirection.GetElement(0,1) == direction[1]
82assert readDirection.GetElement(0,2) == direction[2]
83assert readDirection.GetElement(1,0) == direction[3]
84assert readDirection.GetElement(1,1) == direction[4]
85assert readDirection.GetElement(1,2) == direction[5]
86assert readDirection.GetElement(2,0) == direction[6]
87assert readDirection.GetElement(2,1) == direction[7]
88assert readDirection.GetElement(2,2) == direction[8]
89
90id1 = vtk.vtkImageData()
91id1.DeepCopy(reader.GetOutput())
92cF1 = vtk.vtkContourFilter()
93cF1.SetInputData(id1)
94cF1.SetValue(0, 500)
95
96mapper1 = vtk.vtkPolyDataMapper()
97mapper1.SetInputConnection(cF1.GetOutputPort())
98mapper1.ScalarVisibilityOff()
99
100actor1 = vtk.vtkActor()
101actor1.SetMapper(mapper1)
102actor1.SetOrientation(90, 0, 0)
103
104
105# read the partially written image
106reader.SetFileName(file2)
107reader.Update()
108
109cF2 = vtk.vtkContourFilter()
110cF2.SetInputConnection(reader.GetOutputPort())
111cF2.SetValue(0, 500)
112
113mapper2 = vtk.vtkPolyDataMapper()
114mapper2.SetInputConnection(cF2.GetOutputPort())
115mapper2.ScalarVisibilityOff()
116
117actor2 = vtk.vtkActor()
118actor2.SetMapper(mapper2)
119actor2.SetOrientation(0, -90, 0)
120actor2.SetPosition(180, -30, 0)
121
122# Create the RenderWindow, Renderer and both Actors
123#
124ren = vtk.vtkRenderer()
125renWin = vtk.vtkRenderWindow()
126renWin.AddRenderer(ren)
127iren = vtk.vtkRenderWindowInteractor()
128iren.SetRenderWindow(renWin)
129
130# Add the actors to the renderer, set the background and size
131#
132ren.AddActor(actor0)
133ren.AddActor(actor1)
134ren.AddActor(actor2)
135
136renWin.SetSize(300, 300)
137renWin.Render()
138
139os.remove(file0)
140os.remove(file1)
141os.remove(file2)
142