changeset 19123: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