www.gusucode.com > mbcguitools 工具箱 matlab 源码程序 > mbcguitools/@mvgraph2d/factor_change.m
function factor_change(gr,obj) %FACTOR_CHANGE Callback function % Callback function for the graph2d object % Copyright 2000-2011 The MathWorks, Inc. and Ford Global Technologies, Inc. % check exclusive setting ud = gr.DataPointer.info; if ud.factorselection==1 % need to make sure the other selections aren't the same if nargin<2 obj=gcbo; end dir=str2num(get(obj,'Tag')); vals=get([gr.xfactor;gr.yfactor],{'Value'}); vals=cat(1,vals{:}); val=vals(dir); reps=find(vals==val); if length(reps)>1 flds={'xfactor','yfactor'}; chng=setxor(reps,dir); hndl=gr.(flds{chng}); % find a new value to set it to used=vals; avail=1:4; new=setxor(used,avail); new=new(1); str=get(gr.xfactor,'String'); if new<=length(str) set(hndl,'Value',new) end end end pr_graphlim(gr); % put data into line object pr_plot(gr); %---------------------- % fire user callback %---------------------- if ~isempty(ud.callback) if ischar(ud.callback) % Legacy support for tokens in the string: %XVALUE%, %OBJECT%, %YVALUE% pcs=strfind(ud.callback,'%'); go=1; needobj=0; needxval=0; needyval=0; while (go<=(length(pcs)-1)) cmp=ud.callback(pcs(go)+1:pcs(go+1)-1); if strcmp(cmp,'XVALUE') needxval=1; ud.callback=[ud.callback(1:pcs(go)-1) 'XX_XVALUE_XX' ud.callback(pcs(go+1)+1:end)]; go=go+2; pcs=pcs+4; elseif strcmp(cmp,'YVALUE') needyval=1; ud.callback=[ud.callback(1:pcs(go)-1) 'XX_YVALUE_XX' ud.callback(pcs(go+1)+1:end)]; go=go+2; pcs=pcs+4; elseif strcmp(cmp,'OBJECT') needobj=1; ud.callback=[ud.callback(1:pcs(go)-1) 'XX_OBJECT_XX' ud.callback(pcs(go+1)+1:end)]; go=go+2; pcs=pcs+4; else go=go+1; end end if needobj assignin('base','XX_OBJECT_XX',gr); end if needxval assignin('base','XX_XVALUE_XX',get(gr.xfactor,'Value')); end if needyval assignin('base','XX_YVALUE_XX',get(gr.yfactor,'Value')); end evalin('base',ud.callback); % clear up base workspace evalin('base','clear(''XX_OBJECT_XX'',''XX_XVALUE_XX'',''XX_YVALUE_XX'');'); else xregcallback(ud.callback, gr, struct('xvalue', get(gr.xfactor,'Value'), 'yvalue',get(gr.yfactor,'Value'))); end end return