Cloned library of VTK-5.0.0 with extra build files for internal package management.
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.

158 lines
4.5 KiB

2 years ago
# This example demonstrates the use of vtkLabeledDataMapper. This class
# is used for displaying numerical data from an underlying data set. In
# the case of this example, the underlying data are the point and cell
# ids.
#
# First we include the VTK Tcl packages which will make available
# all of the vtk commands to Tcl
#
package require vtk
package require vtkinteraction
# Create a selection window. We will display the point and cell ids that
# lie within this window.
set xmin 200
set xLength 100
set xmax [expr $xmin + $xLength]
set ymin 200
set yLength 100
set ymax [expr $ymin + $yLength]
vtkPoints pts
pts InsertPoint 0 $xmin $ymin 0
pts InsertPoint 1 $xmax $ymin 0
pts InsertPoint 2 $xmax $ymax 0
pts InsertPoint 3 $xmin $ymax 0
vtkCellArray rect
rect InsertNextCell 5
rect InsertCellPoint 0
rect InsertCellPoint 1
rect InsertCellPoint 2
rect InsertCellPoint 3
rect InsertCellPoint 0
vtkPolyData selectRect
selectRect SetPoints pts
selectRect SetLines rect
vtkPolyDataMapper2D rectMapper
rectMapper SetInput selectRect
vtkActor2D rectActor
rectActor SetMapper rectMapper
# Create a sphere and its associated mapper and actor.
vtkSphereSource sphere
vtkPolyDataMapper sphereMapper
sphereMapper SetInputConnection [sphere GetOutputPort]
sphereMapper GlobalImmediateModeRenderingOn
vtkActor sphereActor
sphereActor SetMapper sphereMapper
# Generate data arrays containing point and cell ids
vtkIdFilter ids
ids SetInputConnection [sphere GetOutputPort]
ids PointIdsOn
ids CellIdsOn
ids FieldDataOn
# Create the renderer here because vtkSelectVisiblePoints needs it.
vtkRenderer ren1
# Create labels for points
vtkSelectVisiblePoints visPts
visPts SetInputConnection [ids GetOutputPort]
visPts SetRenderer ren1
visPts SelectionWindowOn
visPts SetSelection $xmin [expr $xmin + $xLength] \
$ymin [expr $ymin + $yLength]
# Create the mapper to display the point ids. Specify the
# format to use for the labels. Also create the associated actor.
vtkLabeledDataMapper ldm
ldm SetInputConnection [visPts GetOutputPort]
ldm SetLabelFormat "%g"
ldm SetLabelModeToLabelFieldData
vtkActor2D pointLabels
pointLabels SetMapper ldm
# Create labels for cells
vtkCellCenters cc
cc SetInputConnection [ids GetOutputPort]
vtkSelectVisiblePoints visCells
visCells SetInputConnection [cc GetOutputPort]
visCells SetRenderer ren1
visCells SelectionWindowOn
visCells SetSelection $xmin [expr $xmin + $xLength] \
$ymin [expr $ymin + $yLength]
# Create the mapper to display the cell ids. Specify the
# format to use for the labels. Also create the associated actor.
vtkLabeledDataMapper cellMapper
cellMapper SetInputConnection [visCells GetOutputPort]
cellMapper SetLabelFormat "%g"
cellMapper SetLabelModeToLabelFieldData
[cellMapper GetLabelTextProperty] SetColor 0 1 0
vtkActor2D cellLabels
cellLabels SetMapper cellMapper
# Create the RenderWindow and RenderWindowInteractor
#
vtkRenderWindow renWin
renWin AddRenderer ren1
vtkRenderWindowInteractor iren
iren SetRenderWindow renWin
# Add the actors to the renderer; set the background and size;
# render
ren1 AddActor sphereActor
ren1 AddActor2D rectActor
ren1 AddActor2D pointLabels
ren1 AddActor2D cellLabels
ren1 SetBackground 1 1 1
renWin SetSize 500 500
renWin Render
# Set the user method (bound to key 'u')
#
iren AddObserver UserEvent {wm deiconify .vtkInteract}
# Withdraw the default tk window.
wm withdraw .
# Create a tcl procedure to move the selection window across the data set.
proc MoveWindow {} {
for {set y 100} {$y < 300} {incr y 25} {
for {set x 100} {$x < 300} {incr x 25} {
PlaceWindow $x $y
}
}
}
# Create a tcl procedure to draw the selection window at each location it
# is moved to.
proc PlaceWindow {xmin ymin} {
global xLength yLength
set xmax [expr $xmin + $xLength]
set ymax [expr $ymin + $yLength]
visPts SetSelection $xmin $xmax $ymin $ymax
visCells SetSelection $xmin $xmax $ymin $ymax
pts InsertPoint 0 $xmin $ymin 0
pts InsertPoint 1 $xmax $ymin 0
pts InsertPoint 2 $xmax $ymax 0
pts InsertPoint 3 $xmin $ymax 0
# Call Modified because InsertPoints does not modify vtkPoints
# (for performance reasons).
pts Modified;
renWin Render
}
# Move the selection window across the data set.
MoveWindow
# Put the selection window in the center of the render window.
# This works because the xmin = ymin = 200, xLength = yLength = 100, and
# the render window size is 500 x 500.
PlaceWindow $xmin $ymin