⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fisgui.m

📁 最新模糊逻辑工具箱
💻 M
字号:
function fisgui(action,oldName,newName)
%FISGUI Handle generic figure management tasks for fuzzy GUI.
%   This functions handles menu creation and the execution of the
%   "File" menu items like "Save", "Save As...", "Close", and so on.

%   Kelly Liu 5-3-96  Ned Gulley, 6-9-94
%   Copyright (c) 1994-98 by The MathWorks, Inc.
%   $Revision: 1.27 $  $Date: 1997/12/01 21:44:54 $

% The arguments oldName and newName are used only for the renaming option

if strcmp(action,'#initialize'),
    %====================================
    figNumber=gcf;
    oldfis=get(gcf,'UserData');
    fis=oldfis{1};
    tag=get(figNumber,'Tag');

    labelStr=menulabel('&File ');
    fileHndl=uimenu(figNumber,'Label',labelStr);
        [labelStr,accelStr]=menulabel('&New Mamdani FIS ^n');
        uimenu(fileHndl,'Label',labelStr, ...
            'Accelerator',accelStr, ...
            'Tag', 'newmamdani',...
            'Callback','fisgui #newmamdani');
        [labelStr,accelStr]=menulabel('New Sugeno FIS');
        uimenu(fileHndl,'Label',labelStr, ...
            'Accelerator',accelStr, ...
            'Callback','fisgui #newsugeno');
        [labelStr,accelStr]=menulabel('&Open FIS from disk... ^o');
        uimenu(fileHndl,'Label',labelStr, ...
            'Separator','on', ...
            'Accelerator',accelStr, ...
            'Tag', 'openfis',...
            'Callback','fisgui #openfis');
        [labelStr,accelStr]=menulabel('&Save to disk ^s');
        uimenu(fileHndl,'Label',labelStr, ...
            'Accelerator',accelStr, ...
            'Tag','save', ...
            'Callback','fisgui #save');
        uimenu(fileHndl,'Label','Save to disk as...', ...
            'Tag','saveas', ...
            'Callback','fisgui #saveas');
        uimenu(fileHndl,'Label','Open FIS from workspace...', ...
            'Separator','on', ...
            'Tag', 'openfis',...
            'Callback','fisgui #ws2gui');
        callbackStr=[ ...
            ' oldfis=get(gcf,''UserData''); ', ...
            ' fis=oldfis{1};',...
            ' fisName=fis.name; ', ...
            ' s=[fisName ''=fis;'']; ', ...
            ' eval(s); ', ...
            ' statmsg(gcf,[''Saved variable '' fisName '' to workspace.''])'];
        [labelStr,accelStr]=menulabel('Save &to workspace ^t');
        uimenu(fileHndl,'Label',labelStr, ...
            'Accelerator',accelStr, ...
            'Callback',callbackStr);
        uimenu(fileHndl,'Label','Save to workspace as...', ...
            'Callback','fisgui #gui2ws');

        [labelStr,accelStr]=menulabel('&Print... ^p');
        uimenu(fileHndl,'Label',labelStr, ...
            'Separator','on', ...
            'Accelerator',accelStr, ...
            'Callback','printdlg');


        [labelStr,accelStr]=menulabel('&Close window ^w');
        uimenu(fileHndl,'Label',labelStr, ...
            'Separator','on', ...
            'Accelerator',accelStr, ...
            'Callback','fisgui #close');

    labelStr=menulabel('&Edit ');
    editHndl=uimenu(figNumber, ...
        'Label',labelStr, ...
        'Tag','editmenu');

    labelStr=menulabel('&View ');
    viewHndl=uimenu(figNumber,'Label',labelStr);
        [labelStr,accelStr]=menulabel('Edit &FIS properties... ^1');
        uimenu(viewHndl, ...
            'Label',labelStr, ...
            'Tag','fuzzy', ...
            'UserData',1, ...
            'Accelerator',accelStr, ...
            'Callback','fisgui #findgui');
        [labelStr,accelStr]=menulabel('Edit &membership functions... ^2');
        uimenu(viewHndl, ...
            'Label',labelStr, ...
            'Tag','mfedit', ...
            'UserData',2, ...
            'Accelerator',accelStr, ...
            'Callback','fisgui #findgui');
        [labelStr,accelStr]=menulabel('Edit &rules... ^3');
        uimenu(viewHndl, ...
            'Label',labelStr, ...
            'Tag','ruleedit', ...
            'UserData',3, ...
            'Accelerator',accelStr, ...
            'Callback','fisgui #findgui');
        [labelStr,accelStr]=menulabel('Edit &anfis... ^4');
        if strcmp(fis.type, 'mamdani')
           enablethis='off';
        else
           enablethis='on';
        end
        uimenu(viewHndl, ...
            'Label',labelStr, ...
            'Tag','anfisedit', ...
            'UserData',6, ...
            'Accelerator',accelStr, ...
            'Enable', enablethis, ...
            'Callback','fisgui #findgui');
        [labelStr,accelStr]=menulabel('&View rules... ^5');
        uimenu(viewHndl, ...
            'Separator','on', ...
            'Label',labelStr, ...
            'Tag','ruleview', ...
            'UserData',4, ...
            'Accelerator',accelStr, ...
            'Callback','fisgui #findgui');
        [labelStr,accelStr]=menulabel('View &surface... ^6');
        uimenu(viewHndl, ...
            'Label',labelStr, ...
            'Tag','surfview', ...
            'UserData',5, ...
            'Accelerator',accelStr, ...
            'Callback','fisgui #findgui');

    % Disable the "View" item that points at the current window
