You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
204 lines
5.3 KiB
204 lines
5.3 KiB
package require vtk
|
|
package require vtkinteraction
|
|
package require vtktesting
|
|
|
|
# create two boxes and interpolate between them
|
|
#
|
|
vtkPoints pts
|
|
pts InsertNextPoint -1 -1 -1
|
|
pts InsertNextPoint 1 -1 -1
|
|
pts InsertNextPoint 1 1 -1
|
|
pts InsertNextPoint -1 1 -1
|
|
pts InsertNextPoint -1 -1 1
|
|
pts InsertNextPoint 1 -1 1
|
|
pts InsertNextPoint 1 1 1
|
|
pts InsertNextPoint -1 1 1
|
|
vtkCellArray faces
|
|
faces InsertNextCell 4
|
|
faces InsertCellPoint 0
|
|
faces InsertCellPoint 3
|
|
faces InsertCellPoint 2
|
|
faces InsertCellPoint 1
|
|
faces InsertNextCell 4
|
|
faces InsertCellPoint 4
|
|
faces InsertCellPoint 5
|
|
faces InsertCellPoint 6
|
|
faces InsertCellPoint 7
|
|
faces InsertNextCell 4
|
|
faces InsertCellPoint 0
|
|
faces InsertCellPoint 1
|
|
faces InsertCellPoint 5
|
|
faces InsertCellPoint 4
|
|
faces InsertNextCell 4
|
|
faces InsertCellPoint 1
|
|
faces InsertCellPoint 2
|
|
faces InsertCellPoint 6
|
|
faces InsertCellPoint 5
|
|
faces InsertNextCell 4
|
|
faces InsertCellPoint 2
|
|
faces InsertCellPoint 3
|
|
faces InsertCellPoint 7
|
|
faces InsertCellPoint 6
|
|
faces InsertNextCell 4
|
|
faces InsertCellPoint 3
|
|
faces InsertCellPoint 0
|
|
faces InsertCellPoint 4
|
|
faces InsertCellPoint 7
|
|
vtkUnsignedCharArray faceColors
|
|
faceColors SetNumberOfComponents 3
|
|
faceColors SetNumberOfTuples 3
|
|
faceColors InsertComponent 0 0 255
|
|
faceColors InsertComponent 0 1 0
|
|
faceColors InsertComponent 0 2 0
|
|
faceColors InsertComponent 1 0 0
|
|
faceColors InsertComponent 1 1 255
|
|
faceColors InsertComponent 1 2 0
|
|
faceColors InsertComponent 2 0 255
|
|
faceColors InsertComponent 2 1 255
|
|
faceColors InsertComponent 2 2 0
|
|
faceColors InsertComponent 3 0 0
|
|
faceColors InsertComponent 3 1 0
|
|
faceColors InsertComponent 3 2 255
|
|
faceColors InsertComponent 4 0 255
|
|
faceColors InsertComponent 4 1 0
|
|
faceColors InsertComponent 4 2 255
|
|
faceColors InsertComponent 5 0 0
|
|
faceColors InsertComponent 5 1 255
|
|
faceColors InsertComponent 5 2 255
|
|
|
|
vtkPolyData cube
|
|
cube SetPoints pts
|
|
cube SetPolys faces
|
|
[cube GetCellData] SetScalars faceColors
|
|
|
|
vtkTransform t1
|
|
t1 Translate 1 2 3
|
|
t1 RotateX 15
|
|
t1 Scale 4 2 1
|
|
vtkTransformPolyDataFilter tpdf1
|
|
tpdf1 SetInput cube
|
|
tpdf1 SetTransform t1
|
|
vtkPolyDataMapper cube1Mapper
|
|
cube1Mapper SetInputConnection [tpdf1 GetOutputPort]
|
|
vtkActor cube1
|
|
cube1 SetMapper cube1Mapper
|
|
|
|
vtkTransform t2
|
|
t2 Translate 5 10 15
|
|
t2 RotateX 22.5
|
|
t2 RotateY 15
|
|
t2 RotateZ 85
|
|
t2 Scale 1 2 4
|
|
vtkTransformPolyDataFilter tpdf2
|
|
tpdf2 SetInput cube
|
|
tpdf2 SetTransform t2
|
|
vtkPolyDataMapper cube2Mapper
|
|
cube2Mapper SetInputConnection [tpdf2 GetOutputPort]
|
|
vtkActor cube2
|
|
cube2 SetMapper cube2Mapper
|
|
|
|
vtkTransform t3
|
|
t3 Translate 5 -10 15
|
|
t3 RotateX 13
|
|
t3 RotateY 72
|
|
t3 RotateZ -15
|
|
t3 Scale 2 4 1
|
|
vtkTransformPolyDataFilter tpdf3
|
|
tpdf3 SetInput cube
|
|
tpdf3 SetTransform t3
|
|
vtkPolyDataMapper cube3Mapper
|
|
cube3Mapper SetInputConnection [tpdf3 GetOutputPort]
|
|
vtkActor cube3
|
|
cube3 SetMapper cube3Mapper
|
|
|
|
vtkTransform t4
|
|
t4 Translate 10 -5 5
|
|
t4 RotateX 66
|
|
t4 RotateY 19
|
|
t4 RotateZ 24
|
|
t4 Scale 2 .5 1
|
|
vtkTransformPolyDataFilter tpdf4
|
|
tpdf4 SetInput cube
|
|
tpdf4 SetTransform t4
|
|
vtkPolyDataMapper cube4Mapper
|
|
cube4Mapper SetInputConnection [tpdf4 GetOutputPort]
|
|
vtkActor cube4
|
|
cube4 SetMapper cube4Mapper
|
|
|
|
# Interpolate the transformation
|
|
vtkPolyDataMapper cubeMapper
|
|
cubeMapper SetInput cube
|
|
vtkActor cubeActor
|
|
cubeActor SetMapper cubeMapper
|
|
|
|
# Interpolate some transformations, test along the way
|
|
vtkTransformInterpolator interpolator
|
|
#interpolator SetInterpolationTypeToLinear
|
|
interpolator SetInterpolationTypeToSpline
|
|
interpolator AddTransform 0.0 cube1
|
|
interpolator AddTransform 8.0 cube2
|
|
interpolator AddTransform 18.2 cube3
|
|
interpolator AddTransform 24.4 cube4
|
|
interpolator Initialize
|
|
#puts [interpolator GetNumberOfTransforms]
|
|
interpolator AddTransform 0.0 t1
|
|
interpolator AddTransform 8.0 t2
|
|
interpolator AddTransform 18.2 t3
|
|
interpolator AddTransform 24.4 t4
|
|
#puts [interpolator GetNumberOfTransforms]
|
|
|
|
# Create the RenderWindow, Renderer and both Actors
|
|
#
|
|
vtkRenderer ren1
|
|
vtkRenderWindow renWin
|
|
renWin AddRenderer ren1
|
|
vtkRenderWindowInteractor iren
|
|
iren SetRenderWindow renWin
|
|
|
|
# Add the actors to the renderer, set the background and size
|
|
#
|
|
ren1 AddActor cube1
|
|
ren1 AddActor cube2
|
|
ren1 AddActor cube3
|
|
ren1 AddActor cube4
|
|
ren1 AddActor cubeActor
|
|
|
|
ren1 SetBackground 0 0 0
|
|
renWin SetSize 300 300
|
|
ren1 SetBackground 0.1 0.2 0.4
|
|
|
|
# render the image
|
|
#
|
|
iren AddObserver UserEvent {wm deiconify .vtkInteract}
|
|
vtkCamera camera
|
|
camera SetClippingRange 31.2977 81.697
|
|
camera SetFocalPoint 3.0991 -2.00445 9.78648
|
|
camera SetPosition -44.8481 -25.871 10.0645
|
|
camera SetViewAngle 30
|
|
camera SetViewUp -0.0356378 0.0599728 -0.997564
|
|
|
|
ren1 SetActiveCamera camera
|
|
|
|
renWin Render
|
|
|
|
# prevent the tk window from showing up then start the event loop
|
|
wm withdraw .
|
|
|
|
vtkTransform xform
|
|
proc animate {} {
|
|
set numSteps 250
|
|
set min [interpolator GetMinimumT]
|
|
set max [interpolator GetMaximumT]
|
|
for {set i 0} {$i <= $numSteps} {incr i} {
|
|
set t [expr double($i) * ($max - $min) / double($numSteps)]
|
|
interpolator InterpolateTransform $t xform
|
|
cubeActor SetUserMatrix [xform GetMatrix]
|
|
renWin Render
|
|
}
|
|
}
|
|
interpolator InterpolateTransform 13.2 xform
|
|
cubeActor SetUserMatrix [xform GetMatrix]
|
|
renWin Render
|
|
#animate
|
|
|
|
|
|
|