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.
102 lines
2.5 KiB
102 lines
2.5 KiB
2 years ago
|
package require vtkinteraction
|
||
|
|
||
|
# a simple user interface that manipulates window level.
|
||
|
# places in the tcl top window. Looks for object named viewer
|
||
|
|
||
|
#only use this interface when not doing regression tests
|
||
|
if {[info commands rtExMath] != "rtExMath"} {
|
||
|
|
||
|
# Take window level parameters from viewer
|
||
|
proc InitializeWindowLevelInterface {} {
|
||
|
global viewer sliceNumber
|
||
|
|
||
|
# Get parameters from viewer
|
||
|
set w [viewer GetColorWindow]
|
||
|
set l [viewer GetColorLevel]
|
||
|
set sliceNumber [viewer GetZSlice]
|
||
|
set zMin [viewer GetWholeZMin]
|
||
|
set zMax [viewer GetWholeZMax]
|
||
|
# set zMin 0
|
||
|
# set zMax 128
|
||
|
|
||
|
frame .slice
|
||
|
label .slice.label -text "Slice"
|
||
|
scale .slice.scale -from $zMin -to $zMax -orient horizontal \
|
||
|
-command SetSlice -variable sliceNumber
|
||
|
# button .slice.up -text "Up" -command SliceUp
|
||
|
# button .slice.down -text "Down" -command SliceDown
|
||
|
|
||
|
frame .wl
|
||
|
frame .wl.f1
|
||
|
label .wl.f1.windowLabel -text "Window"
|
||
|
scale .wl.f1.window -from 1 -to [expr $w * 2] -orient horizontal \
|
||
|
-command SetWindow -variable window
|
||
|
frame .wl.f2
|
||
|
label .wl.f2.levelLabel -text "Level"
|
||
|
scale .wl.f2.level -from [expr $l - $w] -to [expr $l + $w] \
|
||
|
-orient horizontal -command SetLevel
|
||
|
checkbutton .wl.video -text "Inverse Video" -command SetInverseVideo
|
||
|
|
||
|
# resolutions less than 1.0
|
||
|
if {$w < 10} {
|
||
|
set res [expr 0.05 * $w]
|
||
|
.wl.f1.window configure -resolution $res -from $res -to [expr 2.0 * $w]
|
||
|
.wl.f2.level configure -resolution $res \
|
||
|
-from [expr 0.0 + $l - $w] -to [expr 0.0 + $l + $w]
|
||
|
}
|
||
|
|
||
|
.wl.f1.window set $w
|
||
|
.wl.f2.level set $l
|
||
|
|
||
|
frame .ex
|
||
|
button .ex.exit -text "Exit" -command "exit"
|
||
|
|
||
|
pack .slice .wl .ex -side top
|
||
|
pack .slice.label .slice.scale -side left
|
||
|
pack .wl.f1 .wl.f2 .wl.video -side top
|
||
|
pack .wl.f1.windowLabel .wl.f1.window -side left
|
||
|
pack .wl.f2.levelLabel .wl.f2.level -side left
|
||
|
pack .ex.exit -side left
|
||
|
}
|
||
|
|
||
|
proc SetSlice { slice } {
|
||
|
global sliceNumber viewer
|
||
|
|
||
|
viewer SetZSlice $slice
|
||
|
viewer Render
|
||
|
}
|
||
|
|
||
|
proc SetWindow window {
|
||
|
global viewer video
|
||
|
if {$video} {
|
||
|
viewer SetColorWindow [expr -$window]
|
||
|
} else {
|
||
|
viewer SetColorWindow $window
|
||
|
}
|
||
|
viewer Render
|
||
|
}
|
||
|
|
||
|
proc SetLevel level {
|
||
|
global viewer
|
||
|
viewer SetColorLevel $level
|
||
|
viewer Render
|
||
|
}
|
||
|
|
||
|
proc SetInverseVideo {} {
|
||
|
global viewer video window
|
||
|
if {$video} {
|
||
|
viewer SetColorWindow [expr -$window]
|
||
|
} else {
|
||
|
viewer SetColorWindow $window
|
||
|
}
|
||
|
viewer Render
|
||
|
}
|
||
|
|
||
|
|
||
|
InitializeWindowLevelInterface
|
||
|
|
||
|
} else {
|
||
|
viewer Render
|
||
|
}
|
||
|
|