Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Базовые средства матпакета Scilab

.pdf
Скачиваний:
55
Добавлен:
04.04.2023
Размер:
6.29 Mб
Скачать

Редактор объектов

Свойства всех объектов можно установить, как программно с помощью соответствующих функций, так и с помощьюGraphicEditor(Графического Редактора). СамGraphicEditorтакже может быть вызван и программно и из графического окна. На рис 1.4.2-1 показаны две панели окнаGraphicEditor. В одной панели –ObjectsBrowse(Браузер объектов) отображается иерархия

объектов выбраннойFigure(1),в другой ObjectProperties(Свойства Объектов) –

значения соответствующих свойств.

Рис. 1.4.2-1 Окно графического редактора

В панели ObjectsBrowseотображаются те объекты, значения свойств которых можно редактировать: Figure, Axes, Compoundи другие.

Например, выбрав объект Figure, можно поменять название графика, его размещение на экране (X position=0, Y position=0 – левый верхний угол); размеры графика, сжав его по любой из осей; задать цвет заднего плана, поменять цветовую гамму.

Выбрав, например, редактирование осей Аxes, можно редактировать каждую из осей X, Y, Z: задать название оси; цвет (при этом цвет меняется у названия оси, сетки и разметки оси); задать размещение названия для оси X (наверху, внизу или посередине) и для оси Y (слева, справа или посередине). Кроме того, можно задать цвет метки, угол поворота, ее размер, фон, расстояние между линиями сетки, установить насечку между линиями и другое.

121

При последовательном выборе Figure, Axes и Compound, активизируются соответствующий объект Polyline, в котором можно менять вид и размеры маркеров, а также аппроксимировать наш график различными кривыми.

Графические объекты и их свойства

Для создания графического окна можно использовать функциюfigure:

h=figure(id);

h=figure("Свойство1","Значение1",..., "Свойствоn" ,"Значениеn"),

где: idнеобязательный целочисленный параметр, задающий номер окна;

h переменная типаhandle, которая связана с набором свойств этогоокна и их значениями;

Свойствоnназвание n-го свойства; Значениеn– значениеn-госвойства и т.д.

Объекты всех уровней имеют определенные свойства. Так, например, свойствоBackgroundColor– определяет цвет фонаfigureи может принимать соответствующиеЗначение в виде вектора 1×3 , элементы которого определяют цвет: красный, зеленый и синий, т. е.[R,G,B] ;Figure_name– строка, позволяющая задать заголовок окна;Position– определяет расположениеfigure на экране и может принимать соответствующееЗначениев виде вектора1×4,

элементы

которого определяют геометрический аспект фигуры

[XY ширина

высота], где координаты x иyопределяют расположение верхнего

левого угла;

Например, оператор

f=figure('Figure_name','МТУСИ', 'position',[10 100 300 200]);

создает графическое окно сименем МТУСИ, показанное на рис.1.4.2-2.

Рис. 1.4.2-2 Графическое окно с именем МТУСИ

122

Причем Указатель (Дескриптор) графического окназаписывается впеременнуюf тип handle. Размер и положениеокна на экране компьютера можно задать с помощью параметра:

'position', [x y dx dy],

где: x, y положение верхнего левого угла окна (по горизонтали и вертикалисоответственно относительно верхнего левого угла экрана);

dx размер окна по горизонтали ширина окна в пикселях; dy– размер окна по вертикали высота окна в пикселях.

Параметры объектов можно задавать одним из двух способов:непосредственно при создании графического окна (рис. 1.4.2-2) или после создания графического окна с помощью функцииset, которая имеет следующие форматы:

set('Свойство', 'Значение'); set(h,'Свойство'); set(h,'Свойство','Значение');

(handlePath, 'Свойство1','Значение1',…,'Свойствоn','Значениеn'); h.Свойство='Значение';

где: handlePath– символьная строка, содержащая путь, указывающий на графический объект. Этот путь состоит из свойства графической объектов всех его родителей.

Функцияsetиспользуется для изменения значения указанного свойства графичесих объектов или объектов GUI. В этом случае точечная нотация при обращении к свойству эквивалентна использования функцииset. Например,

set(h,"background",3)эквивалентно h.background=3.

Имена свойств – это символьные строки, а тип набора значений этих свойств зависит от типа соответствующего свойства.

Просмотреть списка всех существующих свойств можно в документации Scilabна страницах graphics_entitiesдля графических объектови uicontrol для объектов пользовательского интерфейса.

Формат функцииsetможет быть следующими:

set('current_entity',h),

который устанавливает новый объект с дескриптором hкак текущий;

set('current_figure',fig),

123

