www.gusucode.com > 模糊控制工具箱 fuzzy logic toolbox源码程序 > fuzzy/fuzzy/cmfdlg.m

    function cmfdlg(action,fis,varType,varIndex,MainFigHndl)
%CMFDLG Create dialog for adding customized membership function.
%   CMFDLG(action,fisMatrix,varType,varIndex) will open a dialog
%   box for fisMatrix using the default MF name "trimf".
%   varType and varIndex indicate exactly which variable you
%   want to add the customized membership functions to.

%   Ned Gulley, 9-15-94, N. Hickey 19-03-01
%   Copyright 1994-2002 The MathWorks, Inc. 
%   $Revision: 1.20 $  $Date: 2002/04/14 22:23:10 $

if ~isstr(action),
    % For initialization, the fis matrix is passed in as the parameter
    oldFigNumber=action;
    action='#initialize';
end;

if strcmp(action,'#initialize'),
    labelStr='Add customized membership function';
    labelStr1='MF name';
    editStr1=' mf1';
    labelStr2='M-File function name';
    editStr2=' trimf';
    labelStr3='Parameter list';
    varRange=eval(['fis.' varType '(' num2str(varIndex) ').range']);
    editStr3=[' ' mat2str([varRange(1) mean(varRange) varRange(2)],4)];

    %===================================
    % Information for all objects
    frmColor=192/255*[1 1 1];
    btnColor=192/255*[1 1 1];
    popupColor=192/255*[1 1 1];
    editColor=255/255*[1 1 1];
    border=6;
    spacing=6;
    figPos=get(0,'DefaultFigurePosition');
    figPos(3:4)=[360 190];
    maxRight=figPos(3);
    maxTop=figPos(4);
    btnWid=160;
    btnHt=23;
 
    %====================================
    % The FIGURE
    figNumber=figure( ...
        'NumberTitle','off', ...
        'Color',[0.9 0.9 0.9], ...
        'Visible','off', ...
        'MenuBar','none', ...
        'Name',xlate('Custom Membership Function'),...
        'UserData',fis, ...
        'Units','pixels', ...
        'Position',figPos, ...
        'Tag','gui2ws', ...
        'BackingStore','off');
    figPos=get(figNumber,'position');
    centerfig(figNumber,MainFigHndl); 


    %====================================
    % The MAIN frame 
    top=maxTop-border;
    bottom=border; 
    right=maxRight-border;
    left=border;
    frmBorder=spacing;
    frmPos=[left-frmBorder bottom-frmBorder ...
    right-left+frmBorder*2 top-bottom+frmBorder*2]+[1 1 1 1];
    mainFrmHndl=uicontrol( ...
        'Style','frame', ...
        'Units','pixel', ...
        'Position',frmPos, ...
        'BackgroundColor',frmColor);

    %====================================
    % The UPPER frame 
    top=maxTop-spacing-border;
    bottom=border+9*spacing+4*btnHt;
    right=maxRight-border-spacing;
    left=border+spacing;
    frmBorder=spacing;
    frmPos=[left-frmBorder bottom-frmBorder ...
    right-left+frmBorder*2 top-bottom+frmBorder*2]+[1 0 1 0];
    varFrmHndl=uicontrol( ...
        'Units','pixel', ...
        'Style','frame', ...
        'Position',frmPos, ...
        'BackgroundColor',frmColor);

    varSpacing=(top-bottom-2*btnHt);
    %------------------------------------
    % The STRING text field
    n=1;
    labelStr=labelStr;
    pos=[left top-btnHt*n-varSpacing*(n-1) right-left btnHt];
    uicontrol( ...
        'Units','pixel', ...
        'Style','text', ...
        'BackgroundColor',frmColor, ...
        'HorizontalAlignment','left', ...
        'Position',pos, ...
        'String',labelStr);

    %====================================
    % The EDIT frame 
    bottom=border+4*spacing+btnHt;
    top=bottom+3*btnHt+2*spacing;
    right=maxRight-border-spacing;
    left=border+spacing;
    frmBorder=spacing;
    frmPos=[left-frmBorder bottom-frmBorder ...
        right-left+frmBorder*2 top-bottom+frmBorder*2]+[1 0 1 0];
    topFrmHndl=uicontrol( ...
        'Style','frame', ...
        'Units','pixel', ...
        'Position',frmPos, ...
        'BackgroundColor',frmColor);

    %------------------------------------
    % The MFTYPE text field
    labelStr=labelStr1;
    pos=[left top-btnHt btnWid btnHt];
    uicontrol( ...
        'Units','pixel', ...
        'Style','text', ...
        'HorizontalAlignment','left', ...
        'Position',pos, ...
        'BackgroundColor',frmColor, ...
        'String',labelStr);

    %------------------------------------
    % The MFNAME field
    editStr=editStr1;
    pos=[right-btnWid top-btnHt btnWid btnHt];
    uicontrol( ...
        'Units','pixel', ...
        'Style','edit', ...
        'String',editStr, ...
        'Tag','mfname', ...
        'HorizontalAlignment','left', ...
        'Position',pos, ...
        'UserData',varType, ...
        'BackgroundColor',editColor);

    %------------------------------------
    % The MFNAME text field
    labelStr=labelStr2;
    pos=[left top-2*btnHt-spacing btnWid btnHt];
    uicontrol( ...
        'Units','pixel', ...
        'Style','text', ...
        'HorizontalAlignment','left', ...
        'Position',pos, ...
        'BackgroundColor',frmColor, ...
        'String',labelStr);

    %------------------------------------
    % The MFTYPE field
    editStr=editStr2;
    pos=[right-btnWid top-2*btnHt-spacing btnWid btnHt];
    uicontrol( ...
        'Units','pixel', ...
        'Style','edit', ...
        'String',editStr, ...
        'Tag','mftype', ...
        'HorizontalAlignment','left', ...
        'Position',pos, ...
        'UserData',varType, ...
        'BackgroundColor',editColor);

    %------------------------------------
    % The MFPARAMS text field
    labelStr=labelStr3;
    pos=[left top-3*btnHt-2*spacing btnWid btnHt];
    uicontrol( ...
        'Units','pixel', ...
        'Style','text', ...
        'HorizontalAlignment','left', ...
        'Position',pos, ...
        'BackgroundColor',frmColor, ...
        'String',labelStr);

    %------------------------------------
    % The MFPARAMS field
    editStr=editStr3;
    pos=[right-btnWid top-3*btnHt-2*spacing btnWid btnHt];
    uicontrol( ...
        'Units','pixel', ...
        'Style','edit', ...
        'String',editStr, ...
        'Tag','mfparam', ...
        'HorizontalAlignment','left', ...
        'UserData',varIndex, ...
        'Position',pos, ...
        'BackgroundColor',editColor);

    %====================================
    % The CLOSE frame 
    bottom=border+spacing;
    top=bottom+btnHt;
    right=maxRight-border-spacing;
    left=border+spacing;
    frmBorder=spacing;
    frmPos=[left-frmBorder bottom-frmBorder ...
    right-left+frmBorder*2 top-bottom+frmBorder*2]+[1 0 1 0];
    clsFrmHndl=uicontrol( ...
        'Style','frame', ...
        'Units','pixel', ...
        'Position',frmPos, ...
        'BackgroundColor',frmColor);

    %------------------------------------
    % The CANCEL button
    labelStr='Cancel';
    callbackStr='close(gcf)';
    infoHndl=uicontrol( ...
        'Style','push', ...
        'Position',[right-btnWid bottom btnWid btnHt], ...
        'BackgroundColor',btnColor, ...
        'String',labelStr, ...
        'Callback',callbackStr);

    %------------------------------------
    % The OKAY button
    labelStr='OK';
    callbackStr='cmfdlg #okay';

    closeHndl=uicontrol( ...
        'Style','push', ...
        'Position',[left bottom btnWid btnHt], ...
        'BackgroundColor',btnColor, ...
        'String',labelStr, ...
        'UserData',oldFigNumber, ...
        'Callback',callbackStr);

    % Normalize all coordinates
    hndlList=findobj(figNumber,'Units','pixels');
    set(hndlList,'Units','normalized');

    % Uncover the figure
    set(figNumber, ...
        'Visible','on');

elseif strcmp(action,'#okay'),
    figNumber=gcf;
    oldFigNumber=get(gco,'UserData');

    mfNameHndl=findobj(figNumber,'Type','uicontrol','Tag','mfname');
    mfTypeHndl=findobj(figNumber,'Type','uicontrol','Tag','mftype');
    mfParamHndl=findobj(figNumber,'Type','uicontrol','Tag','mfparam');
    varType=get(mfTypeHndl,'UserData');
    varIndex=get(mfParamHndl,'UserData');

    mfType=deblank(get(mfTypeHndl,'String'));
    mfType=fliplr(deblank(fliplr(mfType)));
    mfParams=eval(get(mfParamHndl,'String'));
    mfName=deblank(get(mfNameHndl,'String'));
    mfName=fliplr(deblank(fliplr(mfName)));

    fis=get(figNumber,'UserData');
    fis=addmf(fis,varType,varIndex,mfName,mfType,mfParams);

    close(figNumber);
    figure(oldFigNumber);

    % Push the change onto the undo stack and update all related GUI tools
    pushundo(oldFigNumber,fis);
    updtfis(oldFigNumber,fis,[1]);

    mfedit('#update',varType,varIndex)

end