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
|
package require vtk
package require vtkinteraction
# demonstrate use of point labeling and the selection window
# get the interactor ui
# Create the RenderWindow, Renderer and both Actors
#
vtkRenderer ren1
vtkRenderWindow renWin
renWin AddRenderer ren1
vtkRenderWindowInteractor iren
iren SetRenderWindow renWin
# Create a selection 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 asphere
vtkSphereSource sphere
vtkPolyDataMapper sphereMapper
sphereMapper SetInputConnection [sphere GetOutputPort]
sphereMapper GlobalImmediateModeRenderingOn
vtkActor sphereActor
sphereActor SetMapper sphereMapper
# Generate ids for labeling
vtkIdFilter ids
ids SetInputConnection [sphere GetOutputPort]
ids PointIdsOn
ids CellIdsOn
ids FieldDataOn
# 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]
vtkLabeledDataMapper ldm
ldm SetInputConnection [visPts GetOutputPort]
ldm SetLabelFormat "%g"
# ldm SetLabelModeToLabelScalars
# ldm SetLabelModeToLabelNormals
ldm SetLabelModeToLabelFieldData
# ldm SetLabeledComponent 0
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]
vtkLabeledDataMapper cellMapper
cellMapper SetInputConnection [visCells GetOutputPort]
cellMapper SetLabelFormat "%g"
# cellMapper SetLabelModeToLabelScalars
# cellMapper SetLabelModeToLabelNormals
cellMapper SetLabelModeToLabelFieldData
[cellMapper GetLabelTextProperty] SetColor 0 1 0
vtkActor2D cellLabels
cellLabels SetMapper cellMapper
# Add the actors to the renderer, set the background and size
#
ren1 AddActor sphereActor
ren1 AddActor2D rectActor
ren1 AddActor2D pointLabels
ren1 AddActor2D cellLabels
ren1 SetBackground 1 1 1
renWin SetSize 500 500
renWin Render
# render the image
#
iren AddObserver UserEvent {wm deiconify .vtkInteract}
# prevent the tk window from showing up then start the event loop
wm withdraw .
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
pts Modified;#because insertions don't modify object - performance reasons
renWin Render
}
proc MoveWindow {} {
for {set y 100} {$y < 300} {incr y 25} {
for {set x 100} {$x < 300} {incr x 25} {
PlaceWindow $x $y
}
}
}
MoveWindow
PlaceWindow $xmin $ymin
|