www.gusucode.com > rfblksmasks 工具箱matlab源码程序 > rfblksmasks/rfblkstxlines1.m
function varargout = rfblkstxlines1(block, action) %RFBLKSTXLINES1 Mask function for the transmission line blocks % Copyright 2006-2013 The MathWorks, Inc. % Always return an output mStr.emsg = ''; mStr.wmsg = ''; % If it is library, call the default setting if strcmpi(get_param(bdroot, 'BlockDiagramType'), 'library') if nargout>0 varargout{1} = mStr; end return end %************************************************************************** % Action switch -- Determines which of the callback functions is called %************************************************************************** switch(action) case 'rfInit' % Set index to mask parameters idxMaskNames = rfblksgetblockmaskparamsindex(block); En = get_param(block, 'MaskEnables'); Vals = get_param(block, 'MaskValues'); switch Vals{idxMaskNames.SourceFreq} case 'User-specified' En{idxMaskNames.Freq} = 'on'; otherwise En{idxMaskNames.Freq} = 'off'; end stubmode = Vals{idxMaskNames.StubMode}; termination = Vals(idxMaskNames.Termination); if strcmpi(stubmode, 'Not a stub') En{idxMaskNames.Termination} = 'off'; else En{idxMaskNames.Termination} = 'on'; end switch Vals{idxMaskNames.AllPlotType} case {'X-Y plane'} En{idxMaskNames.YOption} = 'on'; En{idxMaskNames.XOption} = 'on'; otherwise En{idxMaskNames.YOption} = 'off'; En{idxMaskNames.XOption} = 'off'; end set_param(block, 'MaskEnables', En); Udata = get_param(block, 'UserData'); % Create User Data if isempty(Udata) || ~isfield(Udata, 'Ckt') Udata.Version = 1.0; Udata.Ckt = []; Udata.Tag = block; Udata.Parameters = {}; Udata.NumParameters = 0; Udata.PlotType = ''; Udata.PlotFormat = {}; Udata.XAxisName = ''; Udata.XFormat = ''; Udata.Plot = true; set_param(block, 'UserData', Udata); end oldplotflag = true; if isfield(Udata, 'Plot') oldplotflag = Udata.Plot; % Save plot flag end lastwarn(''); try ckt = createrfcktfromblk(block); Udata = get_param(block, 'UserData'); Udata.Ckt = ckt; Udata.Tag = block; catch mex Udata = rfblksflagnoplot(block, Udata); if ismodelstopped errordlg([block ': ' mex.message],'RF Blockset Error', 'on'); else mStr.emsg = mex.message; end end if ismodelstopped && ~isempty(lastwarn) warndlg([block ': ' lastwarn],'RF Blockset Warning', 'on'); else mStr.wmsg = lastwarn; end % Update icons if ismodelstopped drawTxlineIcon(block, stubmode, termination); end % Refresh dialog if plot flag has changed if oldplotflag ~= Udata.Plot dialog = rfblksfinddialog(block); % Find dialog if ~isempty(dialog) dialog.refresh; end end % Save plot control Udata = get_param(block, 'UserData'); if all(isfield(Udata, {'NetworkData1', 'NetworkData2', ... 'ComplexFormat1', 'ComplexFormat2', 'XParameter', 'XFormat'})) set_param(block, 'AppliedNetworkData', Udata.NetworkData1, ... 'AppliedNetworkData2', Udata.NetworkData2, ... 'AppliedComplexFormat', Udata.ComplexFormat1, ... 'AppliedComplexFormat2', Udata.ComplexFormat2, ... 'AppliedXParameter', Udata.XParameter, ... 'AppliedXFormat', Udata.XFormat); end case 'rfDelete' deleterfblkfunc(block); case 'rfCopyFcn' copyrfblkfunc(block); case 'rfDefault' end if nargout>0 varargout{1} = mStr; end %-------------- function drawTxlineIcon(block, stubmode, termination) % Update icons load('txlineicon.mat') switch stubmode case {'Not a stub'} x = x_none; y = y_none; case {'Shunt'} x = x_shunt; y = y_shunt; if strcmpi(termination, 'Short') x = [x NaN x_shunt_short]; y = [y NaN y_shunt_short]; end case {'Series'} x = x_series; y = y_series; if strcmpi(termination, 'Short') x = [x NaN x_series_short]; y = [y NaN y_series_short]; end end aDisp = ['plot([-100,NaN,100],[-100,NaN,100]);plot([', ... removeSpace(x),'],[',removeSpace(y),']);']; % Update text on the icon switch upper(strtok(get_param(block, 'MaskType'))) case {'TRANSMISSION'} aDisp = strcat(aDisp, ['text(0,-80,''Transmission Line'',', ... '''horizontalAlignment'',''center'');']); case {'COAXIAL'} aDisp = strcat(aDisp, ['text(0,-80,''Coaxial'',', ... '''horizontalAlignment'',''center'');']); case {'MICROSTRIP'} aDisp = strcat(aDisp, ['text(0,-80,''Microstrip'',', ... '''horizontalAlignment'',''center'');']); case {'PARALLEL-PLATE'} aDisp = strcat(aDisp, ['text(0,-80,''Parallel-Plate'',', ... '''horizontalAlignment'',''center'');']); case {'TWO-WIRE'} aDisp = strcat(aDisp, ['text(0,-80,''Two-Wire'',', ... '''horizontalAlignment'',''center'');']); case {'COPLANAR'} aDisp = strcat(aDisp, ['text(0,-80,''CPW'',', ... '''horizontalAlignment'',''center'');']); end set_param(block, 'MaskDisplay', aDisp); %-------------- function x_string = removeSpace(x) x_string = ''; for k = 1:length(x) x_string = strcat(x_string, num2str(x(k)), ', '); end % [EOF]