summaryrefslogtreecommitdiffstats
path: root/ds9/library/plotprint.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'ds9/library/plotprint.tcl')
-rw-r--r--ds9/library/plotprint.tcl161
1 files changed, 161 insertions, 0 deletions
diff --git a/ds9/library/plotprint.tcl b/ds9/library/plotprint.tcl
index 6cc5c27..761598b 100644
--- a/ds9/library/plotprint.tcl
+++ b/ds9/library/plotprint.tcl
@@ -19,6 +19,18 @@ proc PlotPostScript {varname} {
upvar #0 $varname var
global $varname
+ set ll [llength $var(graphs)]
+ if {$ll == 1} {
+ PlotPostScriptSingle $varname
+ } else {
+ PlotPostScriptMulti $varname
+ }
+}
+
+proc PlotPostScriptSingle {varname} {
+ upvar #0 $varname var
+ global $varname
+
global ps
global ds9
@@ -110,3 +122,152 @@ proc PlotPostScript {varname} {
-font "{$ds9($var(legend,font,family))} $var(legend,font,size) $var(legend,font,weight) $var(legend,font,slant)" \
-titlefont "{$ds9($var(legend,title,family))} $var(legend,title,size) $var(legend,title,weight) $var(legend,title,slant)"
}
+
+proc PlotPostScriptMulti {varname} {
+ upvar #0 $varname var
+ global $varname
+
+ global ps
+ global ds9
+
+ #
+ # Options
+ #
+ set options "-decorations false"
+
+ # Color
+ switch -- $ps(color) {
+ rgb -
+ cmyk {append options " -greyscale no"}
+ gray {append options " -greyscale yes"}
+ }
+
+ # can't trust 'tk scaling'
+ switch $ds9(wm) {
+ x11 -
+ win32 {
+ set scaling [tk scaling]
+ if {$scaling == Inf} {
+ set scaling 1.334
+ }
+ }
+ aqua {set scaling 1.4}
+ }
+
+ # Page size
+ switch -- $ps(size) {
+ letter {append options " -paperwidth 8.5i -paperheight 11.i"}
+ legal {append options " -paperwidth 8.5i -paperheight 14.i"}
+ tabloid {append options " -paperwidth 11i -paperheight 17.i"}
+ poster {append options " -paperwidth 36.i -paperheight 48.i"}
+ a4 {append options " -paperwidth 195m -paperheight 282m"}
+ other {
+ if {$ps(width) != {} && $ps(height) != {}} {
+ set pgww "[append ps(width) i]"
+ set pghh "[append ps(height) i]"
+ append options " -paperwidth $pgww -paperheight pghh"
+ }
+ }
+ othermm {
+ if {$ps(width) != {} && $ps(height) != {}} {
+ set pgww "[append ps(width) m]"
+ set pghh "[append ps(height) m]"
+ append options " -paperwidth $pgww -paperheight pghh"
+ }
+ }
+ }
+
+ # Orientation
+ switch -- $ps(orient) {
+ portrait {append options " -landscape false"}
+ landscape {append options " -landscape true"}
+ }
+
+ # Prolog
+
+ set width [expr [winfo width $var(top)]*$ps(scale)/100./$scaling]
+ set height [expr [winfo height $var(top)]*$ps(scale)/100./$scaling]
+ set prolog [eval $var([lindex $var(graphs) 0],graph) postscript output \
+ "$options -width $width -height $height"]
+
+ #
+ # For each graph
+ #
+ foreach cc $var(graphs) {
+
+ # set postscript fonts
+ $var($cc,graph) configure -font "$var(graph,title,family) $var(graph,title,size) $var(graph,title,weight) $var(graph,title,slant)"
+
+ $var($cc,graph) xaxis configure -tickfont "$var(axis,font,family) $var(axis,font,size) $var(axis,font,weight) $var(axis,font,slant)" -titlefont "$var(axis,title,family) $var(axis,title,size) $var(axis,title,weight) $var(axis,title,slant)"
+
+ $var($cc,graph) yaxis configure -tickfont "$var(axis,font,family) $var(axis,font,size) $var(axis,font,weight) $var(axis,font,slant)" -titlefont "$var(axis,title,family) $var(axis,title,size) $var(axis,title,weight) $var(axis,title,slant)"
+
+ $var($cc,graph) legend configure -font "$var(legend,font,family) $var(legend,font,size) $var(legend,font,weight) $var(legend,font,slant)" -titlefont "$var(legend,title,family) $var(legend,title,size) $var(legend,title,weight) $var(legend,title,slant)"
+
+ # Size
+ set ww [expr [winfo width $var($cc,graph)]*$ps(scale)/100./$scaling]
+ set hh [expr [winfo height $var($cc,graph)]*$ps(scale)/100./$scaling]
+
+ set var($cc,ps) [eval $var($cc,graph) postscript output \
+ "$options -width $ww -height $hh"]
+
+ # reset fonts
+ $var($cc,graph) configure \
+ -font "{$ds9($var(graph,title,family))} $var(graph,title,size) $var(graph,title,weight) $var(graph,title,slant)"
+
+ $var($cc,graph) xaxis configure \
+ -tickfont "{$ds9($var(axis,font,family))} $var(axis,font,size) $var(axis,font,weight) $var(axis,font,slant)" \
+ -titlefont "{$ds9($var(axis,title,family))} $var(axis,title,size) $var(axis,title,weight) $var(axis,title,slant)"
+
+ $var($cc,graph) yaxis configure \
+ -tickfont "{$ds9($var(axis,font,family))} $var(axis,font,size) $var(axis,font,weight) $var(axis,font,slant)" \
+ -titlefont "{$ds9($var(axis,title,family))} $var(axis,title,size) $var(axis,title,weight) $var(axis,title,slant)"
+
+ $var($cc,graph) legend configure \
+ -font "{$ds9($var(legend,font,family))} $var(legend,font,size) $var(legend,font,weight) $var(legend,font,slant)" \
+ -titlefont "{$ds9($var(legend,title,family))} $var(legend,title,size) $var(legend,title,weight) $var(legend,title,slant)"
+ }
+
+ # channel
+ if {$ps(dest) == "file" && $ps(filename) != {}} {
+ set ch [open $ps(filename) w]
+ } else {
+ set ch [open "| $ps(cmd)" w]
+ }
+
+ # prolog
+ set bb [string first {%%EndSetup} $prolog]
+ set bb [expr $bb+9]
+ puts $ch [string range $prolog 0 $bb]
+
+ foreach cc $var(graphs) {
+ set xx [expr $width*$var($cc,tx)]
+ set yy [expr $height*$var($cc,ty)]
+ puts $ch "gsave"
+ puts $ch "$xx $yy translate"
+
+ # begin
+ set bb [string first {%%EndSetup} $var($cc,ps)]
+ set bb [expr $bb+9]
+ incr bb
+
+ # end
+ set ee [string last {showpage} $var($cc,ps)]
+ incr ee -1
+
+ # body
+ puts $ch [string range $var($cc,ps) $bb $ee]
+
+ puts $ch "grestore"
+ }
+
+ # trailer
+ set ee [string last {showpage} $prolog]
+ puts $ch [string range $prolog $ee end]
+
+ close $ch
+
+ foreach cc $var(graphs) {
+ unset var($cc,ps)
+ }
+}