Типы Ограничений
TrackTo
Стандартные атрибуты
Target (target object)
Track (axis to track)
Типы Ограничений
Floor
Стандартные атрибуты
Target (target object)
Типы Ограничений
StretchTo
Стандартные атрибуты
Target (target object)
Типы Ограничений
CopyLocation
Стандартные атрибуты
Copy (выбор компонента(тов) для копирования )
Заметьте, что возможно анимировать влияние ограничения (параметр influence), когда с Объектом связано IPO типа constraint.
Программирование ограничений
Блендер имеет много ограничений, которые Вы можете применить к объекту. Некоторые из них похожи на управляющие объекты (drivers), в том смысле, что они не ограничивают движение объекта, но могут копировать некоторые параметры, такие как вращение или расположение (location). С точки зрения разработчика, каждому объекту Блендера присущ атрибут constraints
, который является последовательностью объектов ограничений. В эту последовательность можно добавлять элементы и удалять их из неё. Также можно менять порядок элементов.
Метод
append(type)
Действие
Добавляет новое ограничение к объекту и возвращает ограничение
Пример
ob.constraints.append( Constraint.Type.TRACKTO)
Метод
remove(constraint)
Действие
Удаляет ограничение с объекта
Пример
ob.constraints.remove( ob.constraints[0])
Метод
moveUp(constraint)
moveDown(constraint)
Действие
Изменят позицию ограничения в списке ограничений
Пример
ob.constraints.moveDown( ob.constraints[0])
Метод
[]
Действие
Доступ к атрибутам ограничений
Пример
Con = ob.constraints[0]
Con[Constraint.Settings. TARGET] = other
Новые Ограничения не становятся экземплярами объектов посредством конструктора, но посредством вызова метода append()
атрибута constraints
вместе с переданным ему типом ограничения. на выходе append()
мы получаем новое Ограничение, параметры настроек которого уже можно изменять.
Программирование кривых IPO
IPO-каналы управляются из скриптов так же, как и ограничения, но они по своей сути более разнообразны, чем ограничения, поскольку существует много различных типов IPO-каналов, и некоторые из них, особенно текстурные каналы и ключи формы, нуждаются в специальной обработке. Про них существует отдельная глава (Глава 6: Ключи формы, IPO, и Позы), но различные варианты использования Питона для IPO - каналов будут показаны ниже.
Управляющие объекты (PyDrivers)
Есть много случаев, где мы хотели бы изменять некоторые свойства, относительно других свойств анимируемых объектов, но не всегда возможно зафиксировать эти «взаимоотношения», управляя одним IPO-каналом через другой. Так происходит потому, что такое отношение не всегда оказывается простой линейной зависимостью, например, движение поршня управляется круговым движением. Другой случай когда отношение не постоянно, например, свет, включающийся только тогда, когда выключатель находится в определенном положении.
В этих случаях отношения между объектами могут быть определены Питон-выражением или так называемым pydriver
. Управляющий объект принимает IPO-канал другого объекта как входной параметр и возвращает результат, управляющий IPO-каналом на текущем объекте. Поскольку эти выражения на Питоне имеют доступ к полному API Блендера, взаимоотношения могут быть действительно очень сложными.
Ограничения на Питоне (PyConstraints)
Там, где управляющие объекты могут использоваться, чтобы обходить пределы встроенных возможностей Блендера по управлению IPO-каналами, PyConstraints позволяют нам преодолеть трудности в ситуациях, где встроенные ограничения не достаточны. Например, невозможно ограничить положение одного объекта на поверхности другого, если в нем есть отверстия. Встроенные ограничения предлагают способы ограничивать расположение объекта не ниже чем расположен другой объект (ограничение floor
). Но если мы хотели бы, чтобы была возможность изменять позицию объекта ниже поверхности другого объекта в местах, где есть отверстия, мы должны запрограммировать такое ограничение самостоятельно. Как мы увидим, PyConstraints позволяют нам сделать точно это.