www.gusucode.com > mbcexpr 工具箱 matlab 源码程序 > mbcexpr/@cgexpr/addSLrecursive.m

    function [warns,outpos]= addSLrecursive(e,sys,SOPTS,predecessor,pos)
%ADDSLRECURSIVE add Simulink block recursively
%
% [warns,outpos]= addSLrecursive(e,sys,SOPTS,predecessor,pos)

%  Copyright 2007-2012 The MathWorks, Inc. and Ford Global Technologies, Inc.


% add block and connect to predecessor
[h,pInputs,newblock,msg] = addSLBlock(e,sys,SOPTS,predecessor,pos);

if ~isempty(msg)
    warns ={msg};
else
    warns = {};
end

curpos=get_param(h,'position');
%----------------------------------------------------------
% Recursive call to addSLrecursive
%----------------------------------------------------------
if newblock==1
    lenp = length(pInputs);
    %recursive call to create this block's inputs
    if ~isempty(predecessor) && lenp>0

        handlestruct=get_param(h,'porthandles');
        iport=handlestruct.Inport;
        
        
            % start at the top of the current block
            lastpos(4) = curpos(2)-20;

            currentPort = 1;
            for i=1:lenp
                % loop through each of the expression inputs
                
                %work out required block positioning
                newpos=[curpos(3)-130 lastpos(4)+20];
                if SOPTS.SLType == 5 && isa(pInputs(i).info,'cgnormaliser')
                    % prelookup normalisers require 2 ports
                    ports = iport(currentPort:currentPort+1);
                    currentPort = currentPort+2;
                else
                    % just use 1 port
                    ports = iport(currentPort);
                    currentPort = currentPort+1;
                end
                [w2, lastpos] = addSLrecursive(pInputs(i).info,sys,SOPTS,ports,newpos);
                if ~isempty(w2)
                    warns = [warns, w2];
                end
            end
            if (currentPort-1)>length(iport)
                error(message('mbc:cgexpr:InvalidArguments'));
            end

                
    end
end


%----------------------------------------------------------
% Outputs
%----------------------------------------------------------
outpos = curpos;