Mercurial > forge
diff main/plot/print.m @ 0:6b33357c7561 octave-forge
Initial revision
author | pkienzle |
---|---|
date | Wed, 10 Oct 2001 19:54:49 +0000 |
parents | |
children | 7489ae70c347 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main/plot/print.m Wed Oct 10 19:54:49 2001 +0000 @@ -0,0 +1,321 @@ +## Copyright (C) 1999 Daniel Heiserer, Copyright (C) 2001 Laurent Mazet +## +## This program is free software; it is distributed in the hope that it +## will be useful, but WITHOUT ANY WARRANTY; without even the implied +## warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See +## the GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this file; see the file COPYING. If not, write to the +## Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA +## 02111-1307, USA. + +## usage: print (filename, options) +## +## Print a graph, or save it to a file +## +## filename: +## File to receive output. If no filename is specified, output is +## sent to the printer. +## +## options: +## -Pprinter +## Printer to which the graph is sent if no filename is specified. +## +## -color | -mono +## Monochrome or colour lines. +## +## -solid | -dashed +## Solid or dashed lines. +## +## -portrait | -landscape +## Plot orientation, as returned by "orient". +## +## -dDEVICE +## Output device, where DEVICE is one of: +## +## ps,ps2,psc,psc2 +## Postscript (level 1 and 2, mono and color) +## eps,eps2,epsc,epsc2 +## Encapsulated postscript (level 1 and 2, mono and color) +## ill,aifm +## Adobe Illustrator +## cdr,corel +## CorelDraw +## hpgl HP plotter language +## fig XFig +## dxf AutoCAD +## mf Metafont +## png Portable network graphics +## pbm PBMplus +## +## Other devices are supported by "convert" from ImageMagick. Type +## system("convert") to see what formats are available. +## +## If the device is omitted, it is inferred from the file extension, +## or if there is no filename it is sent to the printer as postscript. +## +## -Ffontname, -Ffontname:size, -F:size +## Postscript font (for use with postscript, aifm, corel and fig) +## "Helvetica" by default for PS/Aifm, "SwitzerlandLight" for Corel +## Can also be "Times-Roman". The font size is given in points. +## The fontname is ignored for the fig device. +## +## The filename and options can be given in any order. +## +## If you are using Octave 2.1.x or above, command("print") will change +## print from a function to a command, so instead of typing +## print("-FTimes-Roman:14", "-dashed", "-depsc", "out.ps") +## you can type +## print -FTimes-Roman:14 -dashed -depsc out.ps +## +## See also: orient, command + +## Author: Daniel Heiserer <Daniel.heiserer@physik.tu-muenchen.de> +## 2001-03-23 Laurent Mazet <mazet@crm.mot.com> +## * simplified interface: guess the device from the extension +## * font support +## 2001-03-25 Paul Kienzle <pkienzle@kienzle.powernet.co.uk> +## * add unwind_protect +## * use tmpnam to generate temporary name +## * move "set term" before "set output" as required by gnuplot +## * more options, and flexible options +## 2001-03-29 Laurent Mazet <mazet@crm.mot.com> +## * add solid and dashed options +## * change PBMplus device +## * add Corel device +## * take care of the default terminal settings to restore them. +## * add color, mono, dashed and solid support for printing and convert. +## * add orientation for printing. +## * create a .ps for printing (avoid some filtering problems). +## * default printing is mono, default convert is color. +## * add font size support. +## 2001-03-30 Laurent Mazet <mazet@crm.mot.com> +## * correct correl into corel +## * delete a irrelevant test +## * check for convert before choosing the ouput device +## 2001-03-31 Paul Kienzle <pkienzle@kienzle.powernet.co.uk> +## * use -Ffontname:size instead of -F"fontname size" +## * add font size support to fig option +## * update documentation + +function print(...) + + ## take care of the settings we had before + origterm = gget("terminal"); + origout = gget("output"); + _automatic_replot = automatic_replot; + + ## take care of the default terminal settings to restore them. + terminal_default = ""; + + orientation = orient; + use_color = 0; # 0=default, -1=mono, +1=color + force_solid = 0; # 0=default, -1=dashed, +1=solid + fontsize = font = name = devopt = printer = ""; + + va_start(); + for i=1:nargin + arg = va_arg(); + if isstr(arg) + if strcmp(arg, "-color") + use_color = 1; + elseif strcmp(arg, "-mono") + use_color = -1; + elseif strcmp(arg, "-solid") + force_solid = 1; + elseif strcmp(arg, "-dashed") + force_solid = -1; + elseif strcmp(arg, "-portrait") + orientation = "portrait"; + elseif strcmp(arg, "-landscape") + orientation = "landscape"; + elseif length(arg) > 2 && arg(1:2) == "-d" + devopt = arg(3:length(arg)); + elseif length(arg) > 2 && arg(1:2) == "-P" + printer = arg; + elseif length(arg) > 2 && arg(1:2) == "-F" + idx = rindex(arg, ":"); + if (idx) + font = arg(3:idx-1); + fontsize = arg(idx+1:length(arg)); + else + font = arg(3:length(arg)); + endif + elseif length(arg) >= 1 && arg(1) == "-" + error([ "print: unknown option ", arg ]); + elseif length(arg) > 0 + name = arg; + endif + else + error("print: expects string options"); + endif + endfor + + doprint = isempty(name); + if doprint + if isempty(devopt) + printname = [ tmpnam, ".ps" ]; + else + printname = [ tmpnam, ".", devopt ]; + endif + name = printname; + endif + + if isempty(devopt) + dot = rindex(name, "."); + if (dot == 0) + error ("print: no format specified"); + else + dev = tolower(name(dot+1:length(name))); + endif + else + dev = devopt; + endif + + if strcmp(dev, "ill") + dev = "aifm"; + elseif strcmp(dev, "cdr") + dev = "corel"; + endif + + ## check if we have to use convert + dev_list = [" aifm corel fig png pbm dxf mf hpgl", ... + " ps ps2 psc psc2 eps eps2 epsc epsc2 " ]; + convertname = ""; + if isempty(findstr(dev_list , [ " ", dev, " " ])) + if !isempty(devopt) + convertname = [ devopt ":" name ]; + else + convertname = name; + endif + dev = "epsc"; + name = [ tmpnam, ".eps" ]; + endif + + unwind_protect + automatic_replot = 0; + + if strcmp(dev, "ps") || strcmp(dev, "ps2") ... + || strcmp(dev, "psc") || strcmp(dev, "psc2") ... + || strcmp(dev, "epsc") || strcmp(dev, "epsc2") ... + || strcmp(dev, "eps") || strcmp(dev, "eps2") + ## Various postscript options + gset term postscript; + terminal_default = gget ("terminal"); + + if dev(1) == "e" + options = "eps "; + else + options = [ orientation, " " ]; + endif + options = [ options, "enhanced " ]; + + if any( dev == "c" ) || use_color > 0 + if force_solid < 0 + options = [ options, "color dashed " ]; + else + options = [ options, "color solid " ]; + endif + else + if force_solid > 0 + options = [ options, "mono solid " ]; + else + options = [ options, "mono dashed " ]; + endif + endif + + if !isempty(font) + options = [ options, "\"", font, "\" " ]; + endif + if !isempty(fontsize) + options = [ options, " ", fontsize ]; + endif + + eval (sprintf ("gset term postscript %s;", options)); + + + elseif strcmp(dev, "aifm") || strcmp(dev, "corel") + ## Adobe Illustrator, CorelDraw + eval(sprintf ("gset term %s;", dev)); + terminal_default = gget ("terminal"); + if (use_color >= 0) + options = " color"; + else + options = " mono"; + endif + if !isempty(font) + options = [ options, " \"" , font, "\"" ]; + endif + if !isempty(fontsize) + options = [ options, " ", fontsize ]; + endif + + eval (sprintf ("gset term %s %s;", dev, options)); + + elseif strcmp(dev, "fig") + ## XFig + gset term fig; + terminal_default = gget ("terminal"); + options = orientation; + if (use_color >= 0) + options = " color"; + else + options = " mono"; + endif + if !isempty(fontsize) + options = [ options, " fontsize ", fontsize ]; + endif + eval (sprintf ("gset term fig %s;", option)); + + elseif strcmp(dev, "png") || strcmp(dev, "pbm") + ## Portable network graphics, PBMplus + eval(sprintf ("gset term %s;", dev)); + terminal_default = gget ("terminal"); + if (use_color >= 0) + eval (sprintf ("gset term %s color medium;", dev)); + else + eval (sprintf ("gset term %s mono medium;", dev)); + endif + + elseif strcmp(dev,"dxf") || strcmp(dev,"mf") || strcmp(dev, "hpgl") + ## AutoCad DXF, METAFONT, HPGL + eval (sprintf ("gset terminal %s;", dev)); + + endif; + + eval (sprintf ("gset output \"%s\";", name)); + replot; + + unwind_protect_cleanup + + ## Restore init state + if isempty (origout) + gset output; + else + eval (sprintf ("gset output %s;", origout)); + end + if ! isempty (terminal_default) + eval (sprintf ("gset terminal %s;", terminal_default)); + endif + eval (sprintf ("gset terminal %s;", origterm)); + replot; + + automatic_replot = _automatic_replot ; + + end_unwind_protect + + if !isempty(convertname) + command = [ "convert ", name, " ", convertname ]; + [output, errcode] = system (command); + unlink (name); + if (errcode) + error ("print: could not convert"); + endif + endif + if doprint + system(sprintf ("lpr %s %s", printer, printname)); + unlink(printname); + endif + +endfunction