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/mask.tcl | |
parent | d4d595fa7fb12903db9227d33d48b2b00120dbd1 (diff) | |
download | blt-12166aa342f7c8d905097e43a1f50e0775503069.zip blt-12166aa342f7c8d905097e43a1f50e0775503069.tar.gz blt-12166aa342f7c8d905097e43a1f50e0775503069.tar.bz2 |
Initial commit
Diffstat (limited to 'ds9/library/mask.tcl')
-rw-r--r-- | ds9/library/mask.tcl | 297 |
1 files changed, 297 insertions, 0 deletions
diff --git a/ds9/library/mask.tcl b/ds9/library/mask.tcl new file mode 100644 index 0000000..aa3de7c --- /dev/null +++ b/ds9/library/mask.tcl @@ -0,0 +1,297 @@ +# 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 MaskDef {} { + global mask + global imask + global pmask + + set imask(top) .msk + set imask(mb) .mskmb + + set mask(color) red + set mask(mark) 1 + set mask(transparency) 0 + + array set pmask [array get mask] +} + +proc MaskTransparency {} { + global mask + global current + + if {$current(frame) != {}} { + $current(frame) mask transparency $mask(transparency) + } +} + +proc MaskClear {} { + global current + + if {$current(frame) != {}} { + $current(frame) mask clear + } +} + +proc MaskDialog {} { + global mask + global imask + global current + global ds9 + + # see if we already have a ctr window visible + if {[winfo exists $imask(top)]} { + raise $imask(top) + return + } + + # create the mask window + set w $imask(top) + set mb $imask(mb) + + Toplevel $w $mb 6 [msgcat::mc {Mask Parameters}] MaskDestroyDialog + + $mb add cascade -label [msgcat::mc {File}] -menu $mb.file + $mb add cascade -label [msgcat::mc {Edit}] -menu $mb.edit + + menu $mb.file + $mb.file add command -label "[msgcat::mc {Open}]..." \ + -command [list OpenDialog fits mask] + $mb.file add cascade -label [msgcat::mc {Open as}] \ + -menu $mb.file.open + $mb.file add separator + $mb.file add cascade -label [msgcat::mc {Import}] \ + -menu $mb.file.import + $mb.file add separator + $mb.file add command -label [msgcat::mc {Apply}] -command MaskApplyDialog + $mb.file add command -label [msgcat::mc {Clear}] -command MaskClear + $mb.file add separator + $mb.file add command -label [msgcat::mc {Close}] -command MaskDestroyDialog + + menu $mb.file.open + $mb.file.open add command \ + -label "[msgcat::mc {Mosaic WCS}]..." \ + -command [list OpenDialog mosaicimagewcs mask] + $mb.file.open add command \ + -label "[msgcat::mc {Mosaic WCS Segment}]..." \ + -command [list OpenDialog mosaicwcs mask] + $mb.file.open add command \ + -label "[msgcat::mc {Mosaic IRAF}]..." \ + -command [list OpenDialog mosaicimageiraf mask] + $mb.file.open add command \ + -label "[msgcat::mc {Mosaic IRAF Segment}]..." \ + -command [list OpenDialog mosaiciraf mask] + + menu $mb.file.import + $mb.file.import add command \ + -label "[msgcat::mc {Array}]..." \ + -command [list ImportDialog array mask] + $mb.file.import add command \ + -label "[msgcat::mc {NRRD}]..." \ + -command [list ImportDialog nrrd mask] + + EditMenu $mb imask + + # Param + set f [ttk::frame $w.param] + + slider $f.slider 0 100 [msgcat::mc {Transparency}] \ + mask(transparency) [list MaskTransparency] + + grid $f.slider -padx 2 -pady 2 -sticky ew + grid columnconfigure $f 0 -weight 1 + + # Buttons + set f [ttk::frame $w.buttons] + ttk::button $f.apply -text [msgcat::mc {Apply}] -command MaskApplyDialog + ttk::button $f.clear -text [msgcat::mc {Clear}] -command MaskClear + ttk::button $f.close -text [msgcat::mc {Close}] -command MaskDestroyDialog + pack $f.apply $f.clear $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 MaskApplyDialog {} { + global mask + + MaskTransparency +} + +proc MaskDestroyDialog {} { + global imask + + if {[winfo exists $imask(top)]} { + destroy $imask(top) + destroy $imask(mb) + } +} + +proc UpdateMaskMenu {} { + global mask + global current + global ds9 + + global debug + if {$debug(tcl,update)} { + puts stderr "UpdateMaskMenu" + } + + if {$current(frame) == {}} { + return + } + + set mask(color) [$current(frame) get mask color] + set mask(mark) [$current(frame) get mask mark] + set mask(transparency) [$current(frame) get mask transparency] + + switch -- [$current(frame) get type] { + base { + $ds9(mb).analysis entryconfig \ + "[msgcat::mc {Mask Parameters}]..." -state normal + } + 3d - + rgb { + $ds9(mb).analysis entryconfig \ + "[msgcat::mc {Mask Parameters}]..." -state disabled + } + } +} + +proc MaskLoad {} { + global current + global mask + + set rr [MaskParamsDialog] + if {$current(frame) != {}} { + if {$rr} { + $current(frame) mask color $mask(color) + $current(frame) mask mark $mask(mark) + } + } + return $rr +} + +proc MaskParamsDialog {} { + global mask + global ed + + set w {.mskd} + + set ed(ok) 0 + set ed(color) $mask(color) + set ed(mark) $mask(mark) + + DialogCreate $w [msgcat::mc {Mask Parameters}] ed(ok) + + # Param + set f [ttk::frame $w.param] + + ttk::label $f.colortitle -text [msgcat::mc {Color}] + ColorMenuButton $f.colorbutton ed color {} + ttk::label $f.marktitle -text [msgcat::mc {Block}] + ttk::radiobutton $f.markz -text [msgcat::mc {Zero}] \ + -variable ed(mark) -value 0 + ttk::radiobutton $f.marknz -text [msgcat::mc {Non-zero}] \ + -variable ed(mark) -value 1 + ttk::label $f.marktitle2 -text [msgcat::mc {Value}] + + grid $f.colortitle $f.colorbutton - -padx 2 -pady 2 -sticky w + grid $f.marktitle $f.markz $f.marknz $f.marktitle2 -padx 2 -pady 2 -sticky w + + # Buttons + set f [ttk::frame $w.buttons] + ttk::button $f.ok -text [msgcat::mc {OK}] -command {set ed(ok) 1} \ + -default active + ttk::button $f.cancel -text [msgcat::mc {Cancel}] -command {set ed(ok) 0} + pack $f.ok $f.cancel -side left -expand true -padx 2 -pady 4 + + bind $w <Return> {set ed(ok) 1} + + # 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 + + DialogCenter $w + DialogWait $w ed(ok) + DialogDismiss $w + + if {$ed(ok)} { + set mask(color) [string tolower $ed(color)] + set mask(mark) $ed(mark) + } + + set rr $ed(ok) + unset ed + return $rr +} + +proc MaskBackup {ch which} { + puts $ch "$which mask color [$which get mask color]" + puts $ch "$which mask mark [$which get mask mark]" + puts $ch "$which mask transparency [$which get mask transparency]" +} + +proc ProcessMaskCmd {varname iname} { + upvar $varname var + upvar $iname i + + global mask + global current + + set rr {} + + switch -- [string tolower [lindex $var $i]] { + open {MaskDialog} + close {MaskDestroyDialog} + color { + incr i + set mask(color) [lindex $var $i] + if {$current(frame) != {}} { + $current(frame) mask color $mask(color) + } + } + mark { + incr i + set mask(mark) [lindex $var $i] + if {$current(frame) != {}} { + $current(frame) mask mark $mask(mark) + } + } + transparency { + incr i + set mask(transparency) [lindex $var $i] + if {$current(frame) != {}} { + $current(frame) mask transparency $mask(transparency) + } + MaskTransparency + } + clear { + MaskClear + } + + default { + set rr mask + incr i -1 + } + } + + return $rr +} + +proc ProcessSendMaskCmd {proc id param} { + global mask + + switch -- [string tolower $param] { + color {$proc $id "$mask(color)\n"} + mark {$proc $id "$mask(mark)\n"} + transparency {$proc $id "$mask(transparency)\n"} + } +} + |