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