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.
 
 
 
 
 
 

131 lines
4.0 KiB

# Get random numbers
vtkMath math
math RandomSeed 1
proc randint {min max} {
set f [math Random $min $max]
return [expr int($f)]
}
# Main testing proc
proc test_style {style} {
# Event state to test
set buttons {
Left
Middle
Right
}
set ctrls {
0 1
}
set shifts {
0 1
}
# I do not trust timers while testing (since they trigger asynchronous
# rendering/interaction)
set use_timers [$style GetUseTimers]
$style UseTimersOff
$style AutoAdjustCameraClippingRangeOn
puts "Testing: [$style GetClassName]"
set iren [$style GetInteractor]
set renwin [$iren GetRenderWindow]
$renwin Render
# Get renwin size and center
set win_size [$renwin GetSize]
set win_center_x [expr [lindex $win_size 0] / 2.0]
set win_center_y [expr [lindex $win_size 1] / 2.0]
vtkPropPicker pick
set radius [expr 5 * (1 + $use_timers)]
foreach ctrl $ctrls {
foreach shift $shifts {
puts -nonewline " - ctrl: $ctrl shift: $shift button:"
foreach button $buttons {
puts -nonewline " $button"
flush stdout
# First try to find a starting position where an actor
# can be picked (not mandatory for trackball modes).
# Search in increasingly big area, until we reach win size
# in that case actors might not be on screen, so reset cam
set search $radius
while {1} {
set start_x [randint [expr $win_center_x - $search] \
[expr $win_center_x + $search]]
set start_y [randint [expr $win_center_x - $search] \
[expr $win_center_x + $search]]
if {[pick PickProp $start_x $start_y ren1]} {
break
} else {
if {$search > $win_center_x ||
$search > $win_center_y} {
puts " (resetting camera)"
ren1 ResetCamera
set search $radius
} else {
incr search 5
}
}
}
# Start by pressing the button
$iren SetEventInformationFlipY \
$start_x $start_y $ctrl $shift 0 0 0
$iren InvokeEvent "${button}ButtonPressEvent"
# puts " - Starting: [$iren GetEventPosition]"
# Now move around (alternating left and right around
# the window center in order to compensate somehow).
set sign 1
for {set i 0} {$i < 2 + $use_timers} {incr i} {
set sign [expr $sign * -1]
set x [randint [expr $win_center_x + $radius * 2 * $sign] \
[expr $win_center_y + $radius * $sign]]
set y [randint [expr $win_center_y + $radius * 2 * $sign] \
[expr $win_center_y + $radius * $sign]]
$iren SetEventInformationFlipY $x $y $ctrl $shift 0 0 0
# puts " - Moving: [$iren GetEventPosition] $ctrl $shift (was [$iren GetLastEventPosition])"
$iren InvokeEvent "MouseMoveEvent"
# If this style use timers, run OnTimer multiple times
if {$use_timers} {
for {set j 0} {$j < 10} {incr j} {
$iren InvokeEvent "TimerEvent"
}
}
$renwin Render
}
# End by releasing the button
$iren SetEventInformationFlipY $x $y $ctrl $shift 0 0 0
$iren InvokeEvent "${button}ButtonReleaseEvent"
}
puts "."
}
}
$style SetUseTimers $use_timers
$renwin Render
}