www.gusucode.com > mbcguitools 工具箱 matlab 源码程序 > mbcguitools/@mvgraph3d/set.m
function gr=set(gr,varargin) %SET Set interface for graph3d objects % Provides a set interface to the graph3d object. % % Valid properties are: % 'Position' - 4 element position vector in pixels % 'Visible' - 'on' or 'off' % 'Data' - matrix of data with a column for each factor % 'Factors' - cell array of strings corresponding to each factor % 'Parent' - change parent figure (useful for saving a copy of graph) % 'Type' - set to 'scatter', 'mesh', 'surface' % 'Colormap' - define colormap for object % 'Grid' - turn the grid on/off on the axes % 'XGrid' \ % 'YGrid' - turn the grid on/off for each direction % 'ZGrid' / % 'Factorselection' - 'exclusive'/'normal' % 'Limits' - explicitly set limits for each variable % 'Backgroundcolor' - color for background patch % 'Frame' - On/off: turn the bounding frame on or off. % 'Callback' - Callback function called when factor is changed % % Plus a load of other properties that are visible by getting the handles % Copyright 2000-2015 The MathWorks, Inc. and Ford Global Technologies, Inc. % Bail if we've not been given a graph2d object if ~isa(gr,'mvgraph3d') error(message('mbc:mvgraph3d:InvalidObject')) end redraws=[0 0 0 0]; % flags to signal a factorsort, graphlim, plot and cbarfaces % loop over varargin for n=1:2:(nargin-2) drawreqs = [0 0 0 0]; switch lower(varargin{n}) case 'position' newpos = varargin{n+1}; set(gr.panel, 'Position', newpos); ud = gr.DataPointer.info; oldpos = ud.position; ud.position = newpos; gr.DataPointer.info = ud; % Update position of items within the panel if required if any(oldpos(3:4)~=newpos(3:4)) [gr,drawreqs]=i_position(gr,newpos); end case 'visible' set(gr.panel, 'Visible', varargin{n+1}); mv_rotate3d(gr.axes,upper(varargin{n+1})); case {'data','value','number'} [gr,drawreqs] = i_data(gr,varargin{n+1}); case 'factors' [gr,drawreqs] = i_factors(gr,varargin{n+1}); case 'currentxfactor' [gr,drawreqs]=i_select(gr,varargin{n+1},'x'); case 'currentyfactor' [gr,drawreqs]=i_select(gr,varargin{n+1},'y'); case 'currentzfactor' [gr,drawreqs]=i_select(gr,varargin{n+1},'z'); case 'parent' set(gr.panel,'Parent',varargin{n+1}); case 'type' [gr,drawreqs] = i_type(gr,varargin{n+1}); case 'colormap' [gr,drawreqs] = i_cmap(gr,varargin{n+1}); case 'grid' [gr,drawreqs] = i_grid(gr,'xyz',varargin{n+1}); case 'xgrid' [gr,drawreqs] = i_grid(gr,'x',varargin{n+1}); case 'ygrid' [gr,drawreqs] = i_grid(gr,'y',varargin{n+1}); case 'zgrid' [gr,drawreqs] = i_grid(gr,'z',varargin{n+1}); case 'factorselection' [gr,drawreqs] = i_seltype(gr,varargin{n+1}); case 'limits' [gr,drawreqs] = i_limits(gr,varargin{n+1}); case 'backgroundcolor' [gr,drawreqs] = i_backclr(gr,varargin{n+1}); case 'frame' [gr,drawreqs] = i_frame(gr,varargin{n+1}); case 'datatags' [gr,drawreqs] = i_datatagtype(gr,varargin{n+1}); case 'customdatatags' [gr,drawreqs] = i_customtags(gr,varargin{n+1}); case 'callback' ud = gr.DataPointer.info; ud.callback = varargin{n+1}; gr.DataPointer.info = ud; end redraws= (redraws | drawreqs); end if redraws(1) pr_factorsort(gr); end if redraws(2) pr_graphlim(gr); end if redraws(3) pr_plot(gr); end if redraws(4) pr_cbarfaces(gr.colorbar.bar,get(gr.colorbar.bar,'FaceVertexCData')); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% i_position - alter position of object in figure window %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [gr,drawreqs]=i_position(gr,newpos) drawreqs=[0 0 0 0]; % Adjust rectangle to account for the border width newpos(3:4) = newpos(3:4)-2; ud = gr.DataPointer.info; % if position is too small, display an image indicating this mnsz=minsize(gr); if newpos(3)<mnsz(1) || newpos(4)<mnsz(2) % go to blackout mode set([gr.axes;gr.xfactor;gr.yfactor; ... gr.xtext;gr.ytext;gr.zfactor;gr.ztext; ... gr.colorbar.axes;gr.colorbar.bar;gr.surf],'Visible','off'); set(ud.datataghandles, 'Visible', 'off'); % need to calc position of icon impos=[max(floor(newpos(3:4).*0.5)-15, [1 1]), min([32 32],newpos(3:4))]; impos = mbcgui.util.clipRect(impos); set(gr.badim,'Position',impos,'Visible','on'); else cellpos=cell(8,1); % work out positions % axes pos(1)=70; pos(3)=newpos(3)-180; pos(2)=110; pos(4)=newpos(4)-125; cellpos{1}= mbcgui.util.clipRect(pos); % decide ui size uihs=70; if newpos(3)<216 uihs=floor((newpos(3)-6)./3); end halfuihs=0.5.*uihs; % ui's % xtext pos(1)=newpos(3)/6-halfuihs; pos(2)=32; pos(3)=uihs; pos(4)=16; cellpos{2}=pos; % xfactor pos(1)=newpos(3)/6-halfuihs; pos(2)=10; pos(3)=uihs; pos(4)=20; cellpos{3}=pos; % ytext pos(1)=newpos(3)/2-halfuihs; pos(2)=32; pos(3)=uihs; pos(4)=16; cellpos{4}=pos; % yfactor pos(1)=newpos(3)/2-halfuihs; pos(2)=10; pos(3)=uihs; pos(4)=20; cellpos{5}=pos; % ztext pos(1)=5*newpos(3)/6-halfuihs; pos(2)=32; pos(3)=uihs; pos(4)=16; cellpos{6}=pos; % zfactor pos(1)=5*newpos(3)/6-halfuihs; pos(2)=10; pos(3)=uihs; pos(4)=20; cellpos{7}=pos; % colorbar % axes pos(1)=newpos(3)-60; pos(2)=90; pos(3)=20; pos(4)=newpos(4)-115; cellpos{8}= mbcgui.util.clipRect(pos); set([gr.axes; gr.xtext; gr.xfactor; gr.ytext; ... gr.yfactor; gr.ztext; gr.zfactor; gr.colorbar.axes],{'Position'},cellpos); drawreqs(2)=1; set(gr.badim, 'Visible', 'off'); hndls=[gr.axes;gr.xtext;gr.xfactor;gr.ytext; ... gr.yfactor;gr.ztext;gr.zfactor;gr.colorbar.axes;gr.colorbar.bar;gr.surf]; set(hndls,'Visible','on'); set(ud.datataghandles, 'Visible', 'on'); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% i_data - insert data into object %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [gr,drawreqs] = i_data(gr,data) if size(data,1)==1 % replicate to ensure point is drawn data = [data;data;data]; elseif size(data,1)==2 data(end+1,:) = data(1,:); end ud = gr.DataPointer.info; ud.data = data; gr.DataPointer.info = ud; drawreqs=[1 1 1 0]; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% i_factors - insert factors into object %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [gr,drawreqs] = i_factors(gr,factors) if ischar(factors) factors={factors}; end ud = gr.DataPointer.info; ud.factors = factors; gr.DataPointer.info = ud; drawreqs=[1 0 1 0]; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% i_type - change type of 3d graph %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [gr,drawreqs]=i_type(gr,tp) drawreqs = [0 0 0 0]; ud = gr.DataPointer.info; if ~strcmp(tp,ud.type) ud.type = tp; gr.DataPointer.info = ud; drawreqs(3)=1; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% i_cmap - insert new colormap for image view %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [gr,drawreqs] = i_cmap(gr,cmap) % update colorbar set(gr.colorbar.axes,'YLim',[0.5 size(cmap,1)+0.5]); pr_cbarfaces(gr.colorbar.bar,cmap); drawreqs=[0 1 1 0]; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% i_grid - turn grid on/off %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [gr,drawreqs]=i_grid(gr,dir,grd) drawreqs=[0 0 0 0]; % parse out dir string to get axes to turn grid on in. if ~isempty(strfind(dir,'x')) set(gr.axes,'XGrid',grd); end if ~isempty(strfind(dir,'y')) set(gr.axes,'YGrid',grd); end if ~isempty(strfind(dir,'z')) set(gr.axes,'ZGrid',grd); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% i_seltype - change behaviour of lists %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [gr,drawreqs]=i_seltype(gr,selset) drawreqs=[0 0 0 0]; ud = gr.DataPointer.info; switch lower(selset) case 'exclusive' % check settings lbls=get(gr.xfactor,'String'); if ~iscell(lbls) lmax=1; else lmax=length(lbls); end vals=get([gr.xfactor;gr.yfactor;gr.zfactor],{'Value'}); vals=cat(1,vals{:}); ch=0; used=vals(1); for n=2:3 if any(vals(n)==used) % find lowest unused srch=1:(length(used)+1); new=setxor(used,srch); new=min(new(1),lmax); vals(n)=new; ch=1; end used=[used vals(n)]; end if ch set([gr.xfactor;gr.yfactor;gr.zfactor],{'Value'},num2cell(vals)); drawreqs([2 3])=0; end ud.factorselection = 1; case 'normal' % just change flag ud.factorselection = 0; end gr.DataPointer.info = ud; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% i_limits - set explicit limits on the factors %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [gr,drawreqs]=i_limits(gr,lim) if iscell(lim) ud = gr.DataPointer.info; ud.limits = lim; gr.DataPointer.info = ud; end drawreqs=[0 1 1 0]; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% i_backclr - change background colour %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [gr,drawreqs]=i_backclr(gr,col) drawreqs=[0 0 0 0]; ud = gr.DataPointer.info; set(gr.panel,'BackgroundColor',col); if ~ud.frame set(gr.panel,'HighlightColor',col); end set([gr.xtext;gr.ytext;gr.ztext],'BackgroundColor',col); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% i_frame - turn bounding frame on/off %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [gr,drawreqs]=i_frame(gr,state) drawreqs=[0 0 0 0]; ud = gr.DataPointer.info; if strcmp(state,'on') ud.frame = 1; set(gr.panel,'HighlightColor','k'); else ud.frame = 0; set(gr.panel,'HighlightColor',get(gr.panel, 'BackgroundColor')); end gr.DataPointer.info = ud; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% i_datatagtype - set data tag type %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [gr,drawreqs] = i_datatagtype(gr,tagtype) ud = gr.DataPointer.info; switch lower(tagtype) case 'none' tp = 0; case 'enumerate' tp = 1; case 'custom' tp = 2; case 'coincident' tp = 3; otherwise tp = 0; end if tp~=ud.datatags ud.datatags = tp; if tp==0 delete(ud.datataghandles); ud.datataghandles = []; drawreqs = [0 0 0 0]; else drawreqs = [0 0 1 0]; end gr.DataPointer.info = ud; else drawreqs = [0 0 0 0]; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% i_customtags - set custom tag strings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [gr,drawreqs] = i_customtags(gr,sTags) if iscell(sTags) ud = gr.DataPointer.info; ud.customdatatags = sTags; gr.DataPointer.info = ud; if ud.datatags==2 drawreqs = [0 0 1 0]; else drawreqs = [0 0 0 0]; end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% i_select - change factor selection %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [gr,drawreqs]=i_select(gr,sel,ax) switch ax case 'x' obj=gr.xfactor; case 'y' obj=gr.yfactor; case 'z' obj=gr.zfactor; end set(obj,'Value',sel); % redraw limits and plots drawreqs=[0 1 1 0];