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