Потому выберите оба цилиндра, выделите в Channel Box все атрибуты, кроме translateY и scaleXYZ, и сначала заблокируйте их (Lock Selected), а затем спрячьте от греха подальше, то есть удалите из Channel Box (Hide Selected).

Посмотрим, как можно быстро добавить несколько звеньев в наш телескоп и при этом затратить минимум энергии на создание и редактирование новых expressions.

Сначала выделите все уже отлаженные команды в Expression Editor и скопируйте их в буфер обмена (Ctrl-c).

Выберите цилиндр р2 и сдублируйте его с помощью операции Edit=>Duplicate.

Появится новый цилиндр - с именем рЗ.

Откройте Expression Editor и нажмите кнопку Hew Expression.

Вставьте скопированный текст (Ctrl-v) в поле Expressions: .

Теперь его надо исправить так, чтобы он устанавливал зависимость третьего цилиндра от второго. То есть имя р2 надо исправить на рЗ, а имя р1 - на р2.

$scale=p2.scaleY+p3. scaleY;

if(p2.translateY-рЗ.translateY>$scale) { p3.translateY=p2.translateY-$scale; }

if(p2.translateY-рЗ.translateY<-$scale) { p3.translateY=p2.translateY+$scale;}

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

Теперь цилиндры двигаются как система вложенных поршней, и управляющим является первый цилиндр. Если такая модель вас устраивает, сохраните файл (telescope_v1 .та) и далее можете ограничиться только чтением.

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

Выберите в Expression Editor по очереди оба expressions и исправьте их текст следующим образом:

$scale=p1 .scaleY+p2. scaleY;

if(p1.translateY-p2.translateY>$scale) { p2.translateY=p1.translateY-$scale; }

if(p1 .translateY-p2.translateY<0) { p2.translateY=p1.translateY; }

$scale=p2.scaleY+p3.scaleY;

if(p2.translateY-p3.translateY>$scale) { p3.translateY=p2.translateY-$scale; }

if(p2.translateY-p3.translateY<0) { p3.translateY=p2.translateY; }

Теперь второй логический оператор проверяет, не опустился ли верхний цилиндр ниже нижнего, и если да, то «прицепляет» нижний к верхнему.

Сохраните сцену (telescope_v2.ma).

Если вам захочется покрутить антенну или прикрепить ее к радиоприемнику, то, очевидно, лучше всего объединить цилиндры в группу и ориентировать группу «хитрым» способом. Выберите все три цилиндра, сгруппируйте их: Edit=>Group.

Перетащите пивот группы в основание нижнего цилиндра.

Чтобы ловко вращать антенну за конец или основание, воспользуемся констрейнами. Выберите сначала локатор, затем только что созданную группу и выполните Constrain=>Aim Constraint.

Если параметры этой операции были заданы по умолчанию, цилиндры «лягут» на бок. Чтобы направить их на локатор, найдите в Channel Box атрибуты объекта group1_aimConstraint1 и задайте offsetZ= -90.

Подробнее про использование констрейнов читайте в соответствующем разделе.


⇐ вернуться назад | | далее ⇒