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 + '/sgFile0.vts'
12file1 = VTK_TEMP_DIR + '/sgFile1.vts'
13file2 = VTK_TEMP_DIR + '/sgFile2.vts'
14
15# Create a reader and write out the field
16combReader = vtk.vtkMultiBlockPLOT3DReader()
17combReader.SetXYZFileName(VTK_DATA_ROOT + "/Data/combxyz.bin")
18combReader.SetQFileName(VTK_DATA_ROOT + "/Data/combq.bin")
19combReader.SetScalarFunctionNumber(100)
20combReader.Update()
21output = combReader.GetOutput().GetBlock(0)
22
23
24# extract to reduce extents of grid
25extract = vtk.vtkExtractGrid()
26extract.SetInputData(output)
27extract.SetVOI(0, 28, 0, 32, 0, 24)
28extract.Update()
29
30# write just a piece (extracted piece) as well as the whole thing
31gridWriter = vtk.vtkXMLStructuredGridWriter()
32gridWriter.SetFileName(file0)
33gridWriter.SetInputConnection(extract.GetOutputPort())
34gridWriter.SetDataModeToAscii()
35gridWriter.Write()
36
37gridWriter.SetInputData(output)
38gridWriter.SetFileName(file1)
39gridWriter.SetDataModeToAppended()
40gridWriter.SetNumberOfPieces(2)
41gridWriter.Write()
42
43gridWriter.SetFileName(file2)
44gridWriter.SetDataModeToBinary()
45gridWriter.SetWriteExtent(8, 56, 4, 16, 1, 24)
46gridWriter.Write()
47
48# read the extracted grid
49reader = vtk.vtkXMLStructuredGridReader()
50reader.SetFileName(file0)
51reader.WholeSlicesOff()
52reader.Update()
53
54sg = vtk.vtkStructuredGrid()
55sg.DeepCopy(reader.GetOutput())
56cF0 = vtk.vtkContourFilter()
57cF0.SetInputData(sg)
58cF0.SetValue(0, 0.38)
59
60mapper0 = vtk.vtkPolyDataMapper()
61mapper0.SetInputConnection(cF0.GetOutputPort())
62mapper0.ScalarVisibilityOff()
63
64actor0 = vtk.vtkActor()
65actor0.SetMapper(mapper0)
66
67
68# read the whole image
69reader.SetFileName(file1)
70reader.WholeSlicesOn()
71reader.Update()
72
73sg1 = vtk.vtkStructuredGrid()
74sg1.DeepCopy(reader.GetOutput())
75cF1 = vtk.vtkContourFilter()
76cF1.SetInputData(sg1)
77cF1.SetValue(0, 0.38)
78
79mapper1 = vtk.vtkPolyDataMapper()
80mapper1.SetInputConnection(cF1.GetOutputPort())
81mapper1.ScalarVisibilityOff()
82
83actor1 = vtk.vtkActor()
84actor1.SetMapper(mapper1)
85actor1.SetPosition(0, -10, 0)
86
87
88# read the partially written grid
89reader.SetFileName(file2)
90reader.Update()
91
92cF2 = vtk.vtkContourFilter()
93cF2.SetInputConnection(reader.GetOutputPort())
94cF2.SetValue(0, 0.38)
95
96mapper2 = vtk.vtkPolyDataMapper()
97mapper2.SetInputConnection(cF2.GetOutputPort())
98mapper2.ScalarVisibilityOff()
99
100actor2 = vtk.vtkActor()
101actor2.SetMapper(mapper2)
102actor2.SetPosition(0, 10, 0)
103
104# Create the RenderWindow, Renderer and both Actors
105#
106ren = vtk.vtkRenderer()
107renWin = vtk.vtkRenderWindow()
108renWin.AddRenderer(ren)
109iren = vtk.vtkRenderWindowInteractor()
110iren.SetRenderWindow(renWin)
111
112# Add the actors to the renderer, set the background and size
113#
114ren.AddActor(actor0)
115ren.AddActor(actor1)
116ren.AddActor(actor2)
117
118renWin.SetSize(300, 300)
119renWin.Render()
120
121os.remove(file0)
122os.remove(file1)
123os.remove(file2)
124