Copyright © Красноярский государственный педагогический университет 2004
Функция uicontrol для разработки интерфейсных программ Как из функции на языке matlab приготовить код на языке Си и из него приготовить exe-файл ЗадачиФункция uicontrol для разработки интерфейсных программ
Функция uicontrol является основной функцией для разработки интерфейсных программ. Она размещает в памяти и высвечивает на указанном графическом окне интерфейсные элементы. Следующие две строки открывают графическое окно и размещают на нем интерфейсный элемент. h1=figure; hu=uicontrol(h1); Тип интерфейсного элемента, его размеры, расположение в графическом окне, цвет и т.д. определяются значениями полей интерфейсного объекта. Посмотреть все возможные поля объекта и их значения по умолчанию можно командой set(hu). В следующей таблице приводятся некоторые поля интерфейсных объектов и их возможные значения. Значения по умолчанию выделеня в фигурные скобки.
| Поле | Назначение |
| BackgroundColor | Определяет цвет объекта. |
| FontUnits | Единицы измерения размера шрифта. Возможные значения [ inches | centimeters | normalized | {points} | pixels ] |
| FontName | Имя шрифта. |
| FontSize | Размер шрифта. |
| Units | Единицы измерения для положения элемента в графическом окне и его размеров. Начало системы координат всегда в левом нижнем углу. Возможные значения [ inches | centimeters | normalized | points | {pixels} | characters ]. Обычно для поля Units используют значение normalized. При таком выборе в левом нижнем углу графического окна всегда расположена точка (0,0), а в правом верхнем (1,1). Это позволяет создавать интерфейсы, независящие от разрешения монитора и фактического размера графического окна на дисплее.
|
| Position | Определяет положение левого нижнего угла элемента и его ширину и высоту. Задается вектором из четырех элементов. Например, строка set(hu,'position',[0.1 0.1 0.4 0.5]); задает левый нижний угол в точке (0.1,0.1) , ширину 0.4 и высоту 0.5. |
| Style | Определяет тип интерфейсного элемента. Возможные значения [ {pushbutton} | togglebutton | radiobutton | checkbox | edit | text | slider | frame | listbox | popupmenu ]. |
| String | Задает надпись на интерфейсном элементе. |
| UiContextmenu | Ссылка на всплывающее меню, связанное с обектом. |
| Callback | Определяет имя функции, которая вызывается , когда с объектом происходит событие ( например, щелчок мыши на объекте). |
Рис. 3.1
В качестве полного примера приведу программу для отрисовки графика заданной функции.
Все необходимые интерфейсные элементы отрисовываются функцией graphic.m.
function graphic()
%#function myplot
global x0 dx xend fun
h1=figure;
a1=axes('units','normalized','position',[0.1 0.1 0.8 0.5]);
set(h1,'currentaxes',a1,'numbertitle','off','name','grafik f(t)');
xlabel('t');
ylabel('f');
pos=[0.1 0.7 0.1 0.05];
x0=uicontrol('style','edit','units','normalized','position',pos,'string','0');
pos1=[0.1 0.77 0.1 0.05];
dx=uicontrol('style','edit','units','normalized','position',pos1,'string','0.1');
pos2=[0.1 0.84 0.1 0.05];
xend=uicontrol('style','edit','units','normalized','position',pos2,'string','1');
pos3=[0.01 0.7 0.07 0.05];
uicontrol('style','text','units','normalized','position',pos3,'string','t0');
pos4=[0.01 0.77 0.07 0.05];
uicontrol('style','text','units','normalized','position',pos4,'string','dt');
pos5=[0.01 0.84 0.07 0.05];
uicontrol('style','text','units','normalized','position',pos5,'string','tend');
pos6=[0.01 0.91 0.07 0.05];
uicontrol('style','pushbutton','units','normalized','position',pos6,...
'string','plot','backgroundcolor',[1 0 0],'callback','myplot');
pos7=[0.3 0.91 0.5 0.05];
fun=uicontrol('style','edit','units','normalized','position',pos7,'string',...
'cos(2*pi*t).*exp(-t.^2)');
pos8=[0.2 0.91 0.08 0.05];
uicontrol('style','text','units','normalized','position',pos8,'string','f(t)=');
Вот как выглядит результат работы этой функции на экране.
При нажатии кнопки plot вызывается функция myplot из файла myplot.m,
которая и отрисовывает график.
function myplot()
global x0 dx xend fun
s1=get(x0,'string');
s2=get(dx,'string');
s3=get(xend,'string');
s4=get(fun,'string');
sx=strcat('[',s1,':',s2,':',s3,']');
t=eval(sx); % выполняем строку sx, как команду матлаба и результат заносим в t.
%next string for compilation to the standalone application only
%you can to comment these string for work in matlab only
str=strrep(s4,'t',sx); % замена в строке s4 символа t на строку sx
f=eval(str); % строка str выполняется как команда матлаба, а результат заносится в f
plot(t,f);
Читателю предоставляется самостоятельно разобрать текст фугнкции myplot. Замечу лишь,
что замена символа t в строке s4 на строку sx связана с тем, что в дальнейшем
функция myplot будет компилироваться в Cи код. В матлаб запрещено компилировать в Си
функции содержащие вызов функции eval со строкой, содержащей имена переменных из рабочего
пространства матлаба.
После настройки компилятора можно приступать к компиляции с помощью команды.
mcc -m -B sgl graphic.m
После компиляции в вашем рабочем каталоге образуются файлы graphic.c и graphic.exe.
Файл graphic.exe является независимым exe-файлом, который может выполняться независимо
от матлаба. Однако, если в вашей системе не установлен matlab, то для выполнения exe-файлов
необходимо инсталлировать dll библиотеки матдаба. Они хранятся в специальном
самораспаковывающемся архиве mglinstaller.exe, который обычно хранится в
%MATLAB%\extern\lib\win32.
Обратите внимание на вторую строку файла graphic.m.
%#function myplot
previous home