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.
115 lines
2.8 KiB
115 lines
2.8 KiB
package require vtk
|
|
package require vtkinteraction
|
|
package require vtktesting
|
|
|
|
# This example demonstrates how to use the vtkSphereWidget to control the
|
|
# position of a light.
|
|
|
|
# Start by loading some data.
|
|
#
|
|
vtkDEMReader dem
|
|
dem SetFileName "$VTK_DATA_ROOT/Data/SainteHelens.dem"
|
|
dem Update
|
|
|
|
set Scale 2
|
|
vtkLookupTable lut
|
|
lut SetHueRange 0.6 0
|
|
lut SetSaturationRange 1.0 0
|
|
lut SetValueRange 0.5 1.0
|
|
set lo [expr $Scale * [lindex [dem GetElevationBounds] 0]]
|
|
set hi [expr $Scale * [lindex [dem GetElevationBounds] 1]]
|
|
|
|
vtkImageShrink3D shrink
|
|
shrink SetShrinkFactors 4 4 1
|
|
shrink SetInputConnection [dem GetOutputPort]
|
|
shrink AveragingOn
|
|
|
|
vtkImageDataGeometryFilter geom
|
|
geom SetInputConnection [shrink GetOutputPort]
|
|
geom ReleaseDataFlagOn
|
|
|
|
vtkWarpScalar warp
|
|
warp SetInputConnection [geom GetOutputPort]
|
|
warp SetNormal 0 0 1
|
|
warp UseNormalOn
|
|
warp SetScaleFactor $Scale
|
|
warp ReleaseDataFlagOn
|
|
|
|
vtkElevationFilter elevation
|
|
elevation SetInputConnection [warp GetOutputPort]
|
|
elevation SetLowPoint 0 0 $lo
|
|
elevation SetHighPoint 0 0 $hi
|
|
eval elevation SetScalarRange $lo $hi
|
|
elevation ReleaseDataFlagOn
|
|
|
|
vtkPolyDataNormals normals
|
|
normals SetInput [elevation GetPolyDataOutput]
|
|
normals SetFeatureAngle 60
|
|
normals ConsistencyOff
|
|
normals SplittingOff
|
|
normals ReleaseDataFlagOn
|
|
|
|
vtkPolyDataMapper demMapper
|
|
demMapper SetInputConnection [normals GetOutputPort]
|
|
eval demMapper SetScalarRange $lo $hi
|
|
demMapper SetLookupTable lut
|
|
demMapper ImmediateModeRenderingOn
|
|
|
|
vtkLODActor demActor
|
|
demActor SetMapper demMapper
|
|
|
|
# Create the RenderWindow, Renderer and both Actors
|
|
#
|
|
vtkRenderer ren1
|
|
vtkRenderWindow renWin
|
|
renWin AddRenderer ren1
|
|
vtkRenderWindowInteractor iren
|
|
iren SetRenderWindow renWin
|
|
iren LightFollowCameraOff
|
|
iren SetInteractorStyle ""
|
|
|
|
# Associate the line widget with the interactor
|
|
vtkSphereWidget sphereWidget
|
|
sphereWidget SetInteractor iren
|
|
sphereWidget SetProp3D demActor
|
|
sphereWidget SetPlaceFactor 4
|
|
sphereWidget PlaceWidget
|
|
sphereWidget TranslationOff
|
|
sphereWidget ScaleOff
|
|
sphereWidget HandleVisibilityOn
|
|
sphereWidget AddObserver InteractionEvent MoveLight
|
|
|
|
# Add the actors to the renderer, set the background and size
|
|
#
|
|
ren1 AddActor demActor
|
|
ren1 SetBackground 1 1 1
|
|
renWin SetSize 300 300
|
|
ren1 SetBackground 0.1 0.2 0.4
|
|
|
|
set cam1 [ren1 GetActiveCamera]
|
|
$cam1 SetViewUp 0 0 1
|
|
eval $cam1 SetFocalPoint [[dem GetOutput] GetCenter]
|
|
$cam1 SetPosition 1 0 0
|
|
ren1 ResetCamera
|
|
$cam1 Elevation 25
|
|
$cam1 Azimuth 125
|
|
$cam1 Zoom 1.25
|
|
|
|
vtkLight light
|
|
eval light SetFocalPoint [[dem GetOutput] GetCenter]
|
|
ren1 AddLight light
|
|
|
|
# render the image
|
|
#
|
|
iren AddObserver UserEvent {wm deiconify .vtkInteract}
|
|
renWin Render
|
|
|
|
# Prevent the tk window from showing up then start the event loop.
|
|
wm withdraw .
|
|
|
|
# Actually probe the data
|
|
|
|
proc MoveLight {} {
|
|
eval light SetPosition [sphereWidget GetHandlePosition]
|
|
}
|
|
|
|
|