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