% VIEW VIEW Set Graphical View
% 
% Usage
% 
% The view function sets the view into the current plot.
% The simplest form is
% 
%   view(n)
% 
% where n=2 sets a standard view (azimuth 0 and elevation 90),
% and n=3 sets a standard 3D view (azimuth 37.5 and elevation 30).
% With two arguments,
% 
%   view(az,el)
% 
% you set the viewpoint to azimuth az and elevation el.

% Copyright (c) 2002-2006 Samit Basu

function view(varargin)
  if (nargin == 0)
    error('Expected an argument to view function');
  end;
  if (nargin == 1)
    arg = varargin{1};
    if (length(arg) == 1)
      if (arg == 2)
	view(0,90);
	return;
      elseif (arg == 3)
	view(37.5,30);
	return;
      else
	error('Unrecognized form of view');
      end
    end
  else
    az = varargin{1};
    el = varargin{2};
  end
  az = az*pi/180;
  el = el*pi/180;
  % The view point is first calculated by transforming to
  % spherical coordinates
  % Calculate the radius of the cube
  xlim = get(gca,'xlim'); xmean = mean(xlim);
  ylim = get(gca,'ylim'); ymean = mean(ylim);
  zlim = get(gca,'zlim'); zmean = mean(zlim);
  xmax = max(abs(xlim-xmean));
  ymax = max(abs(ylim-ymean));
  zmax = max(abs(zlim-zmean));
  r = sqrt(xmax^2+ymax^2+zmax^2);
  z = sin(el)*r + zmean;
  y = -cos(el)*cos(az)*r + ymean;
  x = cos(el)*sin(az)*r + xmean;
  set(gca,'cameraposition',[x,y,z]);
  if (abs(el-pi/2) < .001)
    set(gca,'cameraupvector',[0,1,0]);
  else
    set(gca,'cameraupvector',[0,0,1]);
  end
