Mercurial > hg > octave-nkf
comparison scripts/plot/util/newplot.m @ 17572:7bb76a22cde1
maint: Split scripts/plot directory into 4 pieces.
scripts/gui : user-interface functions
scripts/plot/appearance : functions controlling plot appearance
scripts/plot/draw : plotting functions which produce graphs
scripts/plot/util : low-level plotting functions and utilities.
* scripts/gui/guidata.m, scripts/gui/guihandles.m, scripts/gui/module.mk,
scripts/gui/private/__file_filter__.m,
scripts/gui/private/__fltk_file_filter__.m,
scripts/gui/private/__is_function__.m, scripts/gui/private/__uigetdir_fltk__.m,
scripts/gui/private/__uigetfile_fltk__.m,
scripts/gui/private/__uiobject_split_args__.m,
scripts/gui/private/__uiputfile_fltk__.m, scripts/gui/uicontextmenu.m,
scripts/gui/uicontrol.m, scripts/gui/uigetdir.m, scripts/gui/uigetfile.m,
scripts/gui/uimenu.m, scripts/gui/uipanel.m, scripts/gui/uipushtool.m,
scripts/gui/uiputfile.m, scripts/gui/uiresume.m, scripts/gui/uitoggletool.m,
scripts/gui/uitoolbar.m, scripts/gui/uiwait.m, scripts/gui/waitbar.m,
scripts/gui/waitforbuttonpress.m: Moved from scripts/plot to scripts/gui
* scripts/plot/appearance/__clabel__.m,
scripts/plot/appearance/__getlegenddata__.m, scripts/plot/appearance/axis.m,
scripts/plot/appearance/box.m, scripts/plot/appearance/caxis.m,
scripts/plot/appearance/clabel.m, scripts/plot/appearance/daspect.m,
scripts/plot/appearance/diffuse.m, scripts/plot/appearance/grid.m,
scripts/plot/appearance/gtext.m, scripts/plot/appearance/hidden.m,
scripts/plot/appearance/legend.m,
scripts/plot/appearance/orient.m, scripts/plot/appearance/pbaspect.m,
scripts/plot/appearance/private/__axis_label__.m,
scripts/plot/appearance/private/__axis_limits__.m,
scripts/plot/appearance/shading.m, scripts/plot/appearance/specular.m,
scripts/plot/appearance/text.m, scripts/plot/appearance/title.m,
scripts/plot/appearance/view.m, scripts/plot/appearance/whitebg.m,
scripts/plot/appearance/xlabel.m, scripts/plot/appearance/xlim.m,
scripts/plot/appearance/ylabel.m, scripts/plot/appearance/ylim.m,
scripts/plot/appearance/zlabel.m, scripts/plot/appearance/zlim.m:
Moved from scripts/plot to subdir appearance.
* scripts/plot/draw/area.m, scripts/plot/draw/bar.m, scripts/plot/draw/barh.m,
scripts/plot/draw/colorbar.m, scripts/plot/draw/comet.m,
scripts/plot/draw/comet3.m, scripts/plot/draw/compass.m,
scripts/plot/draw/contour.m, scripts/plot/draw/contour3.m,
scripts/plot/draw/contourc.m, scripts/plot/draw/contourf.m,
scripts/plot/draw/cylinder.m, scripts/plot/draw/ellipsoid.m,
scripts/plot/draw/errorbar.m, scripts/plot/draw/ezcontour.m,
scripts/plot/draw/ezcontourf.m, scripts/plot/draw/ezmesh.m,
scripts/plot/draw/ezmeshc.m, scripts/plot/draw/ezplot.m,
scripts/plot/draw/ezplot3.m, scripts/plot/draw/ezpolar.m,
scripts/plot/draw/ezsurf.m, scripts/plot/draw/ezsurfc.m,
scripts/plot/draw/feather.m, scripts/plot/draw/fill.m,
scripts/plot/draw/fplot.m, scripts/plot/draw/hist.m,
scripts/plot/draw/isocolors.m, scripts/plot/draw/isonormals.m,
scripts/plot/draw/isosurface.m, scripts/plot/draw/line.m,
scripts/plot/draw/loglog.m, scripts/plot/draw/loglogerr.m,
scripts/plot/draw/mesh.m, scripts/plot/draw/meshc.m, scripts/plot/draw/meshz.m,
scripts/plot/draw/pareto.m,
scripts/plot/draw/patch.m, scripts/plot/draw/pcolor.m,
scripts/plot/draw/peaks.m, scripts/plot/draw/pie.m, scripts/plot/draw/pie3.m,
scripts/plot/draw/plot.m, scripts/plot/draw/plot3.m,
scripts/plot/draw/plotmatrix.m, scripts/plot/draw/plotyy.m,
scripts/plot/draw/polar.m, scripts/plot/draw/private/__add_datasource__.m,
scripts/plot/draw/private/__bar__.m, scripts/plot/draw/private/__contour__.m,
scripts/plot/draw/private/__errcomm__.m,
scripts/plot/draw/private/__errplot__.m,
scripts/plot/draw/private/__ezplot__.m,
scripts/plot/draw/private/__interp_cube__.m,
scripts/plot/draw/private/__line__.m,
scripts/plot/draw/private/__marching_cube__.m,
scripts/plot/draw/private/__patch__.m, scripts/plot/draw/private/__pie__.m,
scripts/plot/draw/private/__plt__.m, scripts/plot/draw/private/__quiver__.m,
scripts/plot/draw/private/__scatter__.m, scripts/plot/draw/private/__stem__.m,
scripts/plot/draw/quiver.m, scripts/plot/draw/quiver3.m,
scripts/plot/draw/rectangle.m, scripts/plot/draw/ribbon.m,
scripts/plot/draw/rose.m, scripts/plot/draw/scatter.m,
scripts/plot/draw/scatter3.m, scripts/plot/draw/semilogx.m,
scripts/plot/draw/semilogxerr.m, scripts/plot/draw/semilogy.m,
scripts/plot/draw/semilogyerr.m, scripts/plot/draw/shrinkfaces.m,
scripts/plot/draw/slice.m, scripts/plot/draw/sombrero.m,
scripts/plot/draw/sphere.m, scripts/plot/draw/stairs.m,
scripts/plot/draw/stem.m, scripts/plot/draw/stem3.m,
scripts/plot/draw/stemleaf.m, scripts/plot/draw/surf.m,
scripts/plot/draw/surface.m, scripts/plot/draw/surfc.m,
scripts/plot/draw/surfl.m, scripts/plot/draw/surfnorm.m,
scripts/plot/draw/tetramesh.m, scripts/plot/draw/trimesh.m,
scripts/plot/draw/triplot.m, scripts/plot/draw/trisurf.m,
scripts/plot/draw/waterfall.m: Moved from plot/ to subdir draw.
* scripts/plot/util/__actual_axis_position__.m,
scripts/plot/util/__default_plot_options__.m,
scripts/plot/util/__gnuplot_drawnow__.m,
scripts/plot/util/__next_line_color__.m,
scripts/plot/util/__next_line_style__.m,
scripts/plot/util/__plt_get_axis_arg__.m, scripts/plot/util/__pltopt__.m,
scripts/plot/util/allchild.m, scripts/plot/util/ancestor.m,
scripts/plot/util/axes.m, scripts/plot/util/cla.m, scripts/plot/util/clf.m,
scripts/plot/util/close.m, scripts/plot/util/closereq.m,
scripts/plot/util/colstyle.m, scripts/plot/util/copyobj.m,
scripts/plot/util/figure.m, scripts/plot/util/findall.m,
scripts/plot/util/findfigs.m, scripts/plot/util/findobj.m,
scripts/plot/util/gca.m, scripts/plot/util/gcbf.m, scripts/plot/util/gcbo.m,
scripts/plot/util/gcf.m, scripts/plot/util/gco.m, scripts/plot/util/ginput.m,
scripts/plot/util/gnuplot_binary.in, scripts/plot/util/graphics_toolkit.m,
scripts/plot/util/hdl2struct.m, scripts/plot/util/hggroup.m,
scripts/plot/util/hold.m, scripts/plot/util/isaxes.m,
scripts/plot/util/isfigure.m, scripts/plot/util/ishghandle.m,
scripts/plot/util/ishold.m, scripts/plot/util/isprop.m,
scripts/plot/util/linkprop.m, scripts/plot/util/meshgrid.m,
scripts/plot/util/ndgrid.m,
scripts/plot/util/newplot.m, scripts/plot/util/print.m,
scripts/plot/util/printd.m, scripts/plot/util/private/__add_default_menu__.m,
scripts/plot/util/private/__fltk_ginput__.m,
scripts/plot/util/private/__fltk_print__.m,
scripts/plot/util/private/__ghostscript__.m,
scripts/plot/util/private/__gnuplot_get_var__.m,
scripts/plot/util/private/__gnuplot_ginput__.m,
scripts/plot/util/private/__gnuplot_has_feature__.m,
scripts/plot/util/private/__gnuplot_has_terminal__.m,
scripts/plot/util/private/__gnuplot_open_stream__.m,
scripts/plot/util/private/__gnuplot_print__.m,
scripts/plot/util/private/__gnuplot_version__.m,
scripts/plot/util/private/__go_draw_axes__.m,
scripts/plot/util/private/__go_draw_figure__.m,
scripts/plot/util/private/__print_parse_opts__.m,
scripts/plot/util/private/__tight_eps_bbox__.m, scripts/plot/util/refresh.m,
scripts/plot/util/refreshdata.m, scripts/plot/util/saveas.m,
scripts/plot/util/shg.m, scripts/plot/util/struct2hdl.m,
scripts/plot/util/subplot.m: Moved from plot to subdir util.
* etc/HACKING: Updated directory structure info.
* scripts/Makefile.am, scripts/plot/appearance/module.mk,
scripts/plot/draw/module.mk, scripts/plot/util/module.mk:
Added new directories to build system.
author | Rik <rik@octave.org> |
---|---|
date | Fri, 04 Oct 2013 17:09:08 -0700 |
parents | scripts/plot/newplot.m@bc924baa2c4e |
children | ed9a21a90221 |
comparison
equal
deleted
inserted
replaced
17571:6e4ea5c8a4bb | 17572:7bb76a22cde1 |
---|---|
1 ## Copyright (C) 2005-2012 John W. Eaton | |
2 ## | |
3 ## This file is part of Octave. | |
4 ## | |
5 ## Octave is free software; you can redistribute it and/or modify it | |
6 ## under the terms of the GNU General Public License as published by | |
7 ## the Free Software Foundation; either version 3 of the License, or (at | |
8 ## your option) any later version. | |
9 ## | |
10 ## Octave is distributed in the hope that it will be useful, but | |
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 ## General Public License for more details. | |
14 ## | |
15 ## You should have received a copy of the GNU General Public License | |
16 ## along with Octave; see the file COPYING. If not, see | |
17 ## <http://www.gnu.org/licenses/>. | |
18 | |
19 ## -*- texinfo -*- | |
20 ## @deftypefn {Function File} {} newplot () | |
21 ## @deftypefnx {Function File} {} newplot (@var{hfig}) | |
22 ## @deftypefnx {Function File} {} newplot (@var{hax}) | |
23 ## @deftypefnx {Function File} {@var{hax} =} newplot (@dots{}) | |
24 ## Prepare graphics engine to produce a new plot. | |
25 ## | |
26 ## This function is called at the beginning of all high-level plotting | |
27 ## functions. It is not normally required in user programs. @code{newplot} | |
28 ## queries the @qcode{"NextPlot"} field of the current figure and axis to | |
29 ## determine what to do. | |
30 ## | |
31 ## @multitable @columnfractions .25 .75 | |
32 ## @headitem Figure NextPlot @tab Action | |
33 ## @item @qcode{"new"} @tab Create a new figure and make it the current figure. | |
34 ## | |
35 ## @item @qcode{"add"} (default) @tab Add new graphic objects to the current figure. | |
36 ## | |
37 ## @item @qcode{"replacechildren"} @tab Delete child objects whose HandleVisibility is | |
38 ## set to @qcode{"on"}. Set NextPlot property to @qcode{"add"}. This | |
39 ## typically clears a figure, but leaves in place hidden objects such as | |
40 ## menubars. This is equivalent to @code{clf}. | |
41 ## | |
42 ## @item @qcode{"replace"} @tab Delete all child objects of the figure and | |
43 ## reset all figure properties to their defaults. However, the following | |
44 ## four properties are not reset: Position, Units, PaperPosition, PaperUnits. | |
45 ## This is equivalent to @code{clf reset}. | |
46 ## @end multitable | |
47 ## | |
48 ## @multitable @columnfractions .25 .75 | |
49 ## @headitem Axis NextPlot @tab Action | |
50 ## @item @qcode{"add"} @tab Add new graphic objects to the current axes. This is | |
51 ## equivalent to @code{hold on}. | |
52 ## | |
53 ## @item @qcode{"replacechildren"} @tab Delete child objects whose HandleVisibility is | |
54 ## set to @qcode{"on"}, but leave axis properties unmodified. This typically | |
55 ## clears a plot, but preserves special settings such as log scaling for | |
56 ## axes. This is equivalent to @code{cla}. | |
57 ## | |
58 ## @item @qcode{"replace"} (default) @tab Delete all child objects of the | |
59 ## axis and reset all axis properties to their defaults. However, the | |
60 ## following properties are not reset: Position, Units. This is equivalent | |
61 ## to @code{cla reset}. | |
62 ## @end multitable | |
63 ## | |
64 ## If the optional input @var{hfig} or @var{hax} is given then prepare the | |
65 ## specified figure or axes rather than the current figure and axes. | |
66 ## | |
67 ## The optional return value @var{hax} is a graphics handle to the created | |
68 ## axes object (not figure). | |
69 ## | |
70 ## @strong{Caution:} Calling @code{newplot} may change the current figure and | |
71 ## current axis. | |
72 ## @end deftypefn | |
73 | |
74 ## FIXME: The Matlab function takes an optional list of file handles, hsave, | |
75 ## which are not deleted when the figure and axes are prepared. | |
76 ## I'm sure there is a good reason for that, but coding such | |
77 ## compatibility is really tricky and doesn't serve much purpose since | |
78 ## newplot is nearly exclusively used by Octave's internal plotting | |
79 ## functions. In Octave's case the argument is almost always null, | |
80 ## or occasionally the axis handle to plot into. | |
81 | |
82 function hax = newplot (hsave = []) | |
83 | |
84 if (nargin > 1) | |
85 print_usage (); | |
86 endif | |
87 | |
88 cf = []; | |
89 ca = []; | |
90 | |
91 if (! isempty (hsave)) | |
92 ## Find the first valid axes | |
93 ca = ancestor (hsave, "axes", "toplevel"); | |
94 ca = ca(find (ca, 1)); | |
95 ## Next, find the figure associated with any axis found | |
96 if (! isempty (ca)) | |
97 cf = ancestor (ca, "figure", "toplevel"); | |
98 else | |
99 cf = ancestor (hsave, "figure", "toplevel"); | |
100 cf = cf(find (cf, 1)); | |
101 endif | |
102 endif | |
103 | |
104 if (isempty (cf)) | |
105 ## get current figure, or create a new one if necessary | |
106 cf = gcf (); | |
107 else | |
108 ## switch to figure provided without causing other updates | |
109 set (0, "currentfigure", cf); | |
110 endif | |
111 | |
112 fnp = get (cf, "nextplot"); | |
113 switch (fnp) | |
114 case "add" | |
115 ## Default case. Doesn't require action. | |
116 case "new" | |
117 ## Ordinarily, create a new figure to hold plot. | |
118 ## But, if user has requested preparing a specific axis, then | |
119 ## use the existing figure to hold the requested axis. | |
120 if (isempty (ca)) | |
121 cf = figure (); | |
122 endif | |
123 case "replacechildren" | |
124 kids = get (cf, "children"); | |
125 if (! isempty (ca)) | |
126 kids(kids == ca) = []; | |
127 endif | |
128 delete (kids); | |
129 case "replace" | |
130 kids = allchild (cf); | |
131 if (! isempty (ca)) | |
132 kids(kids == ca) = []; | |
133 endif | |
134 delete (kids); | |
135 reset (cf); | |
136 endswitch | |
137 set (cf, "nextplot", "add"); # Matlab compatibility | |
138 | |
139 if (isempty (ca)) | |
140 ca = gca (); | |
141 else | |
142 set (cf, "currentaxes", ca); | |
143 endif | |
144 | |
145 ## FIXME: Is this necessary anymore? | |
146 ## It seems like a kluge that belongs somewhere else. | |
147 if (strcmp (get (ca, "__hold_all__"), "off")) | |
148 __next_line_color__ (true); | |
149 __next_line_style__ (true); | |
150 else | |
151 __next_line_color__ (false); | |
152 __next_line_style__ (false); | |
153 endif | |
154 | |
155 anp = get (ca, "nextplot"); | |
156 switch (anp) | |
157 case "add" | |
158 ## Default case. Doesn't require action. | |
159 case "replacechildren" | |
160 delete (get (ca, "children")); | |
161 case "replace" | |
162 __go_axes_init__ (ca, "replace"); | |
163 __request_drawnow__ (); | |
164 ## FIXME: The code above should perform the following: | |
165 ########################### | |
166 ## delete (allchild (ca)); | |
167 ## reset (ca); | |
168 ########################### | |
169 ## Actually, __go_axes_init__ does both less and more. | |
170 ## It doesn't really remove all children since it re-instantiates | |
171 ## xlabel, ylabel, zlabel, and title text objects. | |
172 ## Also it preserves font properties like fontsize. | |
173 ## For the time being, in order to have axis labels and title work, | |
174 ## the above code is is required. | |
175 endswitch | |
176 | |
177 if (nargout > 0) | |
178 hax = ca; | |
179 endif | |
180 | |
181 endfunction | |
182 | |
183 | |
184 %!test | |
185 %! hf = figure ("visible", "off"); | |
186 %! unwind_protect | |
187 %! p = plot ([0, 1]); | |
188 %! hax = newplot (); | |
189 %! assert (hax, gca); | |
190 %! assert (isempty (get (gca, "children"))); | |
191 %! unwind_protect_cleanup | |
192 %! close (hf); | |
193 %! end_unwind_protect | |
194 |