changeset 28067:11072ea6a16c

view.m: Overhaul function (bug #57800). * view.m: Validate that there are no more than 2 numeric inputs. Place check for correct number of inputs before call to gca() so figure isn't created when function fails. Use numel() instead of length() per Octave coding conventions. Add special detection of azimuth angle of 0 and don't offset by 90 degrees. Add input validation BIST test.
author Rik <rik@octave.org>
date Sun, 16 Feb 2020 15:54:45 -0800
parents 977793472fc9
children ff46a5d19dc0
files scripts/plot/appearance/view.m
diffstat 1 files changed, 18 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/plot/appearance/view.m	Sun Feb 16 14:39:54 2020 -0800
+++ b/scripts/plot/appearance/view.m	Sun Feb 16 15:54:45 2020 -0800
@@ -53,27 +53,30 @@
 function [azimuth, elevation] = view (varargin)
 
   [hax, varargin, nargin] = __plt_get_axis_arg__ ("view", varargin{:});
+
+  if (nargin > 2)
+    print_usage ();
+  endif
+
   if (isempty (hax))
     hax = gca ();
   endif
 
-  if (nargin > 3)
-    print_usage ();
-  endif
-
   if (nargin == 0)
-    x = get (hax, "view");
-    az = x(1);
-    el = x(2);
-  elseif (length (varargin) == 1)
+    vw = get (hax, "view");
+    az = vw(1);
+    el = vw(2);
+  elseif (numel (varargin) == 1)
     x = varargin{1};
-    if (length (x) == 2)
+    if (numel (x) == 2)
       az = x(1);
       el = x(2);
-    elseif (length (x) == 3)
+    elseif (numel (x) == 3)
       [az, el] = cart2sph (x(1), x(2), x(3));
       az *= 180/pi;
-      az += 90;
+      if (az != 0)
+        az += 90;  # Special fix for bug #57800
+      endif
       el *= 180/pi;
     elseif (x == 2)
       az = 0;
@@ -84,7 +87,7 @@
     else
       print_usage ();
     endif
-  elseif (length (varargin) == 2)
+  elseif (numel (varargin) == 2)
     az = varargin{1};
     el = varargin{2};
   endif
@@ -131,3 +134,6 @@
 %! unwind_protect_cleanup
 %!   close (hf);
 %! end_unwind_protect
+
+## Test input validation
+%!error <Invalid call> view (0, 0, 1)