который устанавливает новый графический рисунок как текущий (этот формат эквивалентен функцииscf);

set('current_axes',axes),

который задает новый объект оси как текущий (этот формат эквивалентен функцииsca).

При работе с графическими объектами можно также использовать следующие функции:

scf установить текущий рисунок(окно);

delete удаление графического объекта и его дочерних элементов;

copy – копирование графического объекта;

moveперемещение, перевод, графического объекта и его дочерних

элементов;

gdf возвращение дескриптора по умолчанию фигура;

gca возвращение дескриптора текущих осей;

gce получение дескриптора текущего объекта;

get получение значения свойства графических объектов или объект

пользовательского интерфейса;

set установка значения свойства графических объектов или

объектов пользовательского интерфейса.

1.4.3. Построение графических интерфейсов пользователя (GUI)

Графический интерфейс пользователя

В Scilab, так же, как и в других программных системах, можно создаватьWindows-приложения, которые состоят из различных оконных интерфейсов и их компонентов для реализации ввода/вывода данных или любой другой графической информации. Средством для построения таких оконных интерфейсов в Scilabявляется графический интерфейс пользователя (GUI)

Простейшие предопределенные оконные интерфейсы (GUI) будут кратко описаны в п. 1.5.4. Подробно с предопределенными GUIwaitbar,

x_choices, x_choose, x_dialog, x_matrix, x_mdialogможно ознакомится

настраницеScilab по GUI.

Далее рассмотрим средства Scilab для построения графических интерфейсов, разрабатываемых пользователем для решения своих задач.

124

Построение графического интерфейса пользователя

Функция Scilabuicontrol позволяет отображать в графическом окне интерактивные компоненты (Style) GUIтакие как ползунки, числовые поля, изменяемые кнопкой мыши, редактируемые таблицы, редактируемые текстовые поля в графических элементах, флажки, группы кнопок, выпадающие списки, выпадающие меню кнопки и др. Эти объекты являются прямыми потомками графического окна, в которой они определены. Их свойства (допустимые значения) могут быть установлены и настроены как в функции uicontrol, так и в функции set через их указатели также, а также с помощью точечной нотации, как и для других графических объектов.

Функция uicontrol имеет следующие форматы:

h=uicontrol("Компонент1","Значение1",...,"Свойствоn","Значениеn"); h=uicontrol(h,"Компонент1","Значение1",...,"Свойствоn","Значениеn");

где: Компонентnназвание n-го компонентаGUI; Значениеnзначение n-го компонентаGUI;

h – переменная типаhandle, которая связана с соответствующей компонентой и ее набором свойств;

Эта функция устанавливает свойства различных компоненты(Style)и их значенияграфического окна. Естественно предварительно должно быть задано свойство Style, значениями которого могут быть допустимые имена

компонет. Если

дескриптор задан,

как первый параметр (h),

то uicontrolсоздает

новый элементыGUI,

определяемый

дескриптором –

h. Если дескриптор

не дается, тоuicontrol

создается на

текущем рисунке

(который может быть получен с помощью вызова к функции gcf).

Затем при создании элемента управления, устанавливаются свойства, заданные в качестве соответствующих значений. Это эквивалентно созданию с помощьюuicontrol какого-либо компонента, а затем установка его свойств с помощью функцииset.

Таким образом, Scilab и все графические объекты (компоненты) связывают между собой через механизм свойства. Таким образом, чтобы создать адаптированныйuicontrol, нужно знать допустимые значения используемых свойств, причем всем неиспользуемым свойствам присваиваются значения по умолчанию.

Описание всех доступных компонентов и их свойств приведены

на странице справки по uicontrolи uicontrol_properties[]. В Приложении

1.4.3,

табл. 1.4.3-1 перечислены наиболее используемые компоненты GUI и их свойства.

125

Рассмотрим в качестве примера, создание в графическом окне с именем МТУСИ компонентыКомандная кнопка (PushButton). По умолчанию эта кнопка не снабжается никакой надписью, имеет серый цвет и располагается в левом нижнем углу фигурыfigure.

Модифицируем код создания кнопки, задав дополнительно значения следующих свойств:

месторасположение и заголовок окна;

надпись на кнопке;

месторасположение кнопки.

Текст программного кода приведен на рис. 1.4.3-1, а справа на этом же рисунке можно увидеть графическое окно, которое было получено в результате работы соответствующего программного кода.

Этапы

Программный код

Графическое окно

 

 

 

Создание

// Создать окно

 

figure с

f=figure();

 

именем

// Определить положение окна

 

set(f,'position', [0,0,220,100])

 

МТУСИ и

 

//Определитьимяокна

 

