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;