Поиск
  • Admin

Основные понятия графического языка программирования #Project. Определение прототипа

Пост обновлен февр. 4

Язык #Project является графическим языком программирования, в котором программы создаются путем создания графических чертежей, а не текстовых файлов, как это принято в большинстве языков программирования.


Определения, используемые в языке #Project.

Строка кода - текстовая строка, которая совершает некоторые действия в программе, имеет в начале строки символ #.

Пример строки кода, выводящей на экран фразу "Привет мир!":

#MsgBox|Привет мир!

Если в начале строки отсутствует символ #, то такая строка не выполняется.

Пример строки кода, которая НЕ выводит на экран фразу "Привет мир":

MsgBox|Привет мир

Т.е. бывает удобно выключить строку из выполнения - достаточно убрать с начала строки символ #.


Переменная - значение, доступ к которому на чтение или изменение можно получить по имени. Имя переменной в языке #Project может содержать пробелы и указывается в квадратных скобках.


Чтобы назначить (присвоить) значение переменной, следует написать имя переменной в квадратных скобках и справа от переменной написать ее значение.

Пример строки кода с назначением переменной с именем "Приветствие" значения "Привет мир!"

#[Приветствие]Привет мир!


Чтобы получить значение переменной - следует написать в строке кода имя переменной в фигурных скобках.

Пример двух строк кода, которые назначают переменной [Приветствие] значение "Привет мир!", а потом выводят на экран эту фразу:

#[Приветствие]Привет мир!

#MsgBox|{Приветствие}


Переменные в в языке #Project не являются типизированными, переменные в памяти компьютера всегда представляют собой текстовые строки. Корректность операций определяется на этапе выполнения программы.

Чтобы выполнить математические действия с некоторой строкой или переменными, следует при назначении значения переменной после имени переменной в квадратных скобках указать знак =.

Пример - переменной [X] присваивается значения 2. Потом переменной [Y] присваивается значение [X] *3. Потом на экран выводится значение переменной {Y} в виде строки - "Значение переменной Y: 6"

#[X]2

#[Y]={X}*3

#MsgBox|Значение переменной Y: {Y}


Команда - часть строки кода после символа #, которая указывает, что делать программе. Команда имеет имя, которое расположено сразу после символа #. Также команда может иметь один или несколько параметров, которые записываются после имени команды через символ вертикальной черты | и отделяются друг от друга также символом вертикальной черты |.

Пример - команда Move имеет два параметра (перемещает объекты по оси Х на 10, а по оси Y на 20 единиц)

#Move|10|20

Тоже самое с использованием переменных [dX] и [dY]

#[dX]10

#[dY]20

#Move|{dX}|{dY}


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

Командная выноска своим концом должна точно совпадать с характерными точками графических объектов, на которые эта выноска распространяет свое действие - концы отрезков, полилиний, точки вставки блоков, квадранты или центры кругов и т.д. Характерные точки объектов - это точки, за которые объекты перемещаются при редактировании (grip points) или растягиваются (stretch points) в графическом редакторе.

В зависимости от команд, которые содержит командная выноска, действие командной выноски может распространяться только на объект, на который она указывает (в таком случае имя команды в конце содержит "1") или на несколько объектов внутри командной полилинии - см. ниже.



Рис 1. Пример командной выноски, удаляющей только один объект (круг) командой #Delete1


Командная полилиния - замкнутая полилиния, на которую указывает командная выноска, которая служит для выполнения команд этой командной выноски над объектами, которые находятся внутри этой командной полилинии.

Рис 2. Пример командной выноски, удаляющей командой #Delete три круга внутри командной полилинии


Вложенная командная выноска - командная выноска, которая находится внутри командной полилинии другой командной выноски.

Уровень вложенности командной выноски - количество командных выносок, для которых рассматриваемая командная выноска является вложенной.

Порядок выполнения командных выносок - сначала выполняются командные выноски, которые имеют более высокий уровень вложенности (находятся наиболее глубоко внутри полилиний других командных выносок), за исключением выносок, начинающихся с команды #tag.


Рис 3. Командная выноска с командой Delete1, удаляющей один круг, является вложенной для команды Delete, которая удаляет оставшиеся два круга. Командная выноска Delete1 имеет уровень вложенности равным 1


Команда #tag - команда, которая задает порядок выполнения командных выносок без учета их уровня вложенности.

Рис 4. Пример использования команды #tag. #Delete выполняется первой (#tag|1), а #Delete1 - второй (#tag|2). Таким образом, на данном рисунке команда #Delete1 является лишней, так как команда #Delete будет выполнена раньше и сотрет все три круга


Командные выноски, имеющие команду #tag, всегда выполняются раньше команд, не имеющих команду #tag.

Командные выноски, имеющие одинаковый уровень вложенности, выполняются в произвольном порядке.

Командные выноски, имеющие одинаковый порядок выполнения, заданный командой #tag, выполняются в произвольном порядке.

Рекомендуется, чтобы командные выноски, в которых производится назначение исходных значений переменных, имели первой командой #tag|0, что гарантирует их выполнение в первую очередь.


