1#!/usr/bin/env python
2import vtk
3from vtk.util.misc import vtkGetDataRoot
4VTK_DATA_ROOT = vtkGetDataRoot()
5
6# create two boxes and interpolate between them
7#
8pts = vtk.vtkPoints()
9pts.InsertNextPoint(-1,-1,-1)
10pts.InsertNextPoint(1,-1,-1)
11pts.InsertNextPoint(1,1,-1)
12pts.InsertNextPoint(-1,1,-1)
13pts.InsertNextPoint(-1,-1,1)
14pts.InsertNextPoint(1,-1,1)
15pts.InsertNextPoint(1,1,1)
16pts.InsertNextPoint(-1,1,1)
17faces = vtk.vtkCellArray()
18faces.InsertNextCell(4)
19faces.InsertCellPoint(0)
20faces.InsertCellPoint(3)
21faces.InsertCellPoint(2)
22faces.InsertCellPoint(1)
23faces.InsertNextCell(4)
24faces.InsertCellPoint(4)
25faces.InsertCellPoint(5)
26faces.InsertCellPoint(6)
27faces.InsertCellPoint(7)
28faces.InsertNextCell(4)
29faces.InsertCellPoint(0)
30faces.InsertCellPoint(1)
31faces.InsertCellPoint(5)
32faces.InsertCellPoint(4)
33faces.InsertNextCell(4)
34faces.InsertCellPoint(1)
35faces.InsertCellPoint(2)
36faces.InsertCellPoint(6)
37faces.InsertCellPoint(5)
38faces.InsertNextCell(4)
39faces.InsertCellPoint(2)
40faces.InsertCellPoint(3)
41faces.InsertCellPoint(7)
42faces.InsertCellPoint(6)
43faces.InsertNextCell(4)
44faces.InsertCellPoint(3)
45faces.InsertCellPoint(0)
46faces.InsertCellPoint(4)
47faces.InsertCellPoint(7)
48faceColors = vtk.vtkUnsignedCharArray()
49faceColors.SetNumberOfComponents(3)
50faceColors.SetNumberOfTuples(3)
51faceColors.InsertComponent(0,0,255)
52faceColors.InsertComponent(0,1,0)
53faceColors.InsertComponent(0,2,0)
54faceColors.InsertComponent(1,0,0)
55faceColors.InsertComponent(1,1,255)
56faceColors.InsertComponent(1,2,0)
57faceColors.InsertComponent(2,0,255)
58faceColors.InsertComponent(2,1,255)
59faceColors.InsertComponent(2,2,0)
60faceColors.InsertComponent(3,0,0)
61faceColors.InsertComponent(3,1,0)
62faceColors.InsertComponent(3,2,255)
63faceColors.InsertComponent(4,0,255)
64faceColors.InsertComponent(4,1,0)
65faceColors.InsertComponent(4,2,255)
66faceColors.InsertComponent(5,0,0)
67faceColors.InsertComponent(5,1,255)
68faceColors.InsertComponent(5,2,255)
69cube = vtk.vtkPolyData()
70cube.SetPoints(pts)
71cube.SetPolys(faces)
72cube.GetCellData().SetScalars(faceColors)
73t1 = vtk.vtkTransform()
74t1.Translate(1,2,3)
75t1.RotateX(15)
76t1.Scale(4,2,1)
77tpdf1 = vtk.vtkTransformPolyDataFilter()
78tpdf1.SetInputData(cube)
79tpdf1.SetTransform(t1)
80cube1Mapper = vtk.vtkPolyDataMapper()
81cube1Mapper.SetInputConnection(tpdf1.GetOutputPort())
82cube1 = vtk.vtkActor()
83cube1.SetMapper(cube1Mapper)
84t2 = vtk.vtkTransform()
85t2.Translate(5,10,15)
86t2.RotateX(22.5)
87t2.RotateY(15)
88t2.RotateZ(85)
89t2.Scale(1,2,4)
90tpdf2 = vtk.vtkTransformPolyDataFilter()
91tpdf2.SetInputData(cube)
92tpdf2.SetTransform(t2)
93cube2Mapper = vtk.vtkPolyDataMapper()
94cube2Mapper.SetInputConnection(tpdf2.GetOutputPort())
95cube2 = vtk.vtkActor()
96cube2.SetMapper(cube2Mapper)
97t3 = vtk.vtkTransform()
98t3.Translate(5,-10,15)
99t3.RotateX(13)
100t3.RotateY(72)
101t3.RotateZ(-15)
102t3.Scale(2,4,1)
103tpdf3 = vtk.vtkTransformPolyDataFilter()
104tpdf3.SetInputData(cube)
105tpdf3.SetTransform(t3)
106cube3Mapper = vtk.vtkPolyDataMapper()
107cube3Mapper.SetInputConnection(tpdf3.GetOutputPort())
108cube3 = vtk.vtkActor()
109cube3.SetMapper(cube3Mapper)
110t4 = vtk.vtkTransform()
111t4.Translate(10,-5,5)
112t4.RotateX(66)
113t4.RotateY(19)
114t4.RotateZ(24)
115t4.Scale(2,.5,1)
116tpdf4 = vtk.vtkTransformPolyDataFilter()
117tpdf4.SetInputData(cube)
118tpdf4.SetTransform(t4)
119cube4Mapper = vtk.vtkPolyDataMapper()
120cube4Mapper.SetInputConnection(tpdf4.GetOutputPort())
121cube4 = vtk.vtkActor()
122cube4.SetMapper(cube4Mapper)
123# Interpolate the transformation
124cubeMapper = vtk.vtkPolyDataMapper()
125cubeMapper.SetInputData(cube)
126cubeActor = vtk.vtkActor()
127cubeActor.SetMapper(cubeMapper)
128# Interpolate some transformations, test along the way
129interpolator = vtk.vtkTransformInterpolator()
130#interpolator SetInterpolationTypeToLinear
131interpolator.SetInterpolationTypeToSpline()
132interpolator.AddTransform(0.0,cube1)
133interpolator.AddTransform(8.0,cube2)
134interpolator.AddTransform(18.2,cube3)
135interpolator.AddTransform(24.4,cube4)
136interpolator.Initialize()
137#puts [interpolator GetNumberOfTransforms]
138interpolator.AddTransform(0.0,t1)
139interpolator.AddTransform(8.0,t2)
140interpolator.AddTransform(18.2,t3)
141interpolator.AddTransform(24.4,t4)
142#puts [interpolator GetNumberOfTransforms]
143# Create the RenderWindow, Renderer and both Actors
144#
145ren1 = vtk.vtkRenderer()
146renWin = vtk.vtkRenderWindow()
147renWin.AddRenderer(ren1)
148iren = vtk.vtkRenderWindowInteractor()
149iren.SetRenderWindow(renWin)
150# Add the actors to the renderer, set the background and size
151#
152ren1.AddActor(cube1)
153ren1.AddActor(cube2)
154ren1.AddActor(cube3)
155ren1.AddActor(cube4)
156ren1.AddActor(cubeActor)
157ren1.SetBackground(0,0,0)
158renWin.SetSize(300,300)
159ren1.SetBackground(0.1,0.2,0.4)
160# render the image
161#
162camera = vtk.vtkCamera()
163camera.SetClippingRange(31.2977,81.697)
164camera.SetFocalPoint(3.0991,-2.00445,9.78648)
165camera.SetPosition(-44.8481,-25.871,10.0645)
166camera.SetViewAngle(30)
167camera.SetViewUp(-0.0356378,0.0599728,-0.997564)
168ren1.SetActiveCamera(camera)
169renWin.Render()
170# prevent the tk window from showing up then start the event loop
171xform = vtk.vtkTransform()
172def animate():
173    numSteps = 250
174    min = interpolator.GetMinimumT()
175    max = interpolator.GetMaximumT()
176    i = 0
177    while i <= numSteps:
178        t = float(i)*(max-min)/float(numSteps)
179        interpolator.InterpolateTransform(t,xform)
180        cubeActor.SetUserMatrix(xform.GetMatrix())
181        renWin.Render()
182        i = i + 1
183
184
185interpolator.InterpolateTransform(13.2,xform)
186cubeActor.SetUserMatrix(xform.GetMatrix())
187renWin.Render()
188#animate()
189# --- end of script --
190