Форум профессиональных мебельщиков PROMEBELclub
 
PROMEBELclub - Форум для мебельщиков: конструкторов, дизайнеров, мастеров, технологов и всех, кто имеет отношение к производству и изготовлению мебели. Программы для конструирования и дизайна мебели. Мебельная литература и обучающие пособия.
 
 

Вернуться   Форум профессиональных мебельщиков PROMEBELclub > Программы для мебельщиков > Программы для конструирования и дизайна мебели > Система БАЗИС > Базис-мебельщик. Скрипты

Меню

Маркет


беспроводные выключатели для мебели
Ответ
 
Опции темы Опции просмотра
Старый 13.10.2019, 00:28   #1
Скрипт Составной Анимации
Letos
Консультант
Регистрация: 28.06.2017
Сообщений: 555

Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Версия для печати Отправить по электронной почте
Letos Letos вне форума 13.10.2019, 00:28
Рейтинг: ()

Всем доброго времени суток. В 11 версии заработали асинхронные функции. Пара примеров с поворотом камеры и поворотом первого объекта в модели (габаритной рамки по умолчанию):

Поворот камеры

PHP код:
var timers = require('timers');
//var X = 30;
var Model.DS.Camera.AngleY;
function 
Rotate(){
  
//  Model.DS.Camera.AngleX = X;
    
Model.DS.Camera.AngleY Y;
}
const 
inc 0.5;
timers.setInterval(()=>{
    
Rotate();
    
+= inc;
}, 
20);
Action.Continue(); 
[свернуть]

Поворот первого объекта модели


PHP код:
var timers = require('timers');
var 
limits Model.Objects[0];
const 
incAngle 0.5;
timers.setInterval(()=>{
    
Undo.Changing(limits);
    
limits.RotateGCS(AxisYincAngle)
}, 
20);
Action.Continue();
Action.OnFinish = function(){
    
Action.Revert();

[свернуть]

И буквально пару дней назад я наткнулся на то, что не всем хватает стандартной базисной анимации:

Цитата

Цитата:
Сообщение от LeoAN Посмотреть сообщение
Для этого, похоже надо что-то как дерево анимации. В котором будет указано каких вложенных объектов анимация включается, каких с интервалом времени.
За пример возьмем стол, на нем находится корзина с яблоками.
1) Поднимаем стол под угол.
- Настройка анимации: поворот на 60 гр; 2 сек.
2) стол поднялся до угла 15 гр. Корзина с яблоками начала скользить.
- Настройка анимации: сдвиг расстояние х; 1,5 сек. ; 0,5 сек задержка.
3) Корзина соскользнула со стола.
- Настройка анимации: поворот 35 гр (60+35 примерно вертикаль + инерция); время- 1 сек.; Задержка 2 сек.
4) Корзина упала на пол.
- Настройка анимации: сдвиг расстояние у (до пола); время- 1 сек.; Задержка 2 сек.
5) Корзина упала.
- Настройка анимации: поворот; время- 1 сек.; Задержка 3 сек.
6) Яблоки разъезжаются.
- Настройка анимации: сдвиг - z; время- 1 сек.; Задержка 4 сек.
7)Яблоки катятся.
- Настройка анимации: поворот (вокруг своей оси)-1080 гр.; время- 1 сек.; Задержка 4 сек.

Или включение по отдельности.
Как с данной партой.
Парту мы можем регулировать по высоте.
Отрегулировали. Подняли.
Также мы можем регулировать наклон рабочей поверхности.
Т.е. в меню стоит галочка в свойствах анимации - "независимая анимация".

1-й пример - это зависимые процессы;
2-й пример - это независимые процессы.
[свернуть]


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

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

Последний раз редактировалось Letos; 13.10.2019 в 13:56.. Причина: Поправил скрипт поворота
Просмотров: 19046
Ответить с цитированием Вверх
14 пользователя(ей) сказали cпасибо:
Старый 13.10.2019, 12:03   #2
Uncle
VIP
 
Аватар для Uncle
 
Регистрация: 31.10.2009
Адрес: Рівне. УкраЇна
Сообщений: 10,580
Сказал(а) спасибо: 14,588
Поблагодарили 20,024 раз(а) в 6,492 сообщениях
Вес репутации: 5257
Uncle репутация неоспоримаUncle репутация неоспоримаUncle репутация неоспоримаUncle репутация неоспоримаUncle репутация неоспоримаUncle репутация неоспоримаUncle репутация неоспоримаUncle репутация неоспоримаUncle репутация неоспоримаUncle репутация неоспоримаUncle репутация неоспорима
По умолчанию

