Mercurial > hg > octave-nkf
diff scripts/plot/cla.m @ 17081:86067af51d5e
Truly reset axes so that all properties are set to default.
* libinterp/corefcn/graphics.cc: Add missing defaults for some
properties when axis is reset.
* scripts/plot/cla.m: Redo docstring. Simplify code. Call __go_axes_init__ to
do resetting of axes. Add %!test block.
author | Rik <rik@octave.org> |
---|---|
date | Thu, 25 Jul 2013 11:24:03 -0700 |
parents | f3d52523cde1 |
children | eaab03308c0b |
line wrap: on
line diff
--- a/scripts/plot/cla.m +++ b/scripts/plot/cla.m @@ -17,14 +17,20 @@ ## <http://www.gnu.org/licenses/>. ## -*- texinfo -*- -## @deftypefn {Function File} {} cla () -## @deftypefnx {Function File} {} cla ("reset") +## @deftypefn {Function File} {} cla +## @deftypefnx {Function File} {} cla reset ## @deftypefnx {Function File} {} cla (@var{hax}) ## @deftypefnx {Function File} {} cla (@var{hax}, "reset") -## Delete the children of the current axes with visible handles. -## If @var{hax} is specified and is an axes object handle, operate on it -## instead of the current axes. If the optional argument @code{"reset"} -## is specified, also delete the children with hidden handles. +## Clear the current axes by deleting child graphic objects with visible +## handles (HandleVisibility = "on"). +## +## If the optional argument "reset" is specified, delete all child objects +## including those with hidden handles and reset all axis properties to +## their defaults. However, the following properties are not reset: +## Position, Units. +## +## If an axes object handle @var{hax} is specified, operate on it instead of +## the current axes. ## @seealso{clf} ## @end deftypefn @@ -35,58 +41,38 @@ if (nargin > 2) print_usage (); - elseif (nargin > 1) - if (ishandle (varargin{1}) - && strcmp (get (varargin{1}, "type"), "axes") - && ischar (varargin{2}) && strcmpi (varargin{2}, "reset")) - oldhax = gca; - hax = varargin{1}; - do_reset = true; - else - print_usage (); - endif + elseif (nargin == 0) + hax = gca; + do_reset = false; elseif (nargin == 1) - if (ishandle (varargin{1}) + if (isscalar (varargin{1}) && ishandle (varargin{1}) && strcmp (get (varargin{1}, "type"), "axes")) - oldhax = gca; hax = varargin{1}; do_reset = false; elseif (ischar (varargin{1}) && strcmpi (varargin{1}, "reset")) hax = gca; - oldhax = hax; do_reset = true; else print_usage (); endif else - hax = gca; - oldhax = hax; - do_reset = false; - endif - - hc = get (hax, "children"); - - if (! do_reset && ! isempty (hc)) - hc = findobj (hc, "flat", "visible", "on"); - hc = setdiff (hc, hax); + if (isscalar (varargin{1}) && ishandle (varargin{1}) + && strcmp (get (varargin{1}, "type"), "axes") + && ischar (varargin{2}) && strcmpi (varargin{2}, "reset")) + hax = varargin{1}; + do_reset = true; + else + print_usage (); + endif endif - if (! isempty (hc)) - ## Delete the children of the axis. - delete (hc); + if (! do_reset) + delete (get (hax, "children")); + else + __go_axes_init__ (hax, "replace"); + __request_drawnow__ (); endif - ## FIXME: The defaults should be "reset()" below, but so far there is - ## no method to determine the defaults, much less return an object's - ## properties to their default values. Instead make a close - ## approximation. - - axes (hax); - axis ("auto"); - - ## Set the current axis back to where it was upon entry. - axes (oldhax); - endfunction @@ -102,3 +88,22 @@ %! end_unwind_protect %! assert (numel (kids), 0); +%!test +%! hf = figure ("visible", "off"); +%! unwind_protect +%! hax = gca; +%! plot (hax, 1:10); +%! set (hax, "interpreter", "tex"); +%! cla (hax); +%! kids = get (hax, "children"); +%! assert (numel (kids), 0); +%! assert (get (hax, "interpreter"), "tex"); +%! plot (hax, 1:10); +%! cla (hax, "reset"); +%! kids = get (hax, "children"); +%! assert (numel (kids), 0); +%! assert (get (hax, "interpreter"), "none"); +%! unwind_protect_cleanup +%! close (hf); +%! end_unwind_protect +