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