changeset 16988:df66488b8d43

surface.m: Validate inputs are not complex. * scripts/plot/surface.m: Validate inputs are not complex.
author Rik <rik@octave.org>
date Sun, 14 Jul 2013 16:00:26 -0700
parents c9346014fed2
children aabe12e5fdc1
files scripts/plot/surface.m
diffstat 1 files changed, 42 insertions(+), 23 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/plot/surface.m
+++ b/scripts/plot/surface.m
@@ -41,16 +41,16 @@
 
 ## Author: jwe
 
-function retval = surface (varargin)
+function h = surface (varargin)
 
-  [h, varargin] = __plt_get_axis_arg__ ("surface", varargin{:});
+  [hax, varargin] = __plt_get_axis_arg__ ("surface", varargin{:});
 
-  oldh = gca ();
+  oldax = gca ();
   unwind_protect
-    axes (h);
-    [tmp, bad_usage] = __surface__ (h, varargin{:});
+    axes (hax);
+    [htmp, bad_usage] = __surface__ (hax, varargin{:});
   unwind_protect_cleanup
-    axes (oldh);
+    axes (oldax);
   end_unwind_protect
 
   if (bad_usage)
@@ -58,31 +58,36 @@
   endif
 
   if (nargout > 0)
-    retval = tmp;
+    h = htmp;
   endif
 
 endfunction
 
 function [h, bad_usage] = __surface__ (ax, varargin)
 
+  h = 0;
   bad_usage = false;
-  h = 0;
   firststring = nargin;
-  for i = 2 : nargin
-    if (ischar (varargin{i - 1}))
-      firststring = i - 1;
+  for i = 1 : (nargin - 1)
+    if (ischar (varargin{i}))
+      firststring = i;
       break;
     endif
   endfor
 
   if (firststring > 5)
     bad_usage = true;
+    return;
   elseif (firststring == 5)
     x = varargin{1};
     y = varargin{2};
     z = varargin{3};
     c = varargin{4};
 
+    if (iscomplex (x) || iscomplex (y) || iscomplex (z) || iscomplex (c))
+      error ("mesh: X, Y, Z, C arguments must be real");
+    endif
+
     [z_nr, z_nc] = size (z);
     [c_nr, c_nc, c_np] = size (c);
     if (! (z_nr == c_nr && z_nc == c_nc && (c_np == 1 || c_np == 3)))
@@ -108,6 +113,11 @@
     y = varargin{2};
     z = varargin{3};
     c = z;
+
+    if (iscomplex (x) || iscomplex (y) || iscomplex (z))
+      error ("mesh: X, Y, Z arguments must be real");
+    endif
+
     if (isvector (x) && isvector (y) && ismatrix (z))
       if (rows (z) == length (y) && columns (z) == length (x))
         x = x(:)';
@@ -125,6 +135,11 @@
   elseif (firststring == 3)
     z = varargin{1};
     c = varargin{2};
+
+    if (iscomplex (z) || iscomplex (c))
+      error ("mesh: X, C arguments must be real");
+    endif
+
     if (ismatrix (z) && !isvector (z) && !isscalar (z))
       [nr, nc] = size (z);
       x = 1:nc;
@@ -135,6 +150,11 @@
   elseif (firststring == 2)
     z = varargin{1};
     c = z;
+
+    if (iscomplex (z))
+      error ("mesh: Z argument must be real");
+    endif
+
     if (ismatrix (z) && !isvector (z) && !isscalar (z))
       [nr, nc] = size (z);
       x = 1:nc;
@@ -144,24 +164,23 @@
     endif
   elseif (firststring == 1)
     x = 1:3;
-    y = (x).';
+    y = x';
     c = z = eye (3);
   else
     bad_usage = true;
+    return;
   endif
 
-  if (! bad_usage)
-    ## Make a default surface object.
-    other_args = {};
-    if (firststring < nargin)
-      other_args = varargin(firststring:end);
-    endif
-    h = __go_surface__ (ax, "xdata", x, "ydata", y, "zdata", z, "cdata", c,
-                        other_args{:});
+  if (firststring < nargin)
+    other_args = varargin(firststring:end);
+  else
+    other_args = {};  # make a default surface object.
+  endif
+  h = __go_surface__ (ax, "xdata", x, "ydata", y, "zdata", z, "cdata", c,
+                      other_args{:});
 
-    if (! ishold ())
-      set (ax, "view", [0, 90], "box", "off");
-    endif
+  if (! ishold ())
+    set (ax, "view", [0, 90], "box", "off");
   endif
 
 endfunction