Mercurial > hg > octave-lyh
diff scripts/plot/drawnow.m @ 6870:e2e5425905ac
[project @ 2007-09-06 20:18:20 by jwe]
author | jwe |
---|---|
date | Thu, 06 Sep 2007 20:18:28 +0000 |
parents | f7bc1c20800e |
children | 76e3d985ae56 |
line wrap: on
line diff
--- a/scripts/plot/drawnow.m +++ b/scripts/plot/drawnow.m @@ -24,7 +24,7 @@ ## Author: jwe -function drawnow (term, file) +function drawnow (term, file, debug_file) persistent drawnow_executing = 0; @@ -35,18 +35,27 @@ return; endif - if (nargin == 2) + if (nargin == 2 || nargin == 3) h = get (0, "currentfigure"); if (h) f = get (h); plot_stream = []; + fid = []; unwind_protect plot_stream = open_gnuplot_stream ([], term, file); __go_draw_figure__ (f, plot_stream); + if (nargin == 3) + fid = fopen (debug_file, "wb"); + init_plot_stream (fid, [], term, file); + __go_draw_figure__ (f, fid); + endif unwind_protect_cleanup if (! isempty (plot_stream)) pclose (plot_stream); endif + if (! isempty (fid)) + fclose (fid); + endif end_unwind_protect else error ("drawnow: nothing to draw"); @@ -84,7 +93,7 @@ endfunction -function plot_stream = open_gnuplot_stream (h, term, file) +function plot_stream = open_gnuplot_stream (h, varargin) ## If drawnow is cleared, it is possible to register __go_close_all__ ## more than once, but that is not fatal. @@ -102,47 +111,7 @@ set (h, "__plot_stream__", plot_stream); endif - if (nargin == 3) - fprintf (plot_stream, "set terminal %s;\n", term); - fprintf (plot_stream, "set output \"%s\";\n", file); - else - - ## Guess the terminal type. - term = getenv ("GNUTERM"); - if (isempty (term)) - if (! isempty (getenv ("DISPLAY"))) - term = "x11"; - elseif (! isunix ()) - term = "windows"; - else - ## This should really be checking for os x before setting - ## the terminal type to aqua, but nobody will notice because - ## every other unix will be using x11 and windows will be - ## using windows. Those diehards still running octave from - ## a linux console know how to set the GNUTERM variable. - term = "aqua"; - endif - endif - - ## If no 'h' (why not?) then open the terminal as Figure 0. - if (isempty (h)) - h = 0; - endif - - if (strcmp (term, "x11")) - fprintf (plot_stream, "set terminal x11 title \"Figure %d\"\n", h); - elseif (strcmp (term, "aqua")) - ## Aqua doesn't understand the 'title' option despite what the - ## gnuplot 4.2 documentation says. - fprintf (plot_stream, "set terminal aqua %d\n", h); - elseif (strcmp (term, "wxt")) - fprintf (plot_stream, "set terminal wxt title \"Figure %d\"\n", h); - endif - ## gnuplot will pick up the GNUTERM environment variable itself - ## so no need to set the terminal type if not also setting the - ## figure title. - - endif + init_plot_stream (plot_stream, h, varargin{:}) if (isempty (__go_close_all_registered__)) atexit ("__go_close_all__"); @@ -152,3 +121,53 @@ endif endfunction + +function init_plot_stream (plot_stream, h, term, file) + + if (nargin == 4) + if (! isempty (term)) + fprintf (plot_stream, "set terminal %s;\n", term); + endif + if (! isempty (file)) + fprintf (plot_stream, "set output \"%s\";\n", file); + endif + else + + ## Guess the terminal type. + term = getenv ("GNUTERM"); + if (isempty (term)) + if (! isempty (getenv ("DISPLAY"))) + term = "x11"; + elseif (! isunix ()) + term = "windows"; + else + ## This should really be checking for os x before setting + ## the terminal type to aqua, but nobody will notice because + ## every other unix will be using x11 and windows will be + ## using windows. Those diehards still running octave from + ## a linux console know how to set the GNUTERM variable. + term = "aqua"; + endif + endif + + ## If no 'h' (why not?) then open the terminal as Figure 0. + if (isempty (h)) + h = 0; + endif + + if (strcmp (term, "x11")) + fprintf (plot_stream, "set terminal x11 title \"Figure %d\"\n", h); + elseif (strcmp (term, "aqua")) + ## Aqua doesn't understand the 'title' option despite what the + ## gnuplot 4.2 documentation says. + fprintf (plot_stream, "set terminal aqua %d\n", h); + elseif (strcmp (term, "wxt")) + fprintf (plot_stream, "set terminal wxt title \"Figure %d\"\n", h); + endif + ## gnuplot will pick up the GNUTERM environment variable itself + ## so no need to set the terminal type if not also setting the + ## figure title. + + endif + +endfunction