www.gusucode.com > mbcdata 工具箱 matlab 源码程序 > mbcdata/@cgprojconnections/add.m
function A = add(A,pItems,DoSort) %ADD add item to cgprojconnections % % A = add(A,pItems) % Copyright 2007-2008 The MathWorks, Inc. if isempty(pItems) return end [pNode,pData,pDep]= pveceval(pItems,@getConnections); % make into arrays pNode= [pNode{:}]; pData= [pData{:}]; pDep= [pDep{:}]; % cgconstants and cgconstraints and maybe others aren't in project pDiff = setdiff([pDep{:}],[A.pData,pData]); if any(pDiff==0) % remove any null pointers pDiff(pDiff==0) = []; end Type= cell(size(pNode)); Names= cell(size(pNode)); IsMajorItem= true(1,length(pData)); if ~isempty(pDiff) % unconnected objects (falls over for missing datasets) pDiffInps= pveceval(pDiff,@getAllInputs); pDiffInps= [pDiffInps{:}]; if ~isempty(pDiffInps) pDiff= [pDiff pDiffInps]; % don't include any items already in pDiff= setdiff(pDiff,[A.pData,pData]); end pData = [pData pDiff]; pNode = [pNode mbcpointer(size(pDiff))]; pDep= [pDep pveceval(pDiff,@getDependentPtrs)]; Type(end+1:length(pData))= {'Unknown Type'}; IsMajorItem= [IsMajorItem false(size(pDiff))]; end % List of CAGE objects and isa classes [Types,Classes]= CageTypes(A); % build connections matrix len = length(A.Connections); Connections= false(len+length(pData)); Connections(1:len,1:len)= A.Connections; n = length(A.pData); NewpData= [A.pData pData]; for i=1:length(pData) p= pData(i); if ~isempty(pDep{i}) % determine connectivity [OK,loc]= ismember(pDep{i},NewpData); Connections(n+i,loc(OK))= true; end if isnull(p) % no data pointer : only tradeoff at the moment E= pNode(i).info; Names{i}= name(E); else E= info(p); Names{i}= getname(E); end if isempty(Type{i}) j= 1; while j<=length(Types) && ~isa(E,Classes{j}) % find type j= j+1; end if j>length(Types) Type{i}= 'Unknown Type'; IsMajorItem(i)= false; else Type{i}= Types{j}; end end end A.Names= [A.Names,Names]; A.pNode= [A.pNode pNode]; A.pData= NewpData; A.Connections= Connections; A.Type= [A.Type Type]; A.IsMajorItem= [A.IsMajorItem IsMajorItem]; if nargin<3 || DoSort A= sort(A,'Names'); end