diff options
Diffstat (limited to 'ds9/library/plotprint.tcl')
-rw-r--r-- | ds9/library/plotprint.tcl | 161 |
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) + } +} |