%    hndl=findobj(figNumber,'Type','uimenu','Tag',tag);
%    set(hndl,'Enable','off');

elseif strcmp(action,'#findgui'),
    %====================================
    figNumber=watchon;
    menuHndl=gcbo;
    oldfis=get(figNumber,'UserData');
    fis=oldfis{1};
    tag=get(menuHndl,'Tag');

    nameList=[ ...
        'FIS Editor                '
        'Membership Function Editor'
        'Rule Editor               '
        'Rule Viewer               '
        'Surface Viewer            '
        'Anfis Editor              '];

    % Figure out what the current GUI type is based on the figure's tag
    currGui=get(menuHndl,'UserData');
    name=deblank(nameList(currGui,:));
    if ~isempty(name)
      fisName=fis.name;
      newFigNumber=findobj(0,'Name',[name ': ' fisName]);
      statmsg(figNumber,['Opening ' name]);
      if isempty(newFigNumber),
        eval([tag '(fis);']);
      elseif strcmp(get(newFigNumber,'Visible'),'off'),
        figure(newFigNumber)
        eval([tag ' #update']);
      else
        figure(newFigNumber);
      end
    end
    statmsg(figNumber,'Ready');
    watchoff(figNumber);

elseif strcmp(action,'#openfis'),
    %====================================
    figNumber=watchon;
    [fis,errorStr]=readfis;
    if isempty(fis),
        statmsg(figNumber,errorStr);
    else
        msgStr='Opening file';
        statmsg(figNumber,msgStr);
        fuzzy(fis);
        statmsg(figNumber,'Ready');
    end
    watchoff(figNumber);

elseif strcmp(action,'#saveas');
    %====================================
    figNumber=watchon;
    oldfis=get(figNumber,'UserData');
    fis=oldfis{1};
    oldName=fis.name;

    [newName,pathName,errorStr]=writefis(fis,oldName,'dialog');
    if ~isempty(errorStr),
        statmsg(figNumber,errorStr)
    else
        if ~strcmp(oldName,newName),
            fisgui('#fisname',oldName,newName);
        end

        % Put the path name along with a time stamp into the menu items'
        % user data
        pathHndl=findobj(figNumber,'Type','uimenu','Tag','save');
        set(pathHndl,'UserData',pathName);
        timeHndl=findobj(figNumber,'Type','uimenu','Tag','saveas');
        set(timeHndl,'UserData',clock);

        statmsg(figNumber,['Saved FIS "' newName '" to disk']);
    end
    watchoff(figNumber);

elseif strcmp(action,'#save');
    %====================================
    figNumber=watchon;
    oldfis=get(figNumber,'UserData');
    fis=oldfis{1};
    name=fis.name;
    if strcmp(name(1:8), 'Untitled');
         fisgui('#saveas')
         return;
    end
    statmsg(figNumber,'Saving FIS to disk');

    fisName=fis.name;
    nameList=[ ...
        'FIS Editor                '
        'Membership Function Editor'
        'Rule Editor               '
        'Rule Viewer               '
        'Surface Viewer            '
        'Anfis Editor              '];
    currTime=clock;
    timeBuffer=inf;
    pathBuffer=[];
    for count=1:5,
        % Look for any open related figure that has done a "Save as" and
        % use the path from the most recent time
        guiName=deblank(nameList(count,:));
        newFigNumber=findobj(0,'Name',[guiName ': ' fisName]);
            if newFigNumber,
            % Get the path name along with a time stamp from the menu items'
            % user data
            timeHndl=findobj(newFigNumber,'Type','uimenu','Tag','saveas');
            timeStamp=get(timeHndl,'UserData');
            pathHndl=findobj(newFigNumber,'Type','uimenu','Tag','save');
            pathName=get(pathHndl,'UserData');

            if ~isempty(timeStamp),
                if etime(currTime,timeStamp)<timeBuffer,
                    timeBuffer=etime(currTime,timeStamp);
                    pathBuffer=pathName;
                end
            end
        end
    end

    [fisName,pathName,errorStr]=writefis(fis,[pathName fisName]);
    if ~isempty(errorStr),
        statmsg(figNumber,errorStr)
    else
        statmsg(figNumber,['Saved FIS "' fisName '" to disk']);
    end
    watchoff(figNumber);

