www.gusucode.com > mbcview 工具箱matlab源码程序 > mbcview/@cgdatasetnode/private/pr_graphlim.m

    function lim = pr_Graphlim(lim,ax,X,Y,Z)
% pr_Graphlim(lim,ax,X,Y,D)
% lim empty - create new limits
% lim structure - update limits
% ax non-empty - update axes limits

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



if nargin<5
    Z = [];
end

% do sanity check on min,max
if ~isempty(X) & ~isempty(lim) & ~isempty(lim.Xlim)
    xmn = min([X(:) ; lim.Xlim(1)]);
    xmx = max([X(:) ; lim.Xlim(2)]);
elseif ~isempty(X)
    xmn = min(X(:));
    xmx = max(X(:));
elseif ~isempty(lim) & ~isempty(lim.Xlim)
    xmn = lim.Xlim(1);
    xmx = lim.Xlim(2);
else
    xmn = []; xmx = [];
end
if ~isempty(Y) & ~isempty(lim) & ~isempty(lim.Ylim)
    ymn = min([Y(:) ; lim.Ylim(1)]);
    ymx = max([Y(:) ; lim.Ylim(2)]);
elseif ~isempty(Y)
    ymn = min(Y(:));
    ymx = max(Y(:));
elseif ~isempty(lim) & ~isempty(lim.Ylim)
    ymn = lim.Ylim(1);
    ymx = lim.Ylim(2);
else
    ymn = []; ymx = [];
end
if ~isempty(Z) & ~isempty(lim) & ~isempty(lim.Zlim)
    zmn = min([Z(:) ; lim.Zlim(1)]);
    zmx = max([Z(:) ; lim.Zlim(2)]);
elseif ~isempty(Z)
    zmn = min(Z(:));
    zmx = max(Z(:));
elseif ~isempty(lim) & ~isempty(lim.Zlim)
    zmn = lim.Zlim(1);
    zmx = lim.Zlim(2);
else
    zmn = []; zmx = [];
end

if ~isempty(xmn) & xmn>=xmx
   if xmn==0
      xmn=-0.01;
      xmx=0.01;
   else
      xmn=(1-sign(xmn).*0.01)*xmx;
      xmx=(1+sign(xmx).*0.01)*xmx;
   end
end
if ~isempty(ymn) & ymn>=ymx
   if ymn==0
      ymn=-0.01;
      ymx=0.01;
   else
      ymn=(1-sign(ymn).*0.01)*ymx;
      ymx=(1+sign(ymx).*0.01)*ymx;
   end
end
if ~isempty(zmn) & zmn>=zmx
   if zmn==0
      zmn=-0.01;
      zmx=0.01;
   else
      zmn=(1-sign(zmn).*0.01)*zmx;
      zmx=(1+sign(zmx).*0.01)*zmx;
   end
end

% check for NaN's
if ~any(isnan([xmn,xmx]))
   if ~isempty(xmn)
      % push min and max apart a smidgeon to fix an R12 axes bug
      delt=(xmx-xmn).*1e-10;
      xmn=xmn-delt;
      xmx=xmx+delt;
      if ~isempty(ax), set(ax,'XLim',real([xmn xmx])); end
   else
      if ~isempty(ax), set(ax,'XLimMode','auto'); end
   end
end
if ~any(isnan([ymn,ymx]))
   if ~isempty(ymn)
      % push min and max apart a smidgeon to fix an R12 axes bug
      delt=(ymx-ymn).*1e-10;
      ymn=ymn-delt;
      ymx=ymx+delt;
      if ~isempty(ax), set(ax,'YLim',real([ymn ymx])); end
   else
      if ~isempty(ax), set(ax,'YLimMode','auto'); end
   end
end
if ~any(isnan([zmn,zmx]))
   if ~isempty(zmn)
      % push min and max apart a smidgeon to fix an R12 axes bug
      delt=(zmx-zmn).*1e-10;
      zmn=zmn-delt;
      zmx=zmx+delt;
      if ~isempty(ax), set(ax,'ZLim',real([zmn zmx])); end
   else
      if ~isempty(ax), set(ax,'ZLimMode','auto'); end
   end
end

lim.Xlim = [xmn xmx];
lim.Ylim = [ymn ymx];
lim.Zlim = [zmn zmx];