diff options
Diffstat (limited to 'ds9/library/box.tcl')
-rw-r--r-- | ds9/library/box.tcl | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/ds9/library/box.tcl b/ds9/library/box.tcl new file mode 100644 index 0000000..b28d84b --- /dev/null +++ b/ds9/library/box.tcl @@ -0,0 +1,126 @@ +# 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 BoxDialog {varname} { + upvar #0 $varname var + global $varname + + global pmarker + + # see if we already have a header window visible + if {[winfo exists $var(top)]} { + raise $var(top) + return + } + + # variables + set rr [$var(frame) get wcs] + set var(dcoord) [lindex $rr 0] + set var(dformat) $pmarker(dformat) + AdjustCoordSystem $varname dcoord + + # procs + set var(proc,apply) BoxApply + set var(proc,close) BoxClose + set var(proc,coordCB) BoxCoordCB + + # base + MarkerBaseCenterDialog $varname + + # analysis + $var(mb) add cascade -label [msgcat::mc {Analysis}] -menu $var(mb).analysis + menu $var(mb).analysis + + MarkerAnalysisStatsDialog $varname + MarkerAnalysisHistogramDialog $varname + MarkerAnalysisPlot3dDialog $varname + + # init + BoxEditCB $varname + MarkerBaseCenterRotateCB $varname + + # callbacks + $var(frame) marker $var(id) callback edit BoxEditCB $varname + $var(frame) marker $var(id) callback rotate \ + MarkerBaseCenterRotateCB $varname + + set f $var(top).param + + # Radius + ttk::label $f.tradius -text Size + ttk::entry $f.radius1 -textvariable ${varname}(radius1) -width 13 + ttk::entry $f.radius2 -textvariable ${varname}(radius2) -width 13 + DistMenuButton $f.uradius $varname dcoord 1 dformat \ + [list BoxEditCB $varname] + DistMenuEnable $f.uradius.menu $varname dcoord 1 dformat + + # Angle + ttk::label $f.tangle -text [msgcat::mc {Angle}] + ttk::entry $f.angle -textvariable ${varname}(angle) -width 13 + ttk::label $f.uangle -text [msgcat::mc {Degrees}] + + grid $f.tradius $f.radius1 $f.radius2 $f.uradius -padx 2 -pady 2 -sticky w + grid $f.tangle $f.angle $f.uangle -padx 2 -pady 2 -sticky w +} + +# actions + +proc BoxClose {varname} { + upvar #0 $varname var + global $varname + + $var(frame) marker $var(id) delete callback edit BoxEditCB + $var(frame) marker $var(id) delete callback rotate MarkerBaseCenterRotateCB + + MarkerBaseCenterClose $varname +} + +proc BoxApply {varname} { + upvar #0 $varname var + global $varname + + if {$var(radius1) != {} && + $var(radius2) !={}} { + $var(frame) marker $var(id) box radius \ + $var(radius1) $var(radius2) $var(dcoord) $var(dformat) + } + + MarkerBaseCenterRotate $varname + MarkerBaseCenterApply $varname +} + +# callbacks + +proc BoxCoordCB {varname {dummy {}}} { + upvar #0 $varname var + global $varname + + global debug + if {$debug(tcl,marker)} { + puts stderr "BoxCoordCB" + } + + MarkerAnalysisStatsSystem $varname + MarkerAnalysisPlot3dSystem $varname + MarkerBaseCoordCB $varname + MarkerBaseCenterMoveCB $varname + MarkerBaseCenterRotateCB $varname +} + +proc BoxEditCB {varname {dummy {}}} { + upvar #0 $varname var + global $varname + + global debug + if {$debug(tcl,marker)} { + puts stderr "BoxEditCB" + } + + set r [$var(frame) get marker $var(id) box radius \ + $var(dcoord) $var(dformat)] + set var(radius1) [lindex $r 0] + set var(radius2) [lindex $r 1] +} |