diff options
author | William Joye <wjoye@cfa.harvard.edu> | 2016-10-27 19:01:15 (GMT) |
---|---|---|
committer | William Joye <wjoye@cfa.harvard.edu> | 2016-10-27 19:01:15 (GMT) |
commit | 12166aa342f7c8d905097e43a1f50e0775503069 (patch) | |
tree | 73a6e7296fbf9898633a02c2503a3e959789d8c3 /ds9/library/rgb.tcl | |
parent | d4d595fa7fb12903db9227d33d48b2b00120dbd1 (diff) | |
download | blt-12166aa342f7c8d905097e43a1f50e0775503069.zip blt-12166aa342f7c8d905097e43a1f50e0775503069.tar.gz blt-12166aa342f7c8d905097e43a1f50e0775503069.tar.bz2 |
Initial commit
Diffstat (limited to 'ds9/library/rgb.tcl')
-rw-r--r-- | ds9/library/rgb.tcl | 365 |
1 files changed, 365 insertions, 0 deletions
diff --git a/ds9/library/rgb.tcl b/ds9/library/rgb.tcl new file mode 100644 index 0000000..292a9d2 --- /dev/null +++ b/ds9/library/rgb.tcl @@ -0,0 +1,365 @@ +# Copyright (C) 1999-2016 +# Smithsonian Astrophysical Observatory, Cambridge, MA, USA +# For conditions of distribution and use, see copyright notice in "copyright" + +package provide DS9 1.0 + +proc RGBDef {} { + global rgb + global irgb + + set irgb(top) .rgb + set irgb(mb) .rgbmb + + set rgb(red) 1 + set rgb(green) 1 + set rgb(blue) 1 + set rgb(system) wcs + set rgb(lock,wcs) 0 + set rgb(lock,crop) 0 + set rgb(lock,slice) 0 + set rgb(lock,bin) 0 + set rgb(lock,axes) 0 + set rgb(lock,scale) 0 + set rgb(lock,scalelimits) 0 + set rgb(lock,colorbar) 0 + set rgb(lock,block) 0 + set rgb(lock,smooth) 0 +} + +proc RGBEvalLockCurrent {varname cmd} { + global current + + global rgb + global crop + global cube + global bin + global scale + global colorbar + global block + global smooth + + RGBEvalLock $varname $current(frame) $cmd +} + +proc RGBEvalLock {varname which cmd} { + upvar $varname var + + global rgb + global crop + global cube + global bin + global scale + global colorbar + global block + global smooth + + if {$var && [$which get type] == {rgb}} { + set ch [$which get rgb channel] + foreach cc {red green blue} { + $which rgb channel $cc + eval $cmd + } + $which rgb channel $ch + } else { + eval $cmd + } +} + +proc RGBEvalLockColorbar {cmd} { + global current + global scale + global rgb + + if {$rgb(lock,colorbar) && [$current(frame) get type] == {rgb}} { + set ch $current(rgb) + foreach c {red green blue} { + colorbarrgb rgb channel $c + eval $cmd + } + set current(rgb) $ch + colorbarrgb rgb channel $current(rgb) + } else { + eval $cmd + } +} + +proc RGBChannel {} { + global current + + if {$current(frame) != {}} { + if {[$current(frame) get type] == {rgb}} { + colorbarrgb rgb channel $current(rgb) + } + $current(frame) rgb channel $current(rgb) + UpdateDS9 + } +} + +proc RGBView {} { + global current + global rgb + + if {$current(frame) != {}} { + $current(frame) rgb view $rgb(red) $rgb(green) $rgb(blue) + } +} + +proc RGBSystem {} { + global current + global rgb + + if {$current(frame) != {}} { + $current(frame) rgb system $rgb(system) + } +} + +# used by backup +proc RGBDialog {} { + global rgb + global irgb + + global current + global ds9 + + # see if we already have a window visible + if {[winfo exists $irgb(top)]} { + raise $irgb(top) + return + } + + # create the rgb window + set w $irgb(top) + set mb $irgb(mb) + + Toplevel $w $mb 6 [msgcat::mc {RGB}] RGBDestroyDialog + + $mb add cascade -label [msgcat::mc {File}] -menu $mb.file + $mb add cascade -label [msgcat::mc {Align}] -menu $mb.align + $mb add cascade -label [msgcat::mc {Lock}] -menu $mb.lock + + menu $mb.file + $mb.file add command -label [msgcat::mc {Close}] -command RGBDestroyDialog + + CoordMenu $mb.align rgb system 1 {} {} RGBSystem + + menu $mb.lock + $mb.lock add checkbutton -label [msgcat::mc {WCS}] \ + -variable rgb(lock,wcs) + $mb.lock add checkbutton -label [msgcat::mc {Crop}] \ + -variable rgb(lock,crop) + $mb.lock add checkbutton -label [msgcat::mc {Slice}] \ + -variable rgb(lock,slice) + $mb.lock add checkbutton -label [msgcat::mc {Bin}] \ + -variable rgb(lock,bin) + $mb.lock add checkbutton -label [msgcat::mc {Axes Order}] \ + -variable rgb(lock,axes) + $mb.lock add checkbutton -label [msgcat::mc {Scale}] \ + -variable rgb(lock,scale) + $mb.lock add checkbutton -label [msgcat::mc {Scale and Limits}] \ + -variable rgb(lock,scalelimits) + $mb.lock add checkbutton -label [msgcat::mc {Colorbar}] \ + -variable rgb(lock,colorbar) + $mb.lock add checkbutton -label [msgcat::mc {Block}] \ + -variable rgb(lock,block) + $mb.lock add checkbutton -label [msgcat::mc {Smooth}] \ + -variable rgb(lock,smooth) + + # Param + set f [ttk::frame $w.param] + ttk::label $f.currenttitle -text [msgcat::mc {Current}] + ttk::label $f.viewtitle -text [msgcat::mc {View}] + ttk::label $f.redtitle -text [msgcat::mc {Red}] + ttk::label $f.bluetitle -text [msgcat::mc {Blue}] + ttk::label $f.greentitle -text [msgcat::mc {Green}] + + ttk::radiobutton $f.redcurrent -variable current(rgb) \ + -value red -command RGBChannel + ttk::radiobutton $f.greencurrent -variable current(rgb) \ + -value green -command RGBChannel + ttk::radiobutton $f.bluecurrent -variable current(rgb) \ + -value blue -command RGBChannel + + ttk::checkbutton $f.redview -variable rgb(red) -command RGBView + ttk::checkbutton $f.greenview -variable rgb(green) -command RGBView + ttk::checkbutton $f.blueview -variable rgb(blue) -command RGBView + + grid x $f.currenttitle $f.viewtitle -padx 2 -pady 2 -sticky w + grid $f.redtitle $f.redcurrent $f.redview -padx 2 -pady 2 -sticky w + grid $f.greentitle $f.greencurrent $f.greenview -padx 2 -pady 2 -sticky w + grid $f.bluetitle $f.bluecurrent $f.blueview -padx 2 -pady 2 -sticky w + + # Buttons + set f [ttk::frame $w.buttons] + ttk::button $f.close -text [msgcat::mc {Close}] \ + -command RGBDestroyDialog + pack $f.close -side left -expand true -padx 2 -pady 4 + + # Fini + ttk::separator $w.sep -orient horizontal + pack $w.buttons $w.sep -side bottom -fill x + pack $w.param -side top -fill both -expand true +} + +proc RGBDestroyDialog {} { + global irgb + + if {[winfo exists $irgb(top)]} { + destroy $irgb(top) + destroy $irgb(mb) + } +} + +proc UpdateRGBMenu {} { + # can be changed by wcs + SetCoordSystem rgb system {} {} +} + +proc UpdateRGBDialog {} { + global rgb + global irgb + global current + + global debug + if {$debug(tcl,update)} { + puts stderr "UpdateRGBDialog" + } + + if {![winfo exists $irgb(top)]} { + return + } + + if {$current(frame) != {}} { + set rgb(frame) $current(frame) + if {[$current(frame) has fits]} { + # now make sure we have the coord systems + AdjustCoordSystem rgb system + CoordMenuEnable $irgb(mb).align rgb system 1 {} {} + } else { + CoordMenuReset $irgb(mb).align rgb system 1 {} {} + } + } + + if {$current(frame) != {}} { + set current(rgb) [$current(frame) get rgb channel] + set r [$current(frame) get rgb view] + set rgb(red) [lindex $r 0] + set rgb(green) [lindex $r 1] + set rgb(blue) [lindex $r 2] + set rgb(system) [$current(frame) get rgb system] + } +} + +proc RGBBackup {ch which} { + puts $ch "$which rgb channel [$which get rgb channel]" + puts $ch "$which rgb view [$which get rgb view]" + puts $ch "$which rgb system [$which get rgb system]" +} + +# Process Cmds + +proc ProcessRGBCmd {varname iname} { + upvar $varname var + upvar $iname i + + global current + global rgb + + RGBDialog + + switch -- [string tolower [lindex $var $i]] { + open {} + close {RGBDestroyDialog} + red - + green - + blue { + set current(rgb) [string tolower [lindex $var $i]] + RGBChannel + } + channel { + incr i + set current(rgb) [string tolower [lindex $var $i]] + RGBChannel + } + lock { + incr i + set item [string tolower [lindex $var $i]] + incr i + if {!([string range [lindex $var $i] 0 0] == "-")} { + set rr [FromYesNo [lindex $var $i]] + } else { + set rr 1 + incr i -1 + } + switch -- $item { + wcs {set rgb(lock,wcs) $rr} + crop {set rgb(lock,crop) $rr} + slice {set rgb(lock,slice) $rr} + bin {set rgb(lock,bin) $rr} + axes - + order {set rgb(lock,axes) $rr} + scale {set rgb(lock,scale) $rr} + limits - + scalelimits {set rgb(lock,scalelimits) $rr} + color - + colormap - + colorbar {set rgb(lock,colorbar) $rr} + block {set rgb(lock,block) $rr} + smooth {set rgb(lock,smooth) $rr} + } + } + system { + incr i + set rgb(system) [string tolower [lindex $var $i]] + RGBSystem + } + view { + set w [lindex $var [expr $i+1]] + set yesno [lindex $var [expr $i+2]] + switch -- [string tolower $w] { + red {set rgb(red) [FromYesNo $yesno]; RGBView} + green {set rgb(green) [FromYesNo $yesno]; RGBView} + blue {set rgb(blue) [FromYesNo $yesno]; RGBView} + } + incr i 2 + } + default { + CreateRGBFrame + incr i -1 + } + } +} + +proc ProcessSendRGBCmd {proc id param} { + global current + global rgb + + switch -- [lindex $param 0] { + channel {$proc $id "$current(rgb)\n"} + lock { + switch -- [string tolower [lindex $param 1]] { + wcs {$proc $id [ToYesNo $rgb(lock,wcs)]} + crop {$proc $id [ToYesNo $rgb(lock,crop)]} + slice {$proc $id [ToYesNo $rgb(lock,slice)]} + bin {$proc $id [ToYesNo $rgb(lock,bin)]} + axes - + order {$proc $id [ToYesNo $rgb(lock,axes)]} + scale {$proc $id [ToYesNo $rgb(lock,scale)]} + limits - + scalelimits {$proc $id [ToYesNo $rgb(lock,scalelimits)]} + colorbar {$proc $id [ToYesNo $rgb(lock,colorbar)]} + block {$proc $id [ToYesNo $rgb(lock,block)]} + smooth {$proc $id [ToYesNo $rgb(lock,smooth)]} + } + } + system {$proc $id "$rgb(system)\n"} + view { + switch -- [lindex $param 1] { + red {$proc $id [ToYesNo $rgb(red)]} + green {$proc $id [ToYesNo $rgb(green)]} + blue {$proc $id [ToYesNo $rgb(blue)]} + } + } + } +} + |