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
|
package require vtk
package require vtkinteraction
set Scale 5
vtkLookupTable lut
lut SetHueRange 0.6 0
lut SetSaturationRange 1.0 0
lut SetValueRange 0.5 1.0
vtkDEMReader demModel
demModel SetFileName $VTK_DATA_ROOT/Data/SainteHelens.dem
demModel Update
demModel Print
set lo [expr $Scale * [lindex [demModel GetElevationBounds] 0]]
set hi [expr $Scale * [lindex [demModel GetElevationBounds] 1]]
vtkLODActor demActor
# create a pipeline for each lod mapper
vtkImageShrink3D shrink16
shrink16 SetShrinkFactors 16 16 1
shrink16 SetInputConnection [demModel GetOutputPort]
shrink16 AveragingOn
vtkImageDataGeometryFilter geom16
geom16 SetInputConnection [shrink16 GetOutputPort]
geom16 ReleaseDataFlagOn
vtkWarpScalar warp16
warp16 SetInputConnection [geom16 GetOutputPort]
warp16 SetNormal 0 0 1
warp16 UseNormalOn
warp16 SetScaleFactor $Scale
warp16 ReleaseDataFlagOn
vtkElevationFilter elevation16
elevation16 SetInputConnection [warp16 GetOutputPort]
elevation16 SetLowPoint 0 0 $lo
elevation16 SetHighPoint 0 0 $hi
eval elevation16 SetScalarRange $lo $hi
elevation16 ReleaseDataFlagOn
vtkPolyDataNormals normals16
normals16 SetInput [elevation16 GetPolyDataOutput]
normals16 SetFeatureAngle 60
normals16 ConsistencyOff
normals16 SplittingOff
normals16 ReleaseDataFlagOn
vtkPolyDataMapper demMapper16
demMapper16 SetInputConnection [normals16 GetOutputPort]
eval demMapper16 SetScalarRange $lo $hi
demMapper16 SetLookupTable lut
demMapper16 ImmediateModeRenderingOn
demMapper16 Update
demActor AddLODMapper demMapper16
# Create the RenderWindow, Renderer and both Actors
#
vtkRenderer ren1
vtkRenderWindow renWin
renWin AddRenderer ren1
vtkRenderWindowInteractor iren
iren SetRenderWindow renWin
vtkInteractorStyleTerrain t
iren SetInteractorStyle t
# Add the actors to the renderer, set the background and size
#
ren1 AddActor demActor
ren1 SetBackground .4 .4 .4
iren AddObserver UserEvent {wm deiconify .vtkInteract}
iren SetDesiredUpdateRate 1
wm withdraw .
proc TkCheckAbort {} {
set foo [renWin GetEventPending]
if {$foo != 0} {renWin SetAbortRender 1}
}
renWin AddObserver AbortCheckEvent {TkCheckAbort}
[ren1 GetActiveCamera] SetViewUp 0 0 1
[ren1 GetActiveCamera] SetPosition -99900 -21354 131801
[ren1 GetActiveCamera] SetFocalPoint 41461 41461 2815
ren1 ResetCamera
[ren1 GetActiveCamera] Dolly 1.2
ren1 ResetCameraClippingRange
renWin Render
|