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 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351
|
package require vtk
set threshold 10
# Create a gaussian
vtkImageGaussianSource gs
gs SetWholeExtent 0 30 0 30 0 30
gs SetMaximum 255.0
gs SetStandardDeviation 5
gs SetCenter 15 15 15
# threshold to leave a gap that should show up for
# gradient opacity
vtkImageThreshold t
t SetInputConnection [gs GetOutputPort]
t ReplaceInOn
t SetInValue 0
t ThresholdBetween 150 200
# Use a shift scale to convert to unsigned char
vtkImageShiftScale ss
ss SetInputConnection [t GetOutputPort]
ss SetOutputScalarTypeToUnsignedChar
# grid will be used for two component dependent
vtkImageGridSource grid0
grid0 SetDataScalarTypeToUnsignedChar
grid0 SetGridSpacing 10 10 10
grid0 SetLineValue 200
grid0 SetFillValue 10
grid0 SetDataExtent 0 30 0 30 0 30
# use dilation to thicken the grid
vtkImageContinuousDilate3D d
d SetInputConnection [grid0 GetOutputPort]
d SetKernelSize 3 3 3
# Now make a two component dependent
vtkImageAppendComponents iac
iac AddInputConnection [d GetOutputPort]
iac AddInputConnection [ss GetOutputPort]
# Some more gaussians for the four component indepent case
vtkImageGaussianSource gs1
gs1 SetWholeExtent 0 30 0 30 0 30
gs1 SetMaximum 255.0
gs1 SetStandardDeviation 4
gs1 SetCenter 5 5 5
vtkImageThreshold t1
t1 SetInputConnection [gs1 GetOutputPort]
t1 ReplaceInOn
t1 SetInValue 0
t1 ThresholdBetween 150 256
vtkImageGaussianSource gs2
gs2 SetWholeExtent 0 30 0 30 0 30
gs2 SetMaximum 255.0
gs2 SetStandardDeviation 4
gs2 SetCenter 12 12 12
vtkImageGaussianSource gs3
gs3 SetWholeExtent 0 30 0 30 0 30
gs3 SetMaximum 255.0
gs3 SetStandardDeviation 4
gs3 SetCenter 19 19 19
vtkImageThreshold t3
t3 SetInputConnection [gs3 GetOutputPort]
t3 ReplaceInOn
t3 SetInValue 0
t3 ThresholdBetween 150 256
vtkImageGaussianSource gs4
gs4 SetWholeExtent 0 30 0 30 0 30
gs4 SetMaximum 255.0
gs4 SetStandardDeviation 4
gs4 SetCenter 26 26 26
# we need a few append filters ...
vtkImageAppendComponents iac1
iac1 AddInputConnection [t1 GetOutputPort]
iac1 AddInputConnection [gs2 GetOutputPort]
vtkImageAppendComponents iac2
iac2 AddInputConnection [iac1 GetOutputPort]
iac2 AddInputConnection [t3 GetOutputPort]
vtkImageAppendComponents iac3
iac3 AddInputConnection [iac2 GetOutputPort]
iac3 AddInputConnection [gs4 GetOutputPort]
# create the four component dependend -
# use lines in x, y, z for colors
vtkImageGridSource gridR
gridR SetDataScalarTypeToUnsignedChar
gridR SetGridSpacing 10 100 100
gridR SetLineValue 250
gridR SetFillValue 100
gridR SetDataExtent 0 30 0 30 0 30
vtkImageContinuousDilate3D dR
dR SetInputConnection [gridR GetOutputPort]
dR SetKernelSize 2 2 2
vtkImageGridSource gridG
gridG SetDataScalarTypeToUnsignedChar
gridG SetGridSpacing 100 10 100
gridG SetLineValue 250
gridG SetFillValue 100
gridG SetDataExtent 0 30 0 30 0 30
vtkImageContinuousDilate3D dG
dG SetInputConnection [gridG GetOutputPort]
dG SetKernelSize 2 2 2
vtkImageGridSource gridB
gridB SetDataScalarTypeToUnsignedChar
gridB SetGridSpacing 100 100 10
gridB SetLineValue 0
gridB SetFillValue 250
gridB SetDataExtent 0 30 0 30 0 30
vtkImageContinuousDilate3D dB
dB SetInputConnection [gridB GetOutputPort]
dB SetKernelSize 2 2 2
# need some appending
vtkImageAppendComponents iacRG
iacRG AddInputConnection [dR GetOutputPort]
iacRG AddInputConnection [dG GetOutputPort]
vtkImageAppendComponents iacRGB
iacRGB AddInputConnection [iacRG GetOutputPort]
iacRGB AddInputConnection [dB GetOutputPort]
vtkImageAppendComponents iacRGBA
iacRGBA AddInputConnection [iacRGB GetOutputPort]
iacRGBA AddInputConnection [ss GetOutputPort]
# We need a bunch of opacity functions
# this one is a simple ramp to .2
vtkPiecewiseFunction rampPoint2
rampPoint2 AddPoint 0 0.0
rampPoint2 AddPoint 255 0.2
# this one is a simple ramp to 1
vtkPiecewiseFunction ramp1
ramp1 AddPoint 0 0.0
ramp1 AddPoint 255 1.0
# this one shows a sharp surface
vtkPiecewiseFunction surface
surface AddPoint 0 0.0
surface AddPoint 10 0.0
surface AddPoint 50 1.0
surface AddPoint 255 1.0
# this one is constant 1
vtkPiecewiseFunction constant1
constant1 AddPoint 0 1.0
constant1 AddPoint 255 1.0
# this one is used for gradient opacity
vtkPiecewiseFunction gop
gop AddPoint 0 0.0
gop AddPoint 20 0.0
gop AddPoint 60 1.0
gop AddPoint 255 1.0
# We need a bunch of color functions
# This one is a simple rainbow
vtkColorTransferFunction rainbow
rainbow SetColorSpaceToHSV
rainbow HSVWrapOff
rainbow AddHSVPoint 0 0.1 1.0 1.0
rainbow AddHSVPoint 255 0.9 1.0 1.0
# this is constant red
vtkColorTransferFunction red
red AddRGBPoint 0 1 0 0
red AddRGBPoint 255 1 0 0
# this is constant green
vtkColorTransferFunction green
green AddRGBPoint 0 0 1 0
green AddRGBPoint 255 0 1 0
# this is constant blue
vtkColorTransferFunction blue
blue AddRGBPoint 0 0 0 1
blue AddRGBPoint 255 0 0 1
# this is constant yellow
vtkColorTransferFunction yellow
yellow AddRGBPoint 0 1 1 0
yellow AddRGBPoint 255 1 1 0
vtkRenderer ren1
vtkRenderWindow renWin
renWin AddRenderer ren1
renWin SetSize 500 500
vtkRenderWindowInteractor iren
iren SetRenderWindow renWin
[ren1 GetCullers] InitTraversal
set culler [[ren1 GetCullers] GetNextItem]
$culler SetSortingStyleToBackToFront
# We need 25 mapper / actor pairs which we will render
# in a grid. Going down we will vary the input data
# with the top row unsigned char, then float, then
# two dependent components, then four dependent components
# then four independent components. Going across we
# will vary the rendering method with MIP, Composite,
# Composite Shade, Composite GO, and Composite GO Shade.
for { set j 0 } { $j < 5 } { incr j } {
for { set i 0 } { $i < 5 } { incr i } {
vtkVolumeProperty volumeProperty${i}${j}
vtkFixedPointVolumeRayCastMapper volumeMapper${i}${j}
volumeMapper${i}${j} SetSampleDistance 0.25
volumeMapper${i}${j} SetNumberOfThreads 1
vtkVolume volume${i}${j}
volume${i}${j} SetMapper volumeMapper${i}${j}
volume${i}${j} SetProperty volumeProperty${i}${j}
volume${i}${j} AddPosition [expr $i*30] [expr $j*30] 0
ren1 AddVolume volume${i}${j}
}
}
for { set i 0 } { $i < 5 } { incr i } {
volumeMapper0${i} SetInputConnection [t GetOutputPort]
volumeMapper1${i} SetInputConnection [ss GetOutputPort]
volumeMapper2${i} SetInputConnection [iac GetOutputPort]
volumeMapper3${i} SetInputConnection [iac3 GetOutputPort]
volumeMapper4${i} SetInputConnection [iacRGBA GetOutputPort]
volumeMapper${i}0 SetBlendModeToMaximumIntensity
volumeMapper${i}1 SetBlendModeToComposite
volumeMapper${i}2 SetBlendModeToComposite
volumeMapper${i}3 SetBlendModeToComposite
volumeMapper${i}4 SetBlendModeToComposite
volumeProperty0${i} IndependentComponentsOn
volumeProperty1${i} IndependentComponentsOn
volumeProperty2${i} IndependentComponentsOff
volumeProperty3${i} IndependentComponentsOn
volumeProperty4${i} IndependentComponentsOff
volumeProperty0${i} SetColor rainbow
volumeProperty0${i} SetScalarOpacity rampPoint2
volumeProperty0${i} SetGradientOpacity constant1
volumeProperty1${i} SetColor rainbow
volumeProperty1${i} SetScalarOpacity rampPoint2
volumeProperty1${i} SetGradientOpacity constant1
volumeProperty2${i} SetColor rainbow
volumeProperty2${i} SetScalarOpacity rampPoint2
volumeProperty2${i} SetGradientOpacity constant1
volumeProperty3${i} SetColor 0 red
volumeProperty3${i} SetColor 1 green
volumeProperty3${i} SetColor 2 blue
volumeProperty3${i} SetColor 3 yellow
volumeProperty3${i} SetScalarOpacity 0 rampPoint2
volumeProperty3${i} SetScalarOpacity 1 rampPoint2
volumeProperty3${i} SetScalarOpacity 2 rampPoint2
volumeProperty3${i} SetScalarOpacity 3 rampPoint2
volumeProperty3${i} SetGradientOpacity 0 constant1
volumeProperty3${i} SetGradientOpacity 1 constant1
volumeProperty3${i} SetGradientOpacity 2 constant1
volumeProperty3${i} SetGradientOpacity 3 constant1
volumeProperty3${i} SetComponentWeight 0 1
volumeProperty3${i} SetComponentWeight 1 1
volumeProperty3${i} SetComponentWeight 2 1
volumeProperty3${i} SetComponentWeight 3 1
volumeProperty4${i} SetColor rainbow
volumeProperty4${i} SetScalarOpacity rampPoint2
volumeProperty4${i} SetGradientOpacity constant1
volumeProperty${i}2 ShadeOn
volumeProperty${i}4 ShadeOn 0
volumeProperty${i}4 ShadeOn 1
volumeProperty${i}4 ShadeOn 2
volumeProperty${i}4 ShadeOn 3
}
volumeProperty00 SetScalarOpacity ramp1
volumeProperty10 SetScalarOpacity ramp1
volumeProperty20 SetScalarOpacity ramp1
volumeProperty30 SetScalarOpacity 0 surface
volumeProperty30 SetScalarOpacity 1 surface
volumeProperty30 SetScalarOpacity 2 surface
volumeProperty30 SetScalarOpacity 3 surface
volumeProperty40 SetScalarOpacity ramp1
volumeProperty02 SetScalarOpacity surface
volumeProperty12 SetScalarOpacity surface
volumeProperty22 SetScalarOpacity surface
volumeProperty32 SetScalarOpacity 0 surface
volumeProperty32 SetScalarOpacity 1 surface
volumeProperty32 SetScalarOpacity 2 surface
volumeProperty32 SetScalarOpacity 3 surface
volumeProperty42 SetScalarOpacity surface
volumeProperty04 SetScalarOpacity surface
volumeProperty14 SetScalarOpacity surface
volumeProperty24 SetScalarOpacity surface
volumeProperty34 SetScalarOpacity 0 surface
volumeProperty34 SetScalarOpacity 1 surface
volumeProperty34 SetScalarOpacity 2 surface
volumeProperty34 SetScalarOpacity 3 surface
volumeProperty44 SetScalarOpacity surface
volumeProperty03 SetGradientOpacity gop
volumeProperty13 SetGradientOpacity gop
volumeProperty23 SetGradientOpacity gop
volumeProperty33 SetGradientOpacity 0 gop
volumeProperty33 SetGradientOpacity 2 gop
volumeProperty43 SetGradientOpacity gop
volumeProperty33 SetScalarOpacity 0 ramp1
volumeProperty33 SetScalarOpacity 2 ramp1
volumeProperty04 SetGradientOpacity gop
volumeProperty14 SetGradientOpacity gop
volumeProperty24 SetGradientOpacity gop
volumeProperty34 SetGradientOpacity 0 gop
volumeProperty34 SetGradientOpacity 2 gop
volumeProperty44 SetGradientOpacity gop
renWin Render
[ren1 GetActiveCamera] Dolly 1.3
[ren1 GetActiveCamera] Azimuth 15
[ren1 GetActiveCamera] Elevation 5
ren1 ResetCameraClippingRange
wm withdraw .
iren Initialize
|