www.gusucode.com > mbcexpr 工具箱 matlab 源码程序 > mbcexpr/@cgslparser/findSrcBlocks.m
function srcblock = findSrcBlocks(obj,b,varargin) %FINDSRCBLOCKS - Find the source block(s) for this block % % srcblock = findSrcBlocks(obj,b,varargin) % % Copyright 2007 The MathWorks, Inc. and Ford Global Technologies, Inc. % special code for function block VectorBlocks = {'Fcn','MATLABFcn','DotProduct'}; VectorMaskBlocks = {'CAGE Polynomial'}; SupportsMultiInputs = any(strcmp( get_param(b,'BlockType'), VectorBlocks)) || ... (strcmp( get_param(b,'BlockType'), 'SubSystem') && any(strcmp( get_param(b,'MaskType'), VectorMaskBlocks ))); porthandles = get_param(b,'porthandles'); if nargin == 2 inports = porthandles.Inport; else inports = porthandles.(varargin{1}); end BaseSys = get_param(bdroot(b),'name'); srcblock = zeros(1,0); for i = 1:length(inports) lh = get_param(inports(i),'line'); if lh==-1 % no line feeding into this port obj.assert(sprintf('Port %d of block %s must be connected.',i,get_param(b,'name')),b ) else src = iGetSrc(obj,lh,BaseSys); if ~SupportsMultiInputs && ~isscalar(src) obj.assert('Block must have a single source.', b ) end end srcblock = [srcblock src]; end function srcblock = iGetSrc(obj,line,BaseSys) tracedPort = get(line,'NonVirtualSrcPorts'); srcblock = zeros(1,length(tracedPort)); for i=1:length(tracedPort) pt = get_param(tracedPort(i),'Parent'); SrcParent = get_param(pt,'Parent'); while ~strcmp(SrcParent,BaseSys) % jump out to see if you are inside supported block if iscgSubSystem(obj.SLBlocks , SrcParent) pt = SrcParent; break else SrcParent = get_param(SrcParent,'Parent'); end end srcblock(i) = get_param(pt, 'handle'); end