Mercurial > octave
changeset 19089:8a6f87637c16
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.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Sat, 13 Sep 2014 16:45:31 -0400 |
parents | 99aec089e8c3 |
children | 4e5fae88065f |
files | NEWS doc/interpreter/plot.txi scripts/plot/util/module.mk scripts/plot/util/pan.m scripts/plot/util/rotate3d.m scripts/plot/util/zoom.m |
diffstat | 6 files changed, 128 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- 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.
--- 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
--- 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)
--- 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)
--- 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)
--- /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 +## <http://www.gnu.org/licenses/>. + +## -*- 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