Графический прототип (или просто прототип) - область плоскости или пространства, содержащая графические объекты, ограниченная замкнутой полилинией с выноской, содержащей в первой строке команду #Prototype (см. рис 5) и список параметров, определяющих этот прототип. В списке параметров обязательно должен содержаться параметр [Имя прототипа], которому должно быть присвоено уникальное значение.

Рис. 5. Пример определения графического прототипа с именем прототипа "Чебурашка" без дополнительных параметров


Внутри одного прототипа не могут содержаться определения других прототипов. Командная выноска, создающая прототип, не может находится внутри другой командной выноски. Т.е. уровень вложенности командной полилинии определения прототипа всегда равен нулю.


Процедура - командная полилиния, имеющая первый уровень вложенности по отношению к командной выноске с определением прототипа.

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

На рисунке 6 показано описание прототипа "Чебурашка" с двумя процедурами, которые создают блоки:

1) Процедура #Block|[Имя прототипа]{Имя прототипа}|[Имя блока]Вид спереди| помещает в пространство чертежа блок, содержащий вид на чебурашку спереди с именем "#Block|[Имя прототипа]Чебурашка|[Имя блока]Вид спереди|"

2) Процедура #Block|[Имя прототипа]{Имя прототипа}|[Имя блока]План| помещает в пространство чертежа блок, содержащий вид на чебурашку сверху с именем #Block|[Имя прототипа]Чебурашка|[Имя блока]План|

Рис 6. Пример прототипа с двумя процедурами:

1) #Block|[Имя прототипа]{Имя прототипа}|[Имя блока]Вид спереди|

2) #Block|[Имя прототипа]{Имя прототипа}|[Имя блока]План|


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


Рассмотрим создание прототипа Чебурашки с параметром, который будет отвечать за размер ушей при отображении на экране.

(Для повторения дальнейших экспериментов читателю необходим на компьютере установленный Autocad 2016...2021 c полной версией надстройки ProjectMaster (https://www.projectmaster.tech/).

Пример описания прототипа Чебурашки с изменяющимися ушами приведен на рис. 7.

Рис 7. Описание прототипа Чебурашка с параметром [Размер ушей], отвечающим за размер ушей при отображении чертежа


Рассмотрим алгоритм отрисовки Чебурашки как "Вид спереди" (см. рис 7, верхняя половина картинки).

1. Пользователь задает параметр [Размер ушей] (например - 30) и запускает процедуру #Block|[Имя прототипа]{Имя прототипа}|[Имя блока]Вид спереди|[Размер ушей]{Размер ушей} - см. рис. 8

Рис.8 Выбор прототипа Чебурашка, блока для отображения на экране и задание параметра [Размер ушей] равным 30


2. Сначала выполняются командные выноски, которые имеют команды #tag с минимальными значениями параметра, отвечающего за место в очереди команд. Это две командные выноски, имеющие #tag|0. Эти командные выноски имеют команды #Name|Eye1 и #Name|Eye2.

3. Команда #Name|Eye1 указывает своим концом на круг (ЛЕВЫЙ глаз Чебурашки) и назначает этому кругу имя Eye1 для того, чтобы в дальнейшем к этому кругу можно было обращаться по имени.

4. Команда #Name|Eye2 указывает своим концом на круг (ПРАВЫЙ глаз Чебурашки) и назначает этому кругу имя Eye2 для того, чтобы в дальнейшем к этому кругу можно было обращаться по имени.

5. Выполняется командная выноска, имеющая команду #tag|1. Эта командная выноска сначала вычисляет разность между заданным пользователем параметром [Размер ушей] и текущим размером ушей (который равен 17) и заносит это значение в переменную [dx]:

#[dx]={Размер ушей}-17

Затем выполняется команда растяжения уха (и размера) на полученную величину [dx] в направлении от правого глаза к левому (от объекта с именем Eye2 к объекту с именем Eye1):

#Stretch|{dx}|Eye2|Eye1|

6. Выполняется командная выноска, имеющая команду #tag|2. Эта командная выноска использует ранее вычисленное значение [dx] и выполняет растяжение уха (и размера) на полученную величину [dx] в направлении от левого глаза к правому (от объекта с именем Eye1 к объекту с именем Eye2)

#Stretch|{dx}|Eye1|Eye2|

7. Выполняется последняя командная выноска с командой

#Block|[Имя прототипа]{Имя прототипа}|[Имя блока]Вид спереди|[Размер ушей]{Размер ушей}

Команда создает на экране блок с именем #Block|[Имя прототипа]Чебурашка|[Имя блока]Вид спереди|[Размер ушей]30


Результат отрисовки прототипа Чебурашка как блок "Вид спереди" с параметром [Размер ушей] =30 приведен на рис. 9.

Рис. 9 Результат отображения прототипа Чебурашка как как блок "Вид спереди" с параметром [Размер ушей] =30


Демонстрация работы с прототипом "Чебурашка" приведена на видео.



Просмотров: 81Комментариев: 0

Недавние посты

Смотреть все

Вышло весеннее обновление ProjectMaster за 2021 г

Наконец выпущено обновление, которое планировалось выпустить в апреле. Обновление ставиться на уже установленную работающую программу Ссылка на обновление: https://disk.yandex.ru/d/Gx_SewEBwYqIsg Если