- •Лабораторная работа 1
- •Общие сведения:
- •Порядок выполнения лабораторной работы:
- •Вопросы к защите лабораторной работы
- •Лабораторная работа 2
- •Общие сведения:
- •Порядок выполнения лабораторной работы:
- •Вопросы к защите лабораторной работы
- •Лабораторная работа 3
- •Общие сведения:
- •Порядок выполнения лабораторной работы:
- •Вопросы к защите лабораторной работы
- •Лабораторная работа 4
- •Общие сведения:
- •Порядок выполнения лабораторной работы:
- •Вопросы к защите лабораторной работы:
- •Лабораторная работа 5
- •Общие сведения:
- •Порядок выполнения лабораторной работы:
- •Вопросы к защите лабораторной работы
- •Лабораторная работа 6
- •Порядок выполнения лабораторной работы:
- •Вопросы к защите лабораторной работы
- •Лабораторная работа 7
- •Общие сведения:
- •Порядок выполнения лабораторной работы:
- •Вопросы к защите лабораторной работы
- •Лабораторная работа 8
- •Общие сведения:
- •Порядок выполнения лабораторной работы:
- •Порядок выполнения лабораторной работы:
- •Вопросы к защите лабораторной работы
- •Лабораторная работа 10
- •Общие сведения:
- •Порядок выполнения лабораторной работы:
- •Вопросы к защите лабораторной работы
- •Лабораторная работа 13
- •Общие сведения:
- •Порядок выполнения лабораторной работы:
- •Вопросы к защите лабораторной работы
- •Лабораторная работа 15
- •Общие сведения:
- •Порядок выполнения лабораторной работы:
- •Вопросы к защите лабораторной работы
-
Форма отчета: Сохраните проект со своей работой и покажите преподавателю.
-
Выводы: Студенты должны научиться строить модели различной природы.
-
Вопросы к защите лабораторной работы
-
К какой библиотеки относится имидж ScanObject?
-
К какой библиотеке относится имидж Lamp?
-
Лабораторная работа 13
-
Тема: Методы расчета полей. Механизм сообщений.
-
Цель: Краткое знакомство с работой сообщений в среде Stratum.
-
Общие сведения:
-
Сообщение посылается всем объектам с указанным именем или всем объектам указанного класса. Объект, отправляющий сообщение, называется источником сообщения, объекты, его получающие - приемниками сообщения.
При этом происходит копирование указанных переменных объекта источника сообщения в объект приемник, затем обработка модели объекта и копирование переменных обратно в объект источник. Если объектов приемников сообщений несколько, данная процедура повторяется.
Отправка сообщения объекту или группе объектов осуществляется функцией: SendMessage(STRING ObjectName,STRING ClassName, [STRING VarName1, FLOAT VarName2...])
-
ObjectName
Задает имя объекта (объектов), получающего сообщение. Пустая строка, если данный параметр не специфицирован.
ClassName*
Задает имя класса объекта (объектов), получающего сообщение. Пустая строка, если данный параметр не специфицирован.
VarName1
Имя связываемой переменной в объекте-отправителе сообщения.
VarName2
Имя связываемой переменной в объекте-получателе сообщения.
* Если заданно только имя класса, то посылается сообщение всем имиджам данного класса.
-
Порядок выполнения лабораторной работы:
Задание 1. Построение схемы
Будем рассчитывать напряженность поля в заданных точках. Поле создается системой точечных зарядов. Напряженность поля в заданной точке рассчитывается по формуле:
, где k - коэффициент, Qi - величина i заряда, Ri - расстояние от заряда до точки. Создадим имиджи : заряда, точки и служебного имиджа, сбрасывающего сумму зарядов.
Имидж заряда имеет следующий текст: FLOAT OrgX,OrgY,Q SendMessage("","Item", "OrgX","_OrgX", "OrgY","_OrgY", "Q","_Q", "Q","flag") Функция SendMessage на каждом шаге рассылает всем имиджам с именем Item информацию о своих координатах (OrgX, OrgY) и заряде Q. Передача ненулевого заряда Q в служебную переменную flag говорит о том, что пришла информация от заряда. Необходимо задать начальное значение заряда, например 1.
Служебный имидж: FLOAT Flag Flag:=-1 SendMessage("","Item","Flag","flag")
Функция SendMessage в этом имидже на каждом шаге говорит о том, что необходимо отобразить накопленную информацию и сбросить накопленную напряженность поля. Данный имидж должен стоять на схеме самым первым в порядке вычисления. Для этого воспользуйтесь редактированием порядка вычислений.
Имидж точки поля c именем Item :
HANDLE hSpace COLORREF Color ,oldColor FLOAT _enable // имидж выключен и работает только при приходе сообщения if(flag>=0) // пришло сообщение от заряда E := E + _Q/((OrgX-_OrgX)*(OrgX-_OrgX)+(OrgY-_OrgY)*(OrgY-_OrgY)) else // Визуализация a:=min(~E*10000,1) Color:=RGB(255*~a,0,(1-~a)*255) // Расчет цвета E:=0 // Обнуления напряженности if(not(HSpace)) hSpace := GetWindowSpace("Main Window")// Получение дескриптора окна if(~hSpace) HBrush := CreateBrush2d(~hSpace,0,0,~Color,#0,13) // Создание кисти HObject := CreatePolyLine2d(~hSpace,#0,~HBrush, OrgX,OrgY, OrgX+32,OrgY, OrgX+32,OrgY+32, OrgX,OrgY+32, OrgX,OrgY)// Создание прямоугольника (в одну строку) endif endif // Устанавливаем новый цвет if ((~Color!=oldColor) && SetBrushColor2d(~hSpace,~hBrush,~Color)) oldColor:=~Color endif endif
Созданный проект может иметь следующий вид:
-
Форма отчета: Сохраните проект со своей работой и покажите преподавателю.
-
Выводы: В результате выполнения лабораторной работы студенты должны понять и освоить процедуры отправки сообщений в изучаемой среде.
-
Вопросы к защите лабораторной работы
-
С помощью какой функции осуществляется отправка сообщения объекту или группе объектов?
-
Ограничено ли число объектов которым возможно отправить сообщение в изучаемой среде?
-
Лабораторная работа 14
-
Тема: Работа с двухмерной графикой.
-
Цель: Изготовление простой головоломки.
-
Общие сведения:
-
Смотри предыдущие работы.
-
Порядок выполнения лабораторной работы:
-
Задание 1. Построение схемы
Идея головоломки - определить недостающую фигуру среди уже известных.
Создайте новый проект и нарисуйте макет головоломки, он может выглядеть так:
Выделите ключевую фигуру и замаскируйте ее среди подобных:
Для удобства объедините в группу оставшиеся слева фигуры (для этого выделите их, и нажмите правую кнопку мышки):
Теперь создадим модель, обслуживающую головоломку.
Для создания отдельного окна добавьте на схему объект LGSpace (библиотека Unit). Сделаем автоматическую настройку координат окна по графическому объекту. Нарисуйте обрамляющий прямоугольник. В его свойствах укажите имя - frame. Затем в объекте LGSpace установите для переменной ObjectName значение - frame.
Теперь размер окна будет равным размерам этого прямоугольника. Для того чтобы изменить Z-порядок прямоугольника (поместить его под другими графическими объектами), щелните на нем правой кнопкой мышки и выберите команду Z-order - Downward. Или просто выберите объект и нажмите кнопки Ctrl-PgDown.
Для того чтобы пользователь мог перетаскивать объекты, добавьте объект DragObjects (библиотека Graph2d). Для того чтобы ограничить возможность перетаскивания, установите у всех стационарных графических объектов флаг Nonselectable object.
Примечание. После того как Вы установите этот флаг, объекты будут недоступны, и если вы захотите получить к ним снова доступ, используйте команду Format - Page properties - закладка Flags - Allow choosing unchoosable objects. Выполните редактирование и переключите флаг обратно.
Теперь будем определять правильность выбора пользователя. Создайте новый объект и поместите в него следующую модель:
HANDLE hcobj if (check) // if user press the "CHECK" button if (hcobj == #14) // checking descriptor current key object r := MessageBox("Correct !","",0) else r := MessageBox("Incorrect !","",0) endif check := 0 // reseting the "CHECK" button endif
Примечание. Определить дескриптор ключевого объекта можно, щелкнув на нем правой кнопкой мышки и выбрав Properties - закладка Info. Смотрите пункт HANDLE, в моем примере он получился равным 14. У вас может быть другим, исправьте значение в тексте!
Добавьте кнопку WinButton (библиотека Unit) и установите у ее переменной Text значение "Check".
Примечание. Поскольку кнопка относится к классу Windows объектов у вас могут возникнуть сложности с ее выбором. Выполните команду Format - Page properties - закладка Flags - Disable child windows. Выполните редактирование кнопки. Не забудьте отключить флаг обратно, иначе кнопка не будет работать!
Соедините связью переменные pressed (WinButton) и check (новый объект).
Добавьте объект ScanObject (библиотека Graph2d). Установите в нем значения переменных x,y равными середине ключевого поля нашей головоломки. Определить их можно в StatusLine, установив курсор мышки в нужную позицию.
В моем примере это 190,220.
Соедините связью переменные HObject (ScanObject) и hcobj (новый объект).
Пример готов, проверьте его работоспособность.