function h = plotp(P,arg1,arg2,arg3)

% PLOTP Plots points
%
% h = plotp(P,'all')
% h = plotp(P,MarkerType,'all')
% h = plotp(P,MarkerType,MarkerSize,'all')
%
% Where:
%          P: 2D or 3D points by columns (2xQ) or (3xQ)
% MarkerType: Type of marker to be used ('.', '+', '*', etc.)
% MarkerSize: Size of the points (markers)
%      'all': Use this argument if the plot is to be done on all 
%             axes (subfigures) of the current figure
%          h: Handle to the current axes
%
% Description: 
% 		Draws the data point cloud P. It uses a "hold" command so
%		that previous contents of the figures are preserved.

% Copyright (c) 2000-2002 by
% Grupo de Visualización y Diagnóstico de Procesos Complejos.
% Area de Ingeniería de Sistemas y Automática. 
% Universidad de Oviedo.

Todos = 0;
if ~iscell(P)
    R = size(P,1);
else
    R = size(P{1},1);
    if length(P) > 8
        error('Too many different classes to draw (must be below 8)');
    end
end


if nargin == 1
    TipoPunto='k.';
    TamPunto = 5;
    AnchoLinea = .1;
elseif nargin == 2
    if strncmp(arg1,'all',1)
        TipoPunto='k.';
        TamPunto = 5;
        AnchoLinea = .1;
        Todos = 1;
    else       
        TipoPunto = arg1;
        TamPunto = 5;
        AnchoLinea = .1;  
    end
elseif nargin == 3
    if strncmp(arg2,'all',1)
        TipoPunto = arg1;
        TamPunto = 5;
        AnchoLinea = .1;  
        Todos = 1;
    else
        TipoPunto = arg1;
        TamPunto = arg2;        
        AnchoLinea = arg2/5;
    end
else
    TipoPunto = arg1;
    TamPunto = arg2;        
    AnchoLinea = arg2/5;
    Todos = 1;    
end


if Todos
    ejes = get(gcf,'Children');
else
    ejes = gca;
end


for k = 1:length(ejes)
    axes(ejes(k));
    if Todos
        axis manual;
        hold on;
    end
    if R==1
        if ~iscell(P)
            plot(P(1,:),zeros(1,size(P,2)),TipoPunto,'MarkerSize',TamPunto,'LineWidth',AnchoLinea);
        else
            if ~iscell(TipoPunto)
                TipoPunto = {'b.','r.','g.','m.','b+','r+','g+','m+'};
            end
            if length(TamPunto)==1
                TamPunto = TamPunto*ones(1,length(P));
                AnchoLinea = TamPunto/5;
            end
            for j = 1:length(P)            
                plot(P{j}(1,:),zeros(1,size(P{j},2)),TipoPunto{j},'MarkerSize',TamPunto(j),'LineWidth',AnchoLinea(j)); hold on;
            end
            hold off;
        end
    elseif R==2
        if ~iscell(P)
            plot(P(1,:),P(2,:),TipoPunto,'MarkerSize',TamPunto,'LineWidth',AnchoLinea);
        else
            if ~iscell(TipoPunto)
                TipoPunto = {'b.','r.','g.','m.','b+','r+','g+','m+'};
            end
            if length(TamPunto)==1
                TamPunto = TamPunto*ones(1,length(P));
                AnchoLinea = TamPunto/5;
            end
            for j = 1:length(P)            
                plot(P{j}(1,:),P{j}(2,:),TipoPunto{j},'MarkerSize',TamPunto(j),'LineWidth',AnchoLinea(j)); hold on;
            end
            hold off;
        end
    elseif R==3
        if ~iscell(P)
            plot3(P(1,:),P(2,:),P(3,:),TipoPunto,'MarkerSize',TamPunto,'LineWidth',AnchoLinea);
        else 
            if ~iscell(TipoPunto)
                TipoPunto = {'b.','r.','g.','m.','b+','r+','g+','m+'};
            end 
            if length(TamPunto)==1
                TamPunto = TamPunto*ones(1,length(P));
                AnchoLinea = TamPunto/5;
            end
            for j = 1:length(P)
                plot3(P{j}(1,:),P{j}(2,:),P{j}(3,:),TipoPunto{j},'MarkerSize',TamPunto(j),'LineWidth',AnchoLinea(j)); hold on;
            end
            hold off;
        end
        camproj('perspective');
        % cameramenu;
    end
end;

if Todos
    hold off;
end
h = gca;