Динамическая визуализация

Материал из K3-Macro

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-я позиция - угол поворота в градусах
Pluso.png Атрибут $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).