Цитата:
Сообщение от Letos Посмотреть сообщение
Поворот первого объекта модели
При завершении работы скрипта ("Esc" или "Отменить команду") габаритная рамка не возвращается в исходное положение, а остается смещённой на 0,5° относительно оси вращения "Y" :

__________________
Уж лучше беспокойство в сомнении, чем успокоенность в заблуждении. .
(Мандзони Алессандро)
------------------------------------
Троллей не кормлю...
Uncle вне форума   Ответить с цитированием Вверх
Старый 13.10.2019, 13:57   #3
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от Uncle Посмотреть сообщение
При завершении работы скрипта ("Esc" или "Отменить команду") габаритная рамка не возвращается в исходное положение, а остается смещённой на 0,5° относительно оси вращения "Y"
Поправил скрипт в шапке.
Letos вне форума   Ответить с цитированием Вверх
Пользователь сказал cпасибо:
Uncle (13.10.2019)
Старый 13.10.2019, 14:11   #4
Uncle
VIP
 
Аватар для Uncle
 
Регистрация: 31.10.2009
Адрес: Рівне. УкраЇна
Сообщений: 10,580
Сказал(а) спасибо: 14,588
Поблагодарили 20,024 раз(а) в 6,492 сообщениях
Вес репутации: 5257
Uncle репутация неоспоримаUncle репутация неоспоримаUncle репутация неоспоримаUncle репутация неоспоримаUncle репутация неоспоримаUncle репутация неоспоримаUncle репутация неоспоримаUncle репутация неоспоримаUncle репутация неоспоримаUncle репутация неоспоримаUncle репутация неоспорима
По умолчанию

Цитата:
Сообщение от Letos Посмотреть сообщение
Если есть какие-то предложения
Как бы для начала...
Возможно ли, используя вышеописанные новые возможности (асинхронность функций), реализовать ситуацию, обсуждаемую в теме с регулируемой партой, откуда, собственно, и была Вами взята цитата в шапке.
Цитата:
Сообщение от Uncle Посмотреть сообщение
В общем, видео...
__________________
Уж лучше беспокойство в сомнении, чем успокоенность в заблуждении. .
(Мандзони Алессандро)
------------------------------------
Троллей не кормлю...
Uncle вне форума   Ответить с цитированием Вверх
Старый 21.10.2019, 20:09   #5
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от Uncle Посмотреть сообщение
Как бы для начала...
Возможно ли, используя вышеописанные новые возможности (асинхронность функций), реализовать ситуацию, обсуждаемую в теме с регулируемой партой, откуда, собственно, и была Вами взята цитата в шапке.
Я немного пошарил и оказалось так - идея в моей голове была сумбурна и заморочена (самому реализовывать анимацию), а оказалось всё проще - у блока есть метод AnimateTo(), который принимает числовой параметр от 0 до 1. В связи с чем удалось написать маленький пример по анимации каждого блока по отдельности. При запуске скрипта в свойствах появляется список кнопок с именами блоков. По нажатию на кнопку отрабатывает анимация связанного блока (анимация вложенных не запускается).

Код v1


PHP код:
var blocks = [];

function 
MakeProps() {
    var 
props Action.Properties;
    for (var 
0blocks.lengthi++) {
        var 
block blocks[i];
        var 
props.NewButton(block.Name);
        
b.Tag i;
        
b.OnClick = function (btn) {
            var 
bl blocks[btn.Tag];
            if (
bl._anim)
                
bl.AnimateTo(0);
            else
                
bl.AnimateTo(1);
            
bl._anim = ! bl._anim;
        }
    };
}

/**
 * @param {List3D} list 
 */
function AddToAnimlist(list) {
    var 
anim = list.Animation;
    if (
anim && anim.Duration != 0) {
        
blocks.push(list);
    }
    for (var 
0< list.Counti++) {
        if (list.
Objects[i].List) {
            
AddToAnimlist(list.Objects[i]);
        }
    }
}
AddToAnimlist(Model);
MakeProps()

Action.Continue(); 
[свернуть]


Из-за неиспользования асинхронных функций, работает в ранних версиях БМ. Спешно проверил - работает в 8-11 версиях.
Letos вне форума   Ответить с цитированием Вверх
5 пользователя(ей) сказали cпасибо:
anb (25.03.2020), demanus (22.11.2019), Ovsyanicov (22.10.2019), sergio1982 (17.03.2020), Uncle (24.11.2019)
Старый 17.03.2020, 23:20   #6
sergio1982
Местный
 
