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]