pushbuttonс

 

именем

set(f,'figure_name','МТУСИ');

 

// Создать кнопкуc

 

Кнопка1

 

// надписью – Кнопка1и определить

 

 

 

 

// еепозициюнаfigureМТУСИ

 

 

B1=uicontrol('style','pushbutton',…

 

 

'string','Кнопка1',…

 

 

'position',[50,50,100,20]);

 

Создание

L1=uicontrol(f,'style','listbox',

 

listbox

'position', [50 20 100 20]);

 

 

 

 

Определени

B1=uicontrol('Style', 'Pushbutton',

Переход на выполнение

е

'String', 'Кнопка1',

функции Fun1

Callback

'Callback', 'Fun1');

 

при нажатии

 

 

на кнопке

 

 

Выполнение

Function Fun1()

 

функции

set(h,'string',sprintf("%s\n",…

 

Fun1

'Привет!))

 

endfunction

 

 

 

 

 

 

Рис. 1.4.3-1. Этапы создание простейшего GUI

При щелчке на кнопку вокруг ее надписи появляется пунктирный прямоугольник, свидетельствующий о том, что кнопка «находится в

126

активном состоянии». Щелчок за пределами поверхности кнопки выведет ее из активного состояния, и пунктирная рамка пропадет. Основное назначение командной кнопки – является вызов функции, реагирующей на щелчок по кнопке.

Щелчок по кнопке генерирует событиеCallback,которое указывается как имя свойства функцииuicontrol. Значением свойстваCallbackявляется строка с именем функции – Fun1, вызываемой при щелчке по кнопке.

Рассмотрим пример создания графического интерфейса для исследования функции f(x)=x2 на отрезке [1;2], для чего выведем на экран с шагом h=1 ее значения, а также значения ее первой (f1(x)) и второй (f2(x)) производных.

На рис. 1.4.3-2 представлен сценарий, в котором создается графический интерфейс, предназначенный для решения следующей задачи:

Создать приложение, которое при задании исходных данных из графического окна GUI и выполнения функции по вычислению значений функций и ее первой и второй производных, выводит в тоже самое окно. Причем вGUIнеобходимо предусмотреть заголовки полей ввода исходных данных, общие и частные заголовки для полей вывода результатов и две кнопки, при нажатии на которые происходит, в соответствии с их назначением, выполнение указанных функций или очистка числовых полей.

//Сценарий РИС14302: Создание графического интерфейса пользователя

//для ввода исходных данных и

//вывода результатов работы созданного приложения

clear// очистка памяти

clc// очистка командного окна

//Создание итерфейса пользователя

//Создать графическое окно figure

t=figure('position',[20,40,1110,290],...

'figure_name','Пример создания интерфейса формы в Scilab');

// Текстзаданияварианта

zadanie=uicontrol('Style','text','Position',[20,220,890,50],...

'FontSize',28,...

'BackgroundColor',[111],...

'HorizontalAlignment','center',...

'String',' Таблицазначений x, f(x), f1(x) и f2(x) ');

// СоздатьобъектКнопка: Вычислить

bt1=uicontrol('style','pushbutton','string','Вычислить',...

'position',[20,120,90,40],'CallBack','Y');

// Создать объект Кнопка: Очистить

bt2=uicontrol('style','pushbutton','string','Очистить',...

'position',[20,20,90,40],'CallBack','C');

// Создать объек Текстовое поле: X

text1=uicontrol(t,'style','text','String','',...

'position',[140,180,150,20],...

127

'String',' X '); h1=uicontrol(t,'style','listbox','position',[14020150160]);

// Создать Текстовое поле: f(x) text2=uicontrol(t,'style','text','string','',...

'position',[310,180,150,20],...

'String',' f(x) ');

// Создать объект listbox: f(x) h2=uicontrol(t,'style','listbox','position',[31020150160]);

// Создать Текстовое поле: f1(x)) text3=uicontrol(t,'style','text','string','',...

'position',[480,180,200,20],...

 

'String','

f1(x)

');

// Создать

объект listbox: f2+x)

h3=uicontrol(t,'style','listbox','position',[48020200160]);

// Создать Текстовое поле: f2(x))

text4=uicontrol(t,'style','text','string','',...

'position',[700,180,200,20],...

'String','

f2(x)

');

// Создать

объект listbox: f2(x))

 

h4=uicontrol(t,'style','listbox','position',[70020200160]);

// Текстовоеполе, Вводисходныхданных

text5=uicontrol(t,'style','text','string','',...

'position',[920,240,150,20],...

'String',' Ввод исходных данных');

// Полеввода a

