function H=scat(x,varargin)

% SCAT:	2D/3D scatter plot using dots
% Usage: h=scat(x,...)
%
%    x - matrix of 2D or 3D points
%    h - returns handle graphics object
%
% Valid options
%    'perspective'::(0|1)/1 ~'use perspective projection in 3D'
%    'axis'::(0|1)/1 ~'remove axes if 0'
%    'box' ::(0|1)/1 ~'enable/disable axis box'
%    'marker'::string ~'standard matlab marker code'
%    'plotargs'::cell{} ~'extra arguments to plot'
%
% In 3D, sets up axes so that shapes are right.

if isa(x,'data'), x=double(x); end

marker=get(gca,'DefaultLineMarker');
if strcmp(marker,'none'), marker=get(gcf,'DefaultLineMarker'); end
if strcmp(marker,'none'), marker=get(0,'DefaultLineMarker'); end
if strcmp(marker,'none'), marker='+'; end
opts=prefs('perspective',1,'axis',1,'box',1,'marker',marker, ...
	'plotargs',{},varargin{:});
if size(x,2)<=4 && size(x,1)>8, x=x'; end

if isfield(opts,'markersize'), 
	opts.plotargs=[{'MarkerSize',opts.markersize},opts.plotargs]; 
end

if (size(x,1)>=3),
	h=plot3(x(1,:),x(2,:),x(3,:),opts.marker,opts.plotargs{:});
	if opts.perspective, camproj('perspective'); end
	axis equal;
	axis vis3d;
elseif ~isempty(x)
	h=plot(x(1,:),x(2,:),opts.marker,opts.plotargs{:});
else
	h=[];
end

%set(gca,'DrawMode','fast');
%set(gcf,'Renderer','painters');
if (nargout>0), H=h; end

if ~opts.box, box off; else; box on; end
if ~opts.axis, axis off; end
