www.gusucode.com > mbcview 工具箱matlab源码程序 > mbcview/@cgnode/nodelist.m
function [nds,cheaders,vals,colsize,p_sub]= nodelist(T,tpfilter) %NODELIST return a list of nodes with info to add to listview % % [NDS,CHEADERS,VALS,NUMCOL,COLSIZE]=NODELIST(T,TPFILTER) % % Copyright 2000-2011 The MathWorks, Inc. and Ford Global Technologies, Inc. % default action is to add self then add children.; [nds,cheaders,vals,colsize,recurse,p_sub]=listinfo(T,tpfilter); if recurse % recurse into children ch=children(T); ch = tpfilter.filterlist(ch); if ~isempty(ch) ch_obj = infoarray(ch); p_sub=[]; for n=1:length(ch); [ch_nds,ch_cheaders,ch_vals,ch_colsize,ch_sub]= nodelist(ch_obj{n},tpfilter); if ~isempty(ch_cheaders) [nds,cheaders,vals,colsize]= i_squishtogether(nds,cheaders,vals,colsize,ch_nds,ch_cheaders,ch_vals,ch_colsize); end p_sub= [p_sub;ch_sub(:)]; end end end function [nds,cheaders,vals,colsize]= i_squishtogether(nds,cheaders,vals,colsize,ch_nds,ch_cheaders,ch_vals,ch_colsize) if ~isequal(cheaders,ch_cheaders) % add any new columns. Generate an index list that tells us where to place values [OK,loc]=ismember(ch_cheaders,cheaders); nok = sum(~OK); if nok>0 cheaders = [cheaders ch_cheaders(~OK)]; colsize = [colsize ch_colsize(~OK)]; % add new columns to vals if ~isempty(vals) vals(:,end+1:end+nok) = {'-'}; end end if ~isempty(ch_nds) % disperse values correctly nds=[nds ch_nds]; nch = size(ch_vals,1); % add new rows vals(end+1:end+nch,1:length(cheaders))={'-'}; % add values to existing columns vals(end-nch+1:end,loc(OK))= ch_vals(:,OK) ; % new columns at end vals(end-nch+1:end,end-nok+1:end) = ch_vals(:,~OK); end else if ~isempty(ch_nds) nds=[nds ch_nds]; % simple augmention vals = [vals; ch_vals]; end end