elseif strcmp(action,'#gui2ws');
    %====================================
    figNumber=watchon;
    oldfis=get(figNumber,'UserData');
    fis=oldfis{1};
    statmsg(figNumber,'Saving FIS to workspace');

    fisName=fis.name;
    wsdlg(fis,fisName,'gui2ws');
    watchoff(figNumber);

elseif strcmp(action,'#ws2gui');
    %====================================
    figNumber=watchon;
    oldfis=get(figNumber,'UserData');
    fis=oldfis{1};
    statmsg(figNumber,'Opening FIS from workspace');

    fisName=fis.name;
    wsdlg(fis,fisName,'ws2gui');
    watchoff(figNumber);

elseif strcmp(action,'#newmamdani');
    %====================================
    figNumber=watchon;
    newFis=newfis('Untitled','mamdani');
    newFis=addvar(newFis,'input','input1',[0 1]);
    newFis=addvar(newFis,'output','output1',[0 1]);

    statmsg(figNumber,'Opening FIS Editor for new Mamdani system');
    fuzzy(newFis);
    watchoff(figNumber);

elseif strcmp(action,'#newsugeno');
    %====================================
    figNumber=watchon;
    newFis=newfis('Untitled','sugeno');
    newFis=addvar(newFis,'input','input1',[0 1]);
    newFis=addvar(newFis,'output','output1',[0 1]);

    statmsg(figNumber,'Opening FIS Editor for new Sugeno system');
    fuzzy(newFis);
    watchoff(figNumber);

elseif strcmp(action,'#close');
    %====================================
    figNumber=gcf;
    allfis=get(figNumber,'UserData');
    fis=allfis{1};
    nameList=[ ...
        'FIS Editor                '
        'Membership Function Editor'
        'Rule Editor               '
        'Rule Viewer               '
        'Surface Viewer            '
        'Anfis Editor              '];

    fisName=fis.name;
    visFigList=[];
    invisFigList=[];
    % See who's left onscreen
    for count=1:size(nameList, 1),
        name=deblank(nameList(count,:));
        visFigList=[visFigList findobj(0, 'Type', 'figure',...
            'Name',[name ': ' fisName],'Visible','on')'];
        invisFigList=[invisFigList findobj(0, 'Type', 'figure', ...
            'Name',[name ': ' fisName],'Visible','off')'];
    end

    if length(visFigList)==1,
        % This is the last visible relative. Closing this will mean losing data.
        savedlg(fis,[visFigList invisFigList])
    else
        set(figNumber,'Visible','off');
    end

elseif strcmp(action,'#fisname'),
    %====================================
    figNumber=watchon;

    newName=deblank(newName);
    newName=fliplr(deblank(fliplr(newName)));
    nameStr='FIS Editor';
    newFigNumber=findobj(0,'Name',[nameStr ': ' oldName]);
    if newFigNumber,
        newFigNumber=newFigNumber(1);
        oldfis=get(newFigNumber,'UserData');
        fis=oldfis{1};
        fis.name=newName;
        msgStr=['Renamed FIS to "' newName '"'];
        statmsg(newFigNumber,msgStr);
        set(newFigNumber, ...
            'Name',['FIS Editor: ' newName]);
        pushundo(newFigNumber, fis);
        txtHndl=findobj(newFigNumber,'Type','text','Tag','fisname');
        set(txtHndl,'String',newName);
        txtHndl=findobj(newFigNumber,'Type','uicontrol','Tag','fisname');
        set(txtHndl,'String',newName);
    end

    % Give the appropriate name to all other related GUI windows
    nameStrMatrix=[ ...
        'Membership Function Editor'
        'Rule Editor               '
        'Rule Viewer               '
        'Surface Viewer            '
        'Anfis Editor              '];
    for count=1:5,
        nameStr=deblank(nameStrMatrix(count,:));
        newFigNumber=findobj(0,'Name',[nameStr ': ' oldName]);
        if ~isempty(newFigNumber),
            newFigNumber=newFigNumber(1);
            fis=get(newFigNumber,'UserData');
            fis.name=newName;
            msgStr=['Renamed FIS to "' newName '"'];
            statmsg(newFigNumber,msgStr);
            set(newFigNumber, ...
                'Name',[nameStr ': ' newName]); 
            pushundo(newFigNumber, fis);
        end
    end
    watchoff(figNumber);

end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -