www.gusucode.com > mbcguitools 工具箱 matlab 源码程序 > mbcguitools/@mvgraph3d/private/pr_plot.m

    function pr_plot(gr)
%PR_PLOT Private function
%  This is a private graph3d function used to plot data

%  Copyright 2000-2010 The MathWorks, Inc. and Ford Global Technologies, Inc.


ud = gr.DataPointer.info;
data= ud.data;
labels=get(gr.xfactor,'String');

if ~iscell(labels)
    labels={labels};
end

x=get(gr.xfactor,'Value');
y=get(gr.yfactor,'Value');
z=get(gr.zfactor,'Value');

if ~isempty(data)
    nonnandata = ~any(isnan(data(:, [x y z])), 2);
    xdata = data(nonnandata,x);
    ydata = data(nonnandata,y);
    zdata = data(nonnandata,z);
else
    xdata = [];
    ydata = [];
    zdata = [];
end

if isempty(xdata)
    set(gr.surf,'Faces',1,'Vertices',[0 0 0],'FaceVertexCData',0,...
        'FaceColor','none','Marker','none');
    if ud.datatags
        % Remove all tags
        ud.datataghandles = mbctagdata([], {}, gr.axes, ud.datataghandles, 'off', 'simple');
    end
else
    
    tp = ud.type;
    switch lower(tp)
        case 'scatter'        
            Npts = length(xdata);
            tri = zeros(3, ceil(Npts/3));   
            tri(1:Npts) = 1:Npts;
            if numel(tri)>Npts
                tri(Npts+1:numel(tri)) = Npts;
            end
            tri = tri.';
            
            % set colours for colorbar
            clim=get(gr.axes,'CLim');
            cmap=get(gr.colorbar.bar,'FaceVertexCData');
            n=size(cmap,1);
            mn=clim(1);mx=clim(2);
            
            % work out cdata - needs to be one for each vertex (zdata)
            edges = mn:((mx-mn)/n):mx;
            [nul,bin]=histc(zdata,[-inf edges(2:end-1) inf]);
            % reshape cmap ready.
            cdata=cmap(bin(:),:);
            
            set(gr.surf,'Faces',tri,'Vertices',[xdata(:) ydata(:) zdata(:)],'FaceVertexCData',cdata,...
                'FaceColor','none','EdgeColor','none',...
                'FaceLighting', 'none', 'EdgeLighting', 'none',...
                'Marker','o','MarkerEdgeColor','flat','MarkerFaceColor','flat');
            if ud.datatags
                % Update tags
                tol = [0 0 0];
                axlim = get(gr.axes, 'XLim');
                tol(1) = (axlim(2)-axlim(1))./250;
                axlim = get(gr.axes, 'YLim');
                tol(2) = (axlim(2)-axlim(1))./250;
                axlim = get(gr.axes, 'ZLim');
                tol(3) = (axlim(2)-axlim(1))./250;
                if ud.datatags==1 || ud.datatags==2
                    sTags = pr_getDataTags(gr);
                    if length(sTags)==length(xdata)
                        ud.datataghandles = mbctagdata([xdata(:) ydata(:) zdata(:)], sTags, ...
                            gr.axes, ud.datataghandles, 'off', 'pointoverlap', tol);
                    else
                        ud.datataghandles = mbctagdata([], {}, gr.axes, ud.datataghandles, 'off', 'simple');
                    end
                else
                    ud.datataghandles = mbccountedtagdata([xdata(:) ydata(:) zdata(:)], ...
                        gr.axes, ud.datataghandles, 'off', tol);
                end
            end
        otherwise
            if length(xdata)>3
                try
                    tri=convhulln([xdata(:) ydata(:) zdata(:)]);
                catch
                    try
                        tri=convhulln([xdata(:) ydata(:) zdata(:)], {'QJ','Qt','Qbb','Qc','QbB','Pp'});
                    catch
                        tri=[];
                    end
                end
            else
                tri=[];
            end
            % set colours for colorbar
            clim=get(gr.axes,'CLim');
            cmap=get(gr.colorbar.bar,'FaceVertexCData');
            n=size(cmap,1);
            mn=clim(1);mx=clim(2);
            
            % work out cdata - needs to be one for each vertex (zdata)
            edges = mn:((mx-mn)/n):mx;
            [nul,bin]=histc(zdata,[-inf edges(2:end-1) inf]);
            % reshape cmap ready.
            cdata=cmap(bin(:),:);
            
            switch lower(tp)
                case 'mesh'
                    set(gr.surf,'Faces',tri,'Vertices',[xdata(:) ydata(:) zdata(:)],'FaceVertexCData',cdata,...
                        'FaceColor','none','EdgeColor','interp',...
                        'FaceLighting', 'none', 'EdgeLighting', 'flat',...
                        'Marker','none');
                case 'surface'
                    set(gr.surf,'Faces',tri,'Vertices',[xdata(:) ydata(:) zdata(:)],'FaceVertexCData',cdata,...
                        'FaceColor','interp', ...
                        'EdgeColor',get(mbcgui.hgclassesutil.toNative(gr.axes),'DefaultSurfaceEdgeColor'),...
                        'Marker','none');
            end
            if ud.datatags
                % Data tags not supported in mesh/surface mode at the moment
                ud.datataghandles = mbctagdata([], {}, gr.axes, ud.datataghandles, 'off', 'simple');
            end
    end
    set(gr.axes,'CameraPositionMode','auto','CameraTargetMode','auto');
end

% set axis labels
lbls=get(gr.axes,{'XLabel';'ylabel';'zlabel'});
set([lbls{:}],{'String'},labels([x; y; z]),'Interpreter','none');
lbls=get(gr.colorbar.axes,'Title');
set(lbls,'String',labels{z},'Interpreter','none');

gr.DataPointer.info = ud;