/usr/share/vtk/GUI/Tcl/VolumeRenderWithBoxWidget.tcl is in vtk-examples 5.8.0-5.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 | package require vtk
package require vtkinteraction
# Demonstrate how to use the vtkBoxWidget to control volume rendering within
# the interior of the widget.
# Load a volume, use the widget to control what's volume rendered. Basically
# the idea is that the vtkBoxWidget provides a box which clips the volume
# rendering.
vtkVolume16Reader v16
v16 SetDataDimensions 64 64
[v16 GetOutput] SetOrigin 0.0 0.0 0.0
v16 SetDataByteOrderToLittleEndian
v16 SetFilePrefix "$VTK_DATA_ROOT/Data/headsq/quarter"
v16 SetImageRange 1 93
v16 SetDataSpacing 3.2 3.2 1.5
vtkPiecewiseFunction tfun
tfun AddPoint 70.0 0.0
tfun AddPoint 599.0 0
tfun AddPoint 600.0 0
tfun AddPoint 1195.0 0
tfun AddPoint 1200 .2
tfun AddPoint 1300 .3
tfun AddPoint 2000 .3
tfun AddPoint 4095.0 1.0
vtkColorTransferFunction ctfun
ctfun AddRGBPoint 0.0 0.5 0.0 0.0
ctfun AddRGBPoint 600.0 1.0 0.5 0.5
ctfun AddRGBPoint 1280.0 0.9 0.2 0.3
ctfun AddRGBPoint 1960.0 0.81 0.27 0.1
ctfun AddRGBPoint 4095.0 0.5 0.5 0.5
vtkVolumeRayCastCompositeFunction compositeFunction
vtkVolumeRayCastMapper volumeMapper
volumeMapper SetInputConnection [v16 GetOutputPort]
volumeMapper SetVolumeRayCastFunction compositeFunction
vtkVolumeProperty volumeProperty
volumeProperty SetColor ctfun
volumeProperty SetScalarOpacity tfun
volumeProperty SetInterpolationTypeToLinear
volumeProperty ShadeOn
vtkVolume newvol
newvol SetMapper volumeMapper
newvol SetProperty volumeProperty
vtkOutlineFilter outline
outline SetInputConnection [v16 GetOutputPort]
vtkPolyDataMapper outlineMapper
outlineMapper SetInputConnection [outline GetOutputPort]
vtkActor outlineActor
outlineActor SetMapper outlineMapper
# Create the RenderWindow, Renderer and both Actors
#
vtkRenderer ren1
vtkRenderWindow renWin
renWin AddRenderer ren1
vtkRenderWindowInteractor iren
iren SetRenderWindow renWin
# The SetInteractor method is how 3D widgets are associated with the render
# window interactor. Internally, SetInteractor sets up a bunch of callbacks
# using the Command/Observer mechanism (AddObserver()).
vtkBoxWidget boxWidget
boxWidget SetInteractor iren
boxWidget SetPlaceFactor 1.0
# Add the actors to the renderer, set the background and size
#
ren1 AddActor outlineActor
ren1 AddVolume newvol
ren1 SetBackground 0 0 0
renWin SetSize 300 300
# Place the interactor initially. The output of the reader is used to place
# the box widget.
boxWidget SetInput [v16 GetOutput]
boxWidget PlaceWidget
boxWidget InsideOutOn
boxWidget AddObserver StartInteractionEvent StartInteraction
boxWidget AddObserver InteractionEvent ClipVolumeRender
boxWidget AddObserver EndInteractionEvent EndInteraction
set outlineProperty [boxWidget GetOutlineProperty]
$outlineProperty SetRepresentationToWireframe
$outlineProperty SetAmbient 1.0
$outlineProperty SetAmbientColor 1 1 1
$outlineProperty SetLineWidth 3
set selectedOutlineProperty [boxWidget GetSelectedOutlineProperty]
$selectedOutlineProperty SetRepresentationToWireframe
$selectedOutlineProperty SetAmbient 1.0
$selectedOutlineProperty SetAmbientColor 1 0 0
$selectedOutlineProperty SetLineWidth 3
# This adds the "u" keypress event...it pops up a Tcl interpreter.
#
iren AddObserver UserEvent {wm deiconify .vtkInteract}
iren Initialize
# Prevent the tk window from showing up then start the event loop.
wm withdraw .
# When interaction starts, the requested frame rate is increased.
proc StartInteraction {} {
renWin SetDesiredUpdateRate 10
}
# When interaction ends, the requested frame rate is decreased to
# normal levels. This causes a full resolution render to occur.
proc EndInteraction {} {
renWin SetDesiredUpdateRate 0.001
}
# The implicit function vtkPlanes is used in conjunction with the
# volume ray cast mapper to limit which portion of the volume is
# volume rendered.
vtkPlanes planes
proc ClipVolumeRender {} {
boxWidget GetPlanes planes
volumeMapper SetClippingPlanes planes
}
|