summaryrefslogtreecommitdiffstats
path: root/ds9/library/import.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'ds9/library/import.tcl')
-rw-r--r--ds9/library/import.tcl230
1 files changed, 230 insertions, 0 deletions
diff --git a/ds9/library/import.tcl b/ds9/library/import.tcl
new file mode 100644
index 0000000..cd7df24
--- /dev/null
+++ b/ds9/library/import.tcl
@@ -0,0 +1,230 @@
+# 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 Import {fn format layer mode fn2} {
+ global current
+
+ if {$fn == {}} {
+ return
+ }
+
+ StartLoad
+ switch -- $format {
+ array {ImportArrayFile $fn $layer}
+ rgbarray {
+ switch -- [$current(frame) get type] {
+ base -
+ 3d {CreateRGBFrame}
+ rgb {}
+ }
+ ImportRGBArrayFile $fn
+ }
+ nrrd {ImportNRRDFile $fn $layer}
+ envi {ImportENVIFile $fn $fn2}
+ gif -
+ tiff -
+ jpeg -
+ png {ImportPhotoFile $fn $mode}
+ }
+ FinishLoad
+}
+
+# Support
+
+proc ImportDialog {format {layer {}} {mode {}}} {
+ global arrayfbox
+ global rgbarrayfbox
+ global nrrdfbox
+ global envifbox
+ global envi2fbox
+ global giffbox
+ global jpegfbox
+ global tifffbox
+ global pngfbox
+
+ switch -- $format {
+ array {set fn [OpenFileDialog arrayfbox]}
+ rgbarray {set fn [OpenFileDialog rgbarrayfbox]}
+ nrrd {set fn [OpenFileDialog nrrdfbox]}
+ envi {set fn [OpenFileDialog envifbox]}
+ gif {set fn [OpenFileDialog giffbox]}
+ jpeg {set fn [OpenFileDialog jpegfbox]}
+ tiff {set fn [OpenFileDialog tifffbox]}
+ png {set fn [OpenFileDialog pngfbox]}
+ }
+ set fn2 {}
+
+ if {$fn != {}} {
+ set ok 1
+ switch -- $format {
+ array {
+ # do we have an array spec tag'd on
+ if {![regexp -nocase {(.*)(\[.*\])} $fn foo base ext]} {
+ set ext {}
+ set ok [ArrayImportDialog 1 ext]
+ if {$ok} {
+ append fn "$ext"
+ }
+ }
+ }
+ rgbarray {
+ # do we have an array spec tag'd on
+ if {![regexp -nocase {(.*)(\[.*\])} $fn foo base ext]} {
+ set ext {}
+ set ok [ArrayImportDialog 3 ext]
+ if {$ok} {
+ append fn "$ext"
+ }
+ }
+ }
+ envi {
+ set fn2 [FindENVIDataFile $fn]
+ if {$fn2 == {}} {
+ set fn2 "[file rootname $fn].bsq"
+ SetFileLast envi2 $fn2
+ set fn2 [OpenFileDialog envi2fbox]
+ if {$fn2 == {}} {
+ set ok 0
+ }
+ }
+ }
+ nrrd -
+ gif -
+ jpeg -
+ tiff -
+ png {}
+ }
+
+ if {$ok} {
+ Import $fn $format $layer $mode $fn2
+ }
+ }
+}
+
+proc ArrayImportDialog {depth varname} {
+ upvar $varname var
+ global env
+ global ed
+ global ds9
+
+ set w {.arr}
+
+ set ed(ok) 0
+ set ed(x) $ds9(array,x)
+ set ed(y) $ds9(array,y)
+ set ed(z) $depth
+ set ed(bitpix) $ds9(array,bitpix)
+ set ed(skip) $ds9(array,skip)
+ set ed(arch) $ds9(array,arch)
+
+ if {[info exists env(DS9_ARRAY)]} {
+ if {[regexp {.*(dims.?=)([0-9]+)} $env(DS9_ARRAY) foo f1 item]} {
+ set ed(x) $item
+ set ed(y) $item
+ }
+ if {[regexp {.*(dim.?=)([0-9]+)} $env(DS9_ARRAY) foo f1 item]} {
+ set ed(x) $item
+ set ed(y) $item
+ }
+ if {[regexp {.*(xdim.?=)([0-9]+)} $env(DS9_ARRAY) foo f1 item]} {
+ set ed(x) $item
+ }
+ if {[regexp {.*(ydim.?=)([0-9]+)} $env(DS9_ARRAY) foo f1 item]} {
+ set ed(y) $item
+ }
+ if {[regexp {.*(zdim.?=)([0-9]+)} $env(DS9_ARRAY) foo f1 item]} {
+ set ed(z) $item
+ }
+ if {[regexp {.*(bitpix.?=)(-?[0-9]+)} $env(DS9_ARRAY) foo f1 item]} {
+ set ed(bitpix) $item
+ }
+ if {[regexp {.*(skip.?=)(-?[0-9]+)} $env(DS9_ARRAY) foo f1 item]} {
+ set ed(skip) $item
+ }
+ if {[regexp {.*arch.?=bigendian} $env(DS9_ARRAY) foo item]} {
+ set ed(arch) $item
+ }
+ if {[regexp {.*arch.?=littleendian} $env(DS9_ARRAY) foo item]} {
+ set ed(arch) $item
+ }
+ }
+
+ DialogCreate $w [msgcat::mc {Import Array}] ed(ok)
+
+ # Dim
+ set f [ttk::labelframe $w.dim -text [msgcat::mc {Dimension}] -padding 2]
+ ttk::entry $f.x -textvariable ed(x) -width 6
+ ttk::entry $f.y -textvariable ed(y) -width 6
+ ttk::entry $f.z -textvariable ed(z) -width 6
+ grid $f.x $f.y $f.z -padx 2 -pady 2 -sticky w
+
+ # Bitpix
+ set f [ttk::labelframe $w.bitpix -text [msgcat::mc {Pixel Size}] -padding 2]
+ ttk::radiobutton $f.char -text {Char} -variable ed(bitpix) -value 8
+ ttk::radiobutton $f.short -text {Short} -variable ed(bitpix) -value 16
+ ttk::radiobutton $f.ushort -text {UShort} -variable ed(bitpix) -value -16
+ ttk::radiobutton $f.long -text {Long} -variable ed(bitpix) -value 32
+ ttk::radiobutton $f.float -text {Float} -variable ed(bitpix) -value -32
+ ttk::radiobutton $f.double -text {Double} -variable ed(bitpix) -value -64
+ grid $f.char -padx 2 -pady 2 -sticky w
+ grid $f.short $f.ushort $f.long -padx 2 -pady 2 -sticky w
+ grid $f.float $f.double -padx 2 -pady 2 -sticky w
+
+ # Skip
+ set f [ttk::labelframe $w.skip -text [msgcat::mc {Header}] -padding 2]
+ ttk::label $f.t1 -text [msgcat::mc {Skip First}]
+ ttk::label $f.t2 -text [msgcat::mc {Bytes}]
+ ttk::entry $f.skip -textvariable ed(skip) -width 6
+ grid $f.t1 $f.skip $f.t2 -padx 2 -pady 2 -sticky w
+
+ # Arch
+ set f [ttk::labelframe $w.arch -text [msgcat::mc {Architecture}] -padding 2]
+ ttk::radiobutton $f.big -text {Big-Endian} -variable ed(arch) \
+ -value bigendian
+ ttk::radiobutton $f.little -text {Little-Endian} -variable ed(arch) \
+ -value littleendian
+ grid $f.big $f.little -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
+ grid $w.dim -sticky news
+ grid $w.bitpix -sticky news
+ grid $w.skip -sticky news
+ grid $w.arch -sticky news
+ grid $w.buttons -sticky ew
+ grid rowconfigure $w 0 -weight 1
+ grid rowconfigure $w 1 -weight 1
+ grid rowconfigure $w 2 -weight 1
+ grid rowconfigure $w 3 -weight 1
+ grid columnconfigure $w 0 -weight 1
+
+ DialogCenter $w
+ DialogWait $w ed(ok)
+ DialogDismiss $w
+
+ if {$ed(ok)} {
+ set ds9(array,x) $ed(x)
+ set ds9(array,y) $ed(y)
+ set ds9(array,bitpix) $ed(bitpix)
+ set ds9(array,skip) $ed(skip)
+ set ds9(array,arch) $ed(arch)
+
+ set var "\[xdim=$ed(x),ydim=$ed(y),zdim=$ed(z),bitpix=$ed(bitpix),skip=$ed(skip),arch=$ed(arch)\]"
+ }
+
+ set rr $ed(ok)
+ unset ed
+ return $rr
+}
+