Разбор правил формирования атрибутов трансформации элементов конструкции для имитации открывания/закрывания дверок, ящиков и т.п.
Документация на функционал расположена на страничке Динамическая визуализация (макро)
wiki)
Не самый простой случай с линейным перемещением
Судя по документации, что бы получить правильный результат трансформации надо:
- присвоить группе или можно её назвать основному объекту (BOSS) два атрибута $CinemaScr, $CinAsseGr
- Внутри группы, подчиненным объектам, присвоить атрибуты $CinemaAssembly с указанием типов (управляющая, зависимая, фиксированная) точек с какими то там координатами.
Создадим примитивный поршень, который будет совершать поступательное и возвратное движение. Примерно такой, как изображен на рисунке.
Соберем в группу прямоугольник со штоком. Это будет Управляющий объект. с управляющей точкой с координатами 0, 40, -20. Присвоим этой группе (поршень со штоком) атрибут $CinemaAssembly и $CinemaScr Поскольку это управляющий объект, а именно этот тип объекта задаёт движение всех зависимых.
- Создадим Управляющий объект Поршень со штоком
Используем меню К3/Структ.оп./Группа/Создать
Или через командную строку набираем на клавиатуре:
group указываем шток и прямоугольник и жмем правую кнопку мыши выбираем закончить. Присвоим ему атрибуты $CinemaAssembly и $CinemaScr
Поскольку, это управляющий объект, то значения атрибутов у него особенные. Для $CinemaAssembly используем второй вариант записи (См.документацию)
Если на объекте есть атрибуты $CinemaAssembly и $CinemaScr, значит этот объект является управляющим, и в его атрибуте $CinemaAssembly записаны координаты управляющей точки. т.е. положение этого объекта (и управляющей точки) рассчитывается командой cinema, и потом передаётся в решатель, для определения положения зависимых объектов.
Структура атрибута:
1, -1, x, y, z
1, -1 - зарезервированные значения
x, y, z - координаты управляющей точки
В нашем случае $CinemaAssembly получается 1,-1,0,40,-20
Второй атрибут уже текстовый. Это так называемый Scrath. Что это такое можно почитать на страничке документации.
$CinemaScr сложнее и проще одновременно.
Шапка у него стандартная Scratch
Далее имя секции Main
LocalKey - Признак, нужно ли применять преобразование у подчиненного объекта: 1-нужно
Control - Подчиненность объекта: 1 - подчиненный (берет информацию о движении от «босса»)
Beg_time - Общее время начала движения
Fin_time - Общее время окончания движения
MoveCount - Количество движений: поворотов и перемещений.
2. Для 2-х рычагов определяем $CinemaAssembly
Соберем для наглядности 1 окружность и 1 линию в группу и назовем это рычаг.
Получим два рычага. 3-й элемент будет неподвижным.
По аналогии с поршнем вызываем group и указываем линию и окружность входящую в рычаг.
Повторяем еще два раза.
Структура сцены
3-й элемент неподвижный, поэтому ему ничего не присваиваем.
1-й рычаг приобретает $CinemaAssembly 1-го варианта у него две точки в подчинении.
Одна фиксированная( тип-1) и вторая зависимая (тип-2)
Структура атрибута:
n, t1, x1, y1, z1, t2, x2, y2, z2...
n - число точек
ti - тип i-ой точки
0 - управляющая
1 - фиксированная
2 - зависимая
xi, yi, zi - координаты i-ой точки
2,1,0,20,0,2,0,30,40
Второму рычагу аналогично присваиваем строку из управляющей и зависимой точки
2,0,0,40,-20,2,0,30,40
Заметно, что у них есть одна общая зависимая точка 0,30,40
В отличии от первого рычага вместо фиксированной, вторая точка управляющая.
- Теперь всё это(поршень, 2 рычага и третий неподвижный) собираем в группу и назначаем этой группе атрибуты $CinemaScr, $CinAsseGr
Scratch
Main
Control=2
Beg_Time=0
Fin_Time=10
Dir_Time=1
MoveCount=1
Move0
LocalKey=1
MoveBeg=0
MoveEnd=10
MoveType=0
MoveX=0
MoveY=25
MoveZ=0
Это содержимое $CinemaScr. Описано задание решателю сдвинуть уравляющую точку на 25 мм по оси Y
На картинке показан исходный и финальный момент сдвига.
Похожий на KLOK механизм подъемный/откидной (ДСП) из МДМ
Страничка механизма на сайте МДМ Судя по описанию на сайте МДМ этот механизм реализует 5 вариантов установки.
- 3 открывания вверх
- 2 открывания вниз
Так что поле для деятельности велико. Надо как то реализовать вариантность установки и визуализации открывания.
В Механизме есть ещё два подчиненных рычага.
Нижний обладает способностью вращаться вокруг оси зафиксированного кронштейна. У этого кронштейна нет никаких атрибутов и поэтому он вместе с "Боссом" никуда не шевелится. Верхний связан с кронштейном, который крепится к фасаду и осуществляет сложное поворотное движение.
Это одна номенклатурная единица, которая может быть установлена пятью различными способами. Кроме того, в зависимости от веса дверки может ставиться два или один механизм.
Начнем не спеша с разбора и моделирования кинематики.
Представим вертикальный фасад и верхнюю панель , что бы было понятно, что-как и почему.
Начнем с варианта 90.
К сожалению на схеме нет размеров осей, поэтому постараемся определить их сами.
Вот что в итоге вышло у меня. Думаю, что для моделирования кинематики достаточно.
Для простоты описания точек смещаем всё это в ГСК точкой на фасаде напротив будущей управляющей точки (0) 0,12,0.
Нижний кронштейн не движется ему ничего не присваиваем.
Нижний рычаг (фиолетовый) содержит фиксированную точку (1) 0,12,-76
Оба рычага содержат зависимую точку (2) 0,110,-38
Верхний рычаг (синий) содержит управляющую точку (0) 0,12,0
Присваиваем рычагам $CinemaAssembly:
- Нижнему 2,1,0,12,-76,2,0,110,-38
- Верхнему 2,0,0,12,0,2,0,110,-38
Верхнему кронштейну $CinemaAssembly и $CinemaScr
Поскольку это управляющий объект пишем в него:
- $CinemaAssembly 1,-1,0,12,0
- $CinemaScr
- Scratch
Main
Control=1
Собираем всё в группу и присваиваем группе $CinemaScr, $CinAsseGr
$CinemaScr
Scratch
Main
Control=2
Beg_time=0
Fin_time=1000
Dir_time=1
MoveCount=2
Move0
LocalKey=1
MoveBeg=0
MoveEnd=1000
MoveType=1
Axe1X=0
Axe1Y=0
Axe1Z=106
Axe2X=2
Axe2Y=0
Axe2Z=106
Angle=-90
Move1
LocalKey=1
MoveBeg=0
MoveEnd=1000
MoveType=0
MoveX=0
MoveY=0
MoveZ=-14
Для плавности работы назначаю 1000 мС для Fin_time и MoveEnd.
Два движения MoveCount=2
Первое движение поворот MoveType=1
Угол открывания -90 (по часовой стрелке) вокруг оси с точками (0, 0, 106) (2, 0, 106)
Второе движение перемещение MoveType=0 по оси Z -14 мм
Результат описания движения.
Для наглядности, добавил прямоугольник в состав верхнего кронштейна, который являтся Управляющим объектом
Обратите внимание, как внутренний угол опускается и дверь открывается в одной плоскости с верхней панелью.
Но петля обычно работает для панелей (фасадов) толщиной до 25 мм поэтому второе движение MoveZ= должно быть скорее -25 мм, вместо -14