texta=uicontrol(t,'style','text','string',...

'a','position',[920,170,40,20]);

edit_1=uicontrol(t,'style','edit','string','1',...

'position',[950,170,150,20]);

sa1=get(edit_1,'string');// Считывание a и преобразование в строку

sa1=evstr(sa1);// Преобразование a к типу double

// Полеввода b

textb=uicontrol(t,'style','text','string','b',...

'position',[920,140,40,20]);

edit_2=uicontrol(t,'style','edit','string','5',...

'position',[950,140,150,20]);

sb1=get(edit_2,'string');// считывание b и преобразование в строку

sb1=evstr(sb1);// преобразование b к типу double

// Полеввода h

texth=uicontrol(t,'style','text','string',...

'h','position',[920,110,40,20]);

edit_3=uicontrol(t,'style','edit','string','1',...

'position',[950,110,150,20]);

// Поле ввода исходной фукции f

textf=uicontrol(t,'style','text','string','f',...

'position',[920,80,40,20]);

edit_f=uicontrol(t,'style','edit','string','x^3',...

'position',[950,80,150,20]);

// Поле ввода первой производной f1 функции f

128

textf1=uicontrol(t,'style','text','string','f1',...

'position',[920,50,40,20]);

edit_f1=uicontrol(t,'style','edit','string','2*x^2',...

'position',[950,50,150,20]);

// Поле ввода второй производной f2 функции f

textf2=uicontrol(t,'style','text','string','f2',...

'position',[920,20,40,20]);

edit_f2=uicontrol(t,'style','edit','string','4*x',...

'position',[950,20,150,20]);

functionC()

// ФункцияСочищаетвсе listbox set(h1,'string'," ");// очистка listbox set(h2,'string'," ");// очистка listbox set(h3,'string'," ");// очистка listbox set(h4,'string'," ");// очистка listbox endfunction

functionY()

// Функция Y вычисляет и выводит в графическое окно значения x, f, f1, f2

sa1=get(edit_1,'string')// считывание a и преобразование в строку aa=strtod(sa1)// преобразование a к типу double sb1=get(edit_2,'string')// считывание b и преобразование в строку bb=strtod(sb1)// преобразование b к типу double sh1=get(edit_3,'string');// считывание h и преобразование в строку hh=strtod(sh1);// преобразование h к типу double sf=get(edit_f,'string')// считывание f и преобразование в строку sf1=get(edit_f1,'string')// считывание f1 и преобразование в строку sf2=get(edit_f2,'string')// считывание f2 и преобразование в строку

n=int((bb-aa)/hh)+1

//n=5; x=1; aa=1; bb=5, hh=1 // Значения по умолчанию x=aa;

fori=1:n arg(i)=x

fx(i)=evstr(sf);f1x(i)=evstr(sf1);f2x(i)=evstr(sf2); x=x+hh

end

//Вывод полученных данных set(h1,'string',sprintf("%1.2f\n",arg))// Выводв 1 listbox set(h2,'string',sprintf("%4.8f\n",fx))// Выводво 2 listbox set(h3,'string',sprintf("%4.8f\n",f1x))// Выводв 3 listbox set(h4,'string',sprintf("%4.8f\n",f2x))// Выводв 4 listbox

endfunction

// Конец сценария

129

Рис. 1.4.3-2. GUI для вывода таблицы значений функции

и ее производных и результат работы созданного приложения

Рис. 1.4.3-2.GUI для вывода таблицы значений функции

иее производных и результат работы созданного приложения

1.4.5Контрольные вопросы

1)Какие способы представления графиков используются в Scilab?

2)Что такое графическое окно Scilab?

3)Что такое дескриптор графического окна?

4)Какое назначение имеет функцияscf(n)?

5)Какой номер у первого графического окна?

6)Можно ли создать графическое окно с определенным номером?

7)Какое назначение имеют элементы меню графического окна:Файл,

Инструменты, Правка, Справка?

8)Каким образом можно закрыть графическое окно?

9)Какое назначение имеет функция xdel(id)?

10)Какое назначение имеет команда winsid?

11)Как выполнить настройку элементов графики (оси, толщина линий, шрифты и т.д.)?

12)Какие графические объекты имеются в Scilab?

13)Какова иерархия графических объектов?

14)Что представляет собой графический объектLegend?

15)Что определяют свойства графических объектов?

16)Что такое графический редактор?

17)Какие инструкций для установки цвета и типа линии известны?

18)Для чего используются функции plot2d2, plot2d3иplot2d4?

19)Можно ли с использованием одной функцииplotпостроить несколько графиков?

20)Можно ли в одном графическом окне построить несколько графиков одного типа?

130