# HG changeset patch # User John W. Eaton # Date 1410641131 14400 # Node ID 8a6f87637c1651e28184c57ee5a03a193558d9af # Parent 99aec089e8c356ecf0d50a78a396b7c485fd8280 hg new function, zoom * zoom.m: New function. * plot/util/module.mk: Add it to the list. * pan.m, rotate3d.m: Update @seealso lists. * plot.txi: Document it. * NEWS: Mention it. diff -r 99aec089e8c3 -r 8a6f87637c16 NEWS --- a/NEWS Fri Sep 12 11:19:31 2014 -0400 +++ b/NEWS Sat Sep 13 16:45:31 2014 -0400 @@ -82,6 +82,7 @@ numfields rotate sylvester + zoom ** Deprecated functions. diff -r 99aec089e8c3 -r 8a6f87637c16 doc/interpreter/plot.txi --- a/doc/interpreter/plot.txi Fri Sep 12 11:19:31 2014 -0400 +++ b/doc/interpreter/plot.txi Sat Sep 13 16:45:31 2014 -0400 @@ -539,6 +539,8 @@ @DOCSTRING(rotate3d) +@DOCSTRING(zoom) + @node Manipulation of Plot Windows @subsection Manipulation of Plot Windows @cindex plotting, window manipulation diff -r 99aec089e8c3 -r 8a6f87637c16 scripts/plot/util/module.mk --- a/scripts/plot/util/module.mk Fri Sep 12 11:19:31 2014 -0400 +++ b/scripts/plot/util/module.mk Sat Sep 13 16:45:31 2014 -0400 @@ -76,6 +76,7 @@ plot/util/shg.m \ plot/util/struct2hdl.m \ plot/util/subplot.m \ + plot/util/zoom.m \ $(plot_util_PRIVATE_FCN_FILES) FCN_FILES += $(plot_util_FCN_FILES) diff -r 99aec089e8c3 -r 8a6f87637c16 scripts/plot/util/pan.m --- a/scripts/plot/util/pan.m Fri Sep 12 11:19:31 2014 -0400 +++ b/scripts/plot/util/pan.m Sat Sep 13 16:45:31 2014 -0400 @@ -42,7 +42,7 @@ ## @example ## mode = get (gca, "pan"); ## @end example -## @seealso{rotate3d} +## @seealso{rotate3d, zoom} ## @end deftypefn function pan (varargin) diff -r 99aec089e8c3 -r 8a6f87637c16 scripts/plot/util/rotate3d.m --- a/scripts/plot/util/rotate3d.m Fri Sep 12 11:19:31 2014 -0400 +++ b/scripts/plot/util/rotate3d.m Sat Sep 13 16:45:31 2014 -0400 @@ -33,7 +33,7 @@ ## @example ## mode = get (gca, "rotate3d"); ## @end example -## @seealso{pan} +## @seealso{pan, zoom} ## @end deftypefn function rotate3d (varargin) diff -r 99aec089e8c3 -r 8a6f87637c16 scripts/plot/util/zoom.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/plot/util/zoom.m Sat Sep 13 16:45:31 2014 -0400 @@ -0,0 +1,122 @@ +## Copyright (C) 2014 John W. Eaton +## +## This file is part of Octave. +## +## Octave is free software; you can redistribute it and/or modify it +## under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 3 of the License, or (at +## your option) any later version. +## +## Octave 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 Octave; see the file COPYING. If not, see +## . + +## -*- texinfo -*- +## @deftypefn {Command} {} zoom (@var{factor}) +## @deftypefnx {Command} {} zoom out +## @deftypefnx {Command} {} zoom reset +## Zoom the current axes object. +## +## Given a numeric argument greater than zero, zoom by the given factor. +## If the zoom factor is greater than one, zoom in on the plot. If the +## factor is less than one, zoom out. +## +## Given the option @qcode{"out"}, zoom to the initial zoom setting. +## +## Given the option @qcode{"reset"}, set the initial zoom setting to the +## current axes limits. +## +## @seealso{pan, rotate3d} +## @end deftypefn + +## Eventually we need to also support these features: +## @deftypefn {Command} {} zoom +## @deftypefnx {Command} {} zoom on +## @deftypefnx {Command} {} zoom off +## @deftypefnx {Command} {} zoom xon +## @deftypefnx {Command} {} zoom yon +## @deftypefnx {Command} {} zoom (@var{hfig}, @var{option}) +## @deftypefnx {Command} {zoom_object_handle =} zoom (@var{hfig}) + +function zoom (varargin) + + hfig = NaN; + + nargs = nargin; + + if (nargs > 2) + print_usage (); + endif + + if (nargin == 1 && isfigure (varargin{1})) + error ("zoom_object_handle = zoom (hfig): not implemented"); + endif + + if (nargs == 2) + hfig = varargin{1}; + if (isfigure (hfig)) + varargin(1) = []; + nargs--; + else + error ("zoom: expecting figure handle as first argument"); + endif + endif + + if (isnan (hfig)) + hfig = gcf (); + endif + + if (nargs == 0) + error ("zoom: toggling zoom mode is not implemented"); + elseif (nargs == 1) + arg = varargin{1}; + if (isnumeric (arg)) + factor = arg; + if (factor < 0) + error ("zoom: factor must be greater than 1"); + elseif (factor == 1) + return; + endif + cax = get (hfig, "currentaxes"); + if (! isempty (cax)) + limits = axis (); + initial_zoom = getappdata (cax, "initial_zoom"); + if (isempty (initial_zoom)) + setappdata (cax, "__initial_zoom__", limits); + endif + axis (cax, limits / factor); + endif + elseif (ischar (arg)) + switch (arg) + case {"on", "off", "xon", "yon"} + error ("zoom %s: not implemented", arg); + + case "out" + cax = get (hfig, "currentaxes"); + if (! isempty (cax)) + initial_zoom = getappdata (cax, "__initial_zoom__"); + if (! isempty (initial_zoom)) + axis (cax, initial_zoom); + endif + endif + + case "reset" + cax = get (hfig, "currentaxes"); + if (! isempty (cax)) + setappdata (cax, "__initial_zoom__", axis ()); + endif + + otherwise + error ("zoom: unrecognized option '%s'", arg); + endswitch + else + error ("zoom: wrong type argument '%s'", class (arg)); + endif + endif + +endfunction