Динамическая визуализация
cinema[править | править код]
cinema [{open | close}] [fast]<Object>
Команда приводит к динамической визуализации объекта <Object>
. Как правило, это открывание дверей или выдвижение ящиков. Объект будет способен к динамической визуализации, если ему присвоен атрибут $Cinema (устаревший вариант) или атрибуты $CinemaScr, $CinAsseGr, $CinemaAssembly (новый вариант).
Необязательный ключ fast
позволяет произвести открытие/закрытие не плавно, а быстро — мгновено перевести в нужное состояние. Нужен он для обработки изделий в макропрограммах, когда нужно привести все объекты в необходимое состояние (открыты или закрыты).
Необязательные ключи open
и close
указывают, что нужно именно закрыть объект (close
) или именно открыть (open
). В противном случае, если ключ не указывать, то открытые объекты закрываются, а закрытые — открываются. Это не всегда удобно при обработках в макропрограммах.
Саму динамическую визуализацию и расчет координат точек объектов в различные моменты времени осуществляет так называемый «решатель». Решатель — это математический аппарат, который принимает на вход параметры движения и геометрические ограничения движения и вычисляет положения объектов. Один решатель может контролировать от одного до нескольких объектов. Параллельно могут использоваться несколько решателей.
Описание атрибута $Cinema[править | править код]
Атрибут $Cinema — это строковый атрибут со значениями, разделенными запятыми.
Последовательно позиции:
- 1-я позиция — тип элемента сдвига. Может принимать значения:
- 0 — сам по себе (сам хранит информацию и сам двигается),
- 1 — «служка», берет информацию от босса. То есть этот элемент будет двигаться, а параметры сдвига берет из объекта более высокого уровня по иерархии, у которого значение типа элемента сдвига равно 2 («босс»)
- 2 — «босс», сам не двигается, хранит информацию для «служки» — объекта более низкого уровня внутри группы «босса», у которого тип элемента сдвига равен 1 («служка»)
- 3 — не подвижная часть в составе объекта типа «сам по себе»
- 2-я позиция — целое число — начальное время сдвига
- 3-я позиция — целое число — конечное время
- 4-я позиция — направление времени (меняется автоматически при открывании)
- 5, 6, 7-я позиции — вектор сдвига (x, y, z)
- 8, 9, 10, 11, 12, 13-я позиции — ось вращения (x1,y1,z1,x2,y2,z2)
- 14-я позиция — угол поворота в градусах
Атрибут $Cinema в новых версиях системы больше не используется и оставлен для совместимости. Рекомендуется использовать атрибуты, описанные ниже |
Описание атрибута $CinemaScr[править | править код]
Атрибут $CinemaScr — это Scratch атрибут со следующими данными. В этом атрибуте может быть несколько секций.
Секция Main:
- Control — Подчиненность объекта:
- 0 — сам по себе (содержит информацию о движении и сам же движется)
- 1 — подчиненный (берет информацию о движении от «босса»)
- 2 — босс (сам не двигается, хранит информацию о движении для «подчиненного»)
- 3 — неподвижный объект в составе объекта "сам по себе". Для такого объекта в этой секции других записей не требуется, как не требуется и других секций. Добавлено 19.02.2024 года.
- Beg_time — Общее время начала движения
- Fin_time — Общее время окончания движения
- Dir_time — Направление времени, или признак открытости/закрытости:
- 1 — объект «закрыт»,
- -1 — объект «открыт».
- MoveCount — Количество движений: поворотов и перемещений. Соответственно, количество следующих секций, посвященных каждому движению, должно равняться значению этого параметра
Секция Move<N> (<N> — число от 0 до MoveCount-1)
- LocalKey — Признак, нужно ли применять преобразование у подчиненного объекта:
- 0 — не нужно;
- 1 — нужно
- MoveBeg — Время начала движения <N>
- MoveEnd — Время окончания движения <N>
- MoveType — Тип движения:
- 0 — перемещение,
- 1 –— поворот
- Axe1X — Координата X первой точки оси вращения (при типе движения «поворот»)
- Axe1Y — Координата Y первой точки оси вращения (при типе движения «поворот»)
- Axe1Z — Координата Z первой точки оси вращения (при типе движения «поворот»)
- Axe2X — Координата X второй точки оси вращения (при типе движения «поворот»)
- Axe2Y — Координата Y второй точки оси вращения (при типе движения «поворот»)
- Axe2Z — Координата Z второй точки оси вращения (при типе движения «поворот»)
- Angle — Угол поворота в градусах (при типе движения «поворот»)
- MoveX — Координата X вектора перемещения (при типе движения «перемещение»)
- MoveY — Координата Y вектора перемещения (при типе движения «перемещение»)
- MoveZ — Координата Z вектора перемещения (при типе движения «перемещение»)
Пример атрибута $CinemaScr
Scratch Main Control=2 Beg_time=0 Fin_time=10 Dir_time=1 MoveCount=2 Move0 LocalKey=1 MoveBeg=0 MoveEnd=10 MoveType=1 Axe1X=418 Axe1Y=0 Axe1Z=104 Axe2X=418 Axe2Y=0 Axe2Z=102 Angle=110 Move1 LocalKey=1 MoveBeg=0 MoveEnd=10 MoveType=0 MoveX=5 MoveY=16 MoveZ=0
Описание атрибута $CinAsseGr[править | править код]
$CinAsseGr — это логический атрибут, значение которого роли не играет. Важен только сам факт его существования. Если атрибут назначен, то положение этого объекта будет определяться своим решателем независимо от других. То есть в модели могут быть несколько объектов и для расчета движения каждого объекта будут использоваться свой решатель. В противном случае будут использоваться решатель родительского (родительских) объектов.
Этот атрибут назначается на группу, члены которой имеют атрибут $CinemaAssembly, определяющие задачу перемещения.
Описание атрибута $CinemaAssembly[править | править код]
$CinemaAssembly — это строковый атрибут, который имеет 2 варианта записи.
1. Если на объекте есть только атрибут $CinemaAssembly, то положение этого объекта определяется решателем. В атрибуте записаны количество, типы и координаты точек для определения 2-х мерной модели в решателе.
Структура атрибута:
n, t1, x1, y1, z1, t2, x2, y2, z2...
- n — число точек
- ti — тип i-ой точки
- 0 — управляющая
- 1 — фиксированная
- 2 — зависимая
- xi, yi, zi — координаты i-ой точки
2. Если на объекте есть атрибуты $CinemaAssembly и $CinemaScr, значит этот объект является управляющим, и в его атрибуте $CinemaAssembly записаны координаты управляющей точки. Т.е. положение этого объекта (и управляющей точки) рассчитывается командой cinema, и потом передаётся в решатель, для определения положения зависимых объектов.
Структура атрибута:
1, -1, x, y, z
- 1, -1 — зарезервированные значения
- x, y, z — координаты управляющей точки
CinemaScr[править | править код]
Integer CinemaScr(Integer <Code>, array <Params>)
Функция формирует набор данных (Scratch) CinemaScr для объектов, для которых нужно сформировать динамическую визуализацию. Ниже расписаны различные коды функции <Code>
и параметры для этих кодов.
<Code>
=0
Инициализация набора параметров. Функция с этим кодом инициализирует Scratch и пишет туда начальную информацию. Содержимое массива <Params>
следующее:
<Params>[1]
— Тип объекта (управление подчиненностью):
- 0 — сам по себе (содержит информацию о движении и сам же движется)
- 1 — подчиненный (берет информацию о движении от «босса»)
- 2 — босс (сам не двигается, хранит информацию о движении для «подчиненного»),
<Params>[2]
— Начальное время
<Params>[3]
— Конечное время
Функция с этим кодом возвращает номер набора параметров. Этот номер в дальнейшем понадобится при закрытии набора параметров, записи информации о движении и записи набора параметров объекту
<Code>
=1
Запись информации о перемещении. Содержимое массива <Params>
следующее:
<Params>[1]
— Индекс набора параметров, которому нужно добавить информацию о перемещении. Возвращается функцией с кодом 0.
<Params>[2]
— Признак, нужно ли применять преобразование у подчиненного объекта:
- 0 — не нужно;
- 1 — нужно
<Params>[3]
— Время начала движения
<Params>[4]
— Время окончания движения
<Params>[5]
— Координата X вектора перемещения
<Params>[6]
— Координата Y вектора перемещения
<Params>[7]
— Координата Z вектора перемещения
Функция с этим кодом возвращает количество движений: поворотов и перемещений. То есть при каждом добавленном движении (вызове функции с кодами 1 или 2) общее число движений увеличивается
<Code>
=2
Запись информации о повороте. Содержимое массива <Params>
следующее:
<Params>[1]
— Индекс набора параметров, которому нужно добавить информацию о повороте. Возвращается функцией с кодом 0.
<Params>[2]
— Признак, нужно ли применять преобразование у подчиненного объекта:
- 0 — не нужно;
- 1 — нужно
<Params>[3]
— Время начала движения
<Params>[4]
— Время окончания движения
<Params>[5]
— Координата X первой точки оси вращения (при типе движения «поворот»)
<Params>[6]
— Координата Y первой точки оси вращения (при типе движения «поворот»)
<Params>[7]
— Координата Z первой точки оси вращения (при типе движения «поворот»)
<Params>[8]
— Координата X второй точки оси вращения (при типе движения «поворот»)
<Params>[9]
— Координата Y второй точки оси вращения (при типе движения «поворот»)
<Params>[10]
— Координата Z второй точки оси вращения (при типе движения «поворот»)
<Params>[11]
— Угол поворота в градусах (при типе движения «поворот»)
Функция с этим кодом возвращает количество движений: поворотов и перемещений. То есть при каждом добавленном движении (вызове функции с кодами 1 или 2) общее число движений увеличивается
<Code>
=999
Завершение сбора информации о динамической визуализации. Содержимое массива <Params>
следующее:
<Params>[1]
— Индекс набора параметров, который нужно завершить. Возвращается функцией с кодом 0.
Функция с этим кодом завершает сбор информации и закрывает набор параметров (Scratch
).