Регистрация: 01.09.2019
Сообщений: 423
Сказал(а) спасибо: 52
Поблагодарили 479 раз(а) в 147 сообщениях
Вес репутации: 194
sergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царстве
По умолчанию

Спасибо! Добавил так:

Код:
    for (var i = 0; i < list.Count; i++) {
        if (list.Objects[i].List) {
            AddToAnimlist(list.Objects[i]);

            var bl = list.Objects[i];
            bl.AnimateTo(1);
            bl.AnimateTo(0);
        }
    }
Теперь могу любоваться составной анимацией в БМ8.

Добавлено через 20 минут


А не подскажете как сделать чтобы запускать анимацию выделенного блока, в идеале конечно просто блока под мышкой?
sergio1982 вне форума   Ответить с цитированием Вверх
Старый 18.03.2020, 10:22   #7
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от sergio1982 Посмотреть сообщение
А не подскажете как сделать чтобы запускать анимацию выделенного блока, в идеале конечно просто блока под мышкой?
Объект под курсором можно получить с помощью функции Action.Get3DObject(). Пример с выделением объекта под курсором по клику:
PHP код:
Action.OnClick = function(){
    var 
obj Action.Get3DObject();
    if (
obj){
        
obj.Selected true;
    }

Эта функция не выделяет блоки даже если отключено "Выделение элементов внутри блоков", но у объекта можно посмотреть свойство Owner - блок, в который он вложен. Если это не блок с анимацией, можно посмотреть его Owner и т.д. до нужного блока (либо верхнего уровня - модели).

Ну а выделенный объект получить ещё проще - Model.Selected.
Letos вне форума   Ответить с цитированием Вверх
Пользователь сказал cпасибо:
sergio1982 (18.03.2020)
Старый 18.03.2020, 23:41   #8
sergio1982
Местный
 
Регистрация: 01.09.2019
Сообщений: 423
Сказал(а) спасибо: 52
Поблагодарили 479 раз(а) в 147 сообщениях
Вес репутации: 194
sergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царстве
По умолчанию

Цитата:
можно посмотреть свойство Owner - блок, в который он вложен. Если это не блок с анимацией
В справке к 8ке не нашёл про "AnimateTo" и свойство "_anim".
Вопрос для меня, это - как определить что блок является анимацией?
sergio1982 вне форума   Ответить с цитированием Вверх
Старый 19.03.2020, 09:17   #9
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от sergio1982 Посмотреть сообщение
В справке к 8ке не нашёл про "AnimateTo" и свойство "_anim".
Вопрос для меня, это - как определить что блок является анимацией?
про "AnimateTo" нигде не написано, а "_anim" - введённая в скрипте переменная и к Базису отношения не имеет.

Определить, есть ли анимация, можно по свойству AnimationType - оно нулевое, если нет анимации. При анимации поворота возвращает 1, при анимации сдвига возвращает 2.
Letos вне форума   Ответить с цитированием Вверх
Старый 20.03.2020, 14:46   #10
sergio1982
Местный
 
Регистрация: 01.09.2019
Сообщений: 423
Сказал(а) спасибо: 52
Поблагодарили 479 раз(а) в 147 сообщениях
Вес репутации: 194
sergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царстве
По умолчанию

Цитата:
Сообщение от Letos Посмотреть сообщение
про "AnimateTo" нигде не написано
А как же вы это нашли, если не секрет?

Цитата:
Сообщение от Letos Посмотреть сообщение
"_anim" - введённая в скрипте переменная
А, да, пропустил. Не силён в JS.


А как понять что анимация применена.
То есть дверь находится в своём изначальном закрытом состоянии.
Например составной блок, я на одном из элементов нажму среднюю кнопки мыши, он сдвинется, потом применю скрипт выше, и всё поломается.
sergio1982 вне форума   Ответить с цитированием Вверх
Ответ

Нижняя навигация
Вернуться   Форум профессиональных мебельщиков PROMEBELclub > Программы для мебельщиков > Программы для конструирования и дизайна мебели > Система БАЗИС > Базис-мебельщик. Скрипты

Метки
анимация, скрипты

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Широкий составной фасад для Top Line XL Uncle Проектирую ШКАФ (гардероб, стеллаж, шифоньер, купе ...) 35 23.08.2018 00:06


Текущее время: 20:28. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
© 2007-2023 PROMEBEL

џндекс.Њетрика