Следует отметить, что среда GUIDE позволяет достаточно просто написать приложение для проведения собственных исследований. Основное преимущество визуальной среды GUIDE по сравнению со многими другими современными языками программирования состоит в том, что разработчик может использовать большой набор готовых функций MATLAB, которые реализуют алгоритмы решения широкого спектра задач.
В Приложении приведен образец лабораторной работы по дисциплине «Автоматизация инженерных вычислений». Работа направлена на изучение основных принципов создания приложений в пакете MATLAB 6.x и основ программирования событий от элементов интерфейса.
Приложение
function varargout = mygui(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @mygui_OpeningFcn, ...
'gui_OutputFcn', @mygui_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin & isstr(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% --------------------------------------------------------------------
function mygui_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
% --------------------------------------------------------------------
function varargout = mygui_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
% --------------------------------------------------------------------
function btnPlot_Callback(hObject, eventdata, handles)
% Выводим диалоговое окно для выбора вырианта получения исходных данных
button = questdlg('Данные','mygui','По умолчанию','Из файла','По умолчанию');
% Выбран вариант "Из файла"
if strcmp(button, 'Из файла')
try
% Считывание данных из файла в массив
Mas = load('data.txt');
% Определение размеров массива
SMas = size(Mas);
% Проверка массива данных
if ((SMas(2) ~= 2) | (ndims(Mas) ~= 2) | ~isnumeric(Mas))
errordlg('Неизвестный формат файла с данными', 'Ошибка!')
else
% Графическое отображение данных
handles.line = plot(Mas(:,1),Mas(:,2));
guidata(gcbo, handles);
set(handles.line, 'UIContextMenu', handles.cmLine);
end
catch
% Произошла ошибка при выполнении load
errordlg('Неизвестный формат файла с данными', 'Ошибка!')
end
else
% Выбран выриант "По умолчанию"
% Построение графика функции
x=[-2:0.2:2];
y=exp(-x.^2);
handles.line = plot (x,y);
guidata(gcbo,handles);
set(handles.line, 'UIContextMenu', handles.cmLine)
%Проверка флага сетка по х
if get(handles.chbxGridX, 'Value')
% Флаг включен, следует добавить линии сетки
set(gca, 'XGrid', 'on')
else
% Флаг выключен, следует убрать линии сетки
set(gca, 'XGrid', 'off')
end
% Проверка флага сетка по х
if get(handles.chbxGridY, 'Value')
% Флаг включен, следует добавить линии сетки
set(gca, 'YGrid', 'on')
else
% Флаг выключен, следует убрать линии сетки
set(gca, 'YGrid', 'off')
end
end
% Кнопка Построить должна стать недоступной после вывода графика
set(hObject, 'Enable', 'off')
% Кнопка Очистить должна стать доступной
set(handles.btnClear, 'Enable', 'on')
% Пункт меню График->Построить должен стать недоступным
set(handles.mnGraphPlot,'Enable','off')
% Пункт меню График->Очистить должен стать доступным
set(handles.mnGraphClear,'Enable','on')
% Переключатель Маркеры-круги должен стать доступным
set(handles.rbMarkcirc,'Enable','on')
% Переключатель Маркеры-квадраты должен стать доступным
set(handles.rbMarkSq,'Enable','on')
% Переключатель Без маркеров должен стать доступным
set(handles.rbMarkNone,'Enable','on')
% Список Цвет линии должен стать доступным
set(handles.pmColor,'Enable','on')
% Скроллбар Толщина линии должен стать доступным
set(handles.scrWidth,'Enable','on')
% Заголовок графика из текстового поля
title(get(handles.editTitle,'String'))
% --------------------------------------------------------------------
function btnClear_Callback(hObject, eventdata, handles)
% Выводим диалоговое окно
button = questdlg('Очистить оси?','mygui');
% Если выбрано "Yes"
if strcmp(button, 'Yes')
% очистка осей
cla
% Кнопка Очистить должна стать недоступной после очистки осей
set(hObject, 'Enable', 'off')
% Кнопка Построить должна стать доступной
set(handles.btnPlot, 'Enable', 'on')
% Убираем сетку
set(gca, 'XGrid', 'off')
set(gca, 'YGrid', 'off')
% Переключатель Маркеры-круги должен стать недоступным
set(handles.rbMarkcirc,'Enable','off')
% Переключатель Маркеры-квадраты должен стать недоступным
set(handles.rbMarkSq,'Enable','off')
% Переключатель Без маркеров должен стать недоступным
set(handles.rbMarkNone,'Enable','off')
% Список Цвет линии должен стать недоступным
set(handles.pmColor,'Enable','off')
% Скроллбар Толщина линии должен стать недоступным
set(handles.scrWidth,'Enable','off')
% Убираем заголовок графика
title('')
% Пункт меню График->Построить должен стать доступным
set(handles.mnGraphPlot,'Enable','on')
% Пункт меню График->Очистить должен стать недоступным
set(handles.mnGraphClear,'Enable','off')
end
% --------------------------------------------------------------------
function chbxGridx_Callback(hObject, eventdata, handles)
% --------------------------------------------------------------------
function chbxGridY_Callback(hObject, eventdata, handles)
% --------------------------------------------------------------------
function chbxGridX_Callback(hObject, eventdata, handles)
% --------------------------------------------------------------------
function rbMarkcirc_Callback(hObject, eventdata, handles)
% Устанавливаем маркеры-круги
set(handles.line, 'Marker', 'o')
% Переключатель Маркеры-квадраты должен быть выключен
set(handles.rbMarkSq, 'Value',0)
% Переключатель Без маркеров должен быть выключен
set(handles.rbMarkNone, 'Value',0)
% --------------------------------------------------------------------
function rbMarkSq_Callback(hObject, eventdata, handles)
% Устанавливаем маркеры-квадраты
set(handles.line,'Marker','s')
% Переключатель Маркеры-круги должен быть выключен
set(handles.rbMarkcirc, 'Value',0)
% Переключатель Без маркеров должен быть выключен
set(handles.rbMarkNone, 'Value',0)
% --------------------------------------------------------------------
function rbMarkNone_Callback(hObject, eventdata, handles)
% Устанавливаем оттображение графика без маркеров
set(handles.line,'Marker','none')
% Переключатель Маркеры-круги должен быть выключен
set(handles.rbMarkcirc, 'Value',0)
% Переключатель Без маркеров должен быть выключен
set(handles.rbMarkSq, 'Value', 0)
% --------------------------------------------------------------------
function pmColor_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
% --------------------------------------------------------------------
function pmColor_Callback(hObject, eventdata, handles)
Num=get(hObject, 'Value');
switch Num
case 1
% Устанавливаем синий цвет линии
set (handles.line, 'Color','b');
case 2
% Устанавливаем красный цвет линии
set (handles.line, 'Color','r');
case 3
% Устанавливаем зеленый цвет линии
set (handles.line, 'Color','g');
end
% --------------------------------------------------------------------
function scrWidth_CreateFcn(hObject, eventdata, handles)
usewhitebg = 1;
if usewhitebg
set(hObject,'BackgroundColor',[.9 .9 .9]);
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
% --------------------------------------------------------------------
function scrWidth_Callback(hObject, eventdata, handles)
% Получаем текущее значение скроллбара
w = get(hObject,'Value');
% Устанавливаем в качестве толщины линее округленное значение скроллбара
set(handles.line,'LineWidth',round(w));
% --------------------------------------------------------------------
function editTitle_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
% --------------------------------------------------------------------
function editTitle_Callback(hObject, eventdata, handles)
% --------------------------------------------------------------------
function mnGraph_Callback(hObject, eventdata, handles)
% --------------------------------------------------------------------
function mnGraphPlot_Callback(hObject, eventdata, handles)
% Вызываем обработчик нажатия кнопки Построить
btnPlot_Callback(hObject, eventdata, handles)
% Кнопка Построить должна быть недоступна
set(handles.btnPlot,'Enable','off')
% Кнопка Очистить должна быть доступна
set(handles.btnClear,'Enable','on')
% --------------------------------------------------------------------
function mnGraphClear_Callback(hObject, eventdata, handles)
% Вызываем обработчик нажатия кнопки Очистить
btnClear_Callback(hObject, eventdata, handles)
% Кнопка Построить должна быть доступна
set(handles.btnPlot,'Enable','on')
% Кнопка Очистить должна быть недоступна
set(handles.btnClear,'Enable','off')
% --------------------------------------------------------------------
function cmLine_Callback(hObject, eventdata, handles)
% --------------------------------------------------------------------
function cmLineBlue_Callback(hObject, eventdata, handles)
% Пользователь выбрал синий цвет линии в контекстном меню
% Устанавливаем синий цвет линии
set(handles.line,'Color', 'b')
% Изменяем значение списка Цвет линии на "синий"
set(handles.pmColor, 'Value', 1)
% --------------------------------------------------------------------
function cmLineRed_Callback(hObject, eventdata, handles)
% Пользователь выбрал красный цвет линии в контекстном меню
% Устанавливаем красный цвет линии
set(handles.line,'Color', 'r')
% Изменяем значение списка Цвет линии на "красный"
set(handles.pmColor, 'Value', 2)
% --------------------------------------------------------------------
function cmLineGreen_Callback(hObject, eventdata, handles)
% Пользователь выбрал зеленый цвет линии в контекстном меню
% Устанавливаем зеленый цвет линии
set(handles.line,'Color', 'g')
% Изменяем значение списка Цвет линии на "зеленый"
set(handles.pmColor, 'Value', 3)
Список литературы
1. Ануфриев И.Е. Самоучитель Matlab 5.3/6.x – СПб.: БХВ-Петербург, 2003.-736с.: ил.
2. В.П.Дьяконов MATLAB 6.5 SPI/7 + Simulink 5/6 в математике и моделировании. Серия «Библиотека профессионала». – М.: СОЛОН-Пресс, 2005. – 576 с.: ил.
3. Ануфриев И.Е. , Смирнов А.Б. , Смирнова Е.Н. MathLab 7. – СПб. : БХВ-Петербург,2005. – 1104 с.: ил.
СОЗДАНИЕ ГРАФИЧЕСКОГО ИНТЕРФЕЙСА ПОЛЬЗОВАТЕЛЯ В MATLAB Методические указания к лабораторной работе по дисциплине «Автоматизация инженерных вычислений» / сост. И.А.Селиванова. Екатеринбург: ГОУ ВПО УГТ-УПИ, 2006. 34 с.