aboutsummaryrefslogtreecommitdiff
path: root/vendor/x11iraf/ximtool/gui/pixtab.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/x11iraf/ximtool/gui/pixtab.tcl')
-rw-r--r--vendor/x11iraf/ximtool/gui/pixtab.tcl144
1 files changed, 144 insertions, 0 deletions
diff --git a/vendor/x11iraf/ximtool/gui/pixtab.tcl b/vendor/x11iraf/ximtool/gui/pixtab.tcl
new file mode 100644
index 00000000..d23827c9
--- /dev/null
+++ b/vendor/x11iraf/ximtool/gui/pixtab.tcl
@@ -0,0 +1,144 @@
+
+################################################################################
+# Pixel Table Callbacks.
+################################################################################
+
+set psize 5
+set pixtab_up 0
+set hdr_up 0
+
+createMenu pixtabMenu pixtabSize {
+ { "3x3" f.exec { pixtabSetSize 3 } }
+ { "5x5" f.exec { pixtabSetSize 5 } }
+ { "7x7" f.exec { pixtabSetSize 7 } }
+ { "9x9" f.exec { pixtabSetSize 9 } }
+}
+
+
+proc updatePixelTable { cx cy wx wy args } \
+{
+ global psize pixtab_up ism_enable
+
+ if {! $pixtab_up} \
+ return
+ if {$ism_enable} \
+ return
+
+ set delta [expr int($psize / 2) ]
+ set x1 [expr ($wx - $delta) ]
+ set x2 [expr ($wx + $delta) ]
+ set y1 [expr ($wy - $delta) ]
+ set y2 [expr ($wy + $delta) ]
+ set c [ expr int($psize / 2) ]
+
+
+ # Update the table labels.
+ set x $x1 ; set xl {}
+ set y $y2 ; set yl {}
+ for {set i 0} {$i < $psize} {incr i} {
+ lappend xl [format " %10.1f " $x] ; set x [ expr ($x + 1.) ]
+ lappend yl [format " %10.1f " $y] ; set y [ expr ($y - 1.) ]
+ }
+ send ptColLabs setList $xl ; send ptColLabs highlight $c
+ send ptRowLabs setList $yl ; send ptRowLabs highlight $c
+
+ # Update the pixel table itself.
+ #set pix [ send client getPixels $cx $cy $psize True ]
+
+ set x0 [ expr int($cx - $psize / 2. + 0.5)]
+ set y0 [ expr int($cy - $psize / 2. + 0.5)]
+ set pix [ send client getPixels $x0 $y0 $psize $psize ]
+ send pixtab setList [ lrange $pix 4 end ]
+ set c [ expr int(($psize * $psize) / 2) ]
+ send pixtab highlight $c
+
+ # Update the pixtab stats.
+ set sum 0.0
+ set sum2 0.0
+ set npix [ expr ($psize * $psize) ]
+ set nend [ expr ($psize * $psize) + 4 ]
+ for {set i 4} {$i < $nend} {incr i} {
+ set val [lindex $pix $i]
+ catch {
+ set sum [ expr ($sum + $val) ]
+ set sum2 [ expr ($sum2 + $val * $val) ]
+ }
+ }
+
+ set mean [ expr ($sum / ($npix * 1.0)) ]
+ set var [ expr (($sum2 - $sum * $mean) / ($npix - 1)) ]
+ if {$var <= 0.0} {
+ set stdev 0.0
+ } else {
+ set stdev [ expr sqrt ($var) ]
+ }
+ send meanValue set label [ format "%10.2f" $mean ]
+ send sigValue set label [ format "%10.4f" $stdev ]
+}
+
+
+proc pixtabClose args \
+{
+ global pixtab_up
+
+ send pixel_panel unmap
+ send pixelTable set on False
+ set pixtab_up 0
+ catch { send wcspix set psize 0 }
+} ; send pixtabClose addCallback pixtabClose
+
+
+proc pixtabSetSize { size args } \
+{
+ global psize ism_enable
+
+ set c [ expr int(($psize * $psize) / 2) ]
+ send pixtab highlight $c
+
+ # Now reset the window size.
+ switch $size {
+ 3 { send pixel_panel "resize 265 175"
+ send pixtab "set width 180 ; set height 60"
+ }
+ 5 { send pixel_panel "resize 375 215"
+ send pixtab "set width 290 ; set height 105"
+ }
+ 7 { send pixel_panel "resize 495 265"
+ send pixtab "set width 410 ; set height 150"
+ }
+ 9 { send pixel_panel "resize 610 310"
+ send pixtab "set width 525 ; set height 195"
+ }
+ }
+
+ send pixtab set defaultColumns $size
+ send ptColLabs set defaultColumns $size
+ set psize $size
+
+ # Notify the ISM we've changed size.
+ if ($ism_enable) {
+ catch { send wcspix set psize $psize }
+ }
+
+ send imagewin getCursorPos xc yc
+ updatePixelTable $xc $yc $xc $yc
+
+} ; pixtabSetSize $psize
+
+
+proc ptPixelTable {widget type state args} \
+{
+ global pixtab_up psize
+
+ set pixtab_up $state
+ if {$pixtab_up == 1} {
+ send pixelTable set on True
+ send pixel_panel map
+ catch { send wcspix set psize $psize }
+ } else {
+ send pixelTable set on False
+ send pixel_panel unmap
+ catch { send wcspix set psize 0 }
+ }
+}; send pixelTable addCallback ptPixelTable
+