Написание скриптов для Blender 2.49
Шрифт:
Метод
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
Новые Ограничения не становятся экземплярами объектов посредством конструктора, но посредством вызова метода
Программирование кривых IPO
IPO-каналы управляются из скриптов так же, как и ограничения, но они по своей сути более разнообразны, чем ограничения, поскольку существует много различных типов IPO-каналов, и некоторые из них, особенно текстурные каналы и ключи формы, нуждаются в специальной обработке. Про них существует отдельная глава (Глава 6: Ключи формы, IPO, и Позы), но различные варианты использования Питона для IPO - каналов будут показаны ниже.
Управляющие объекты (PyDrivers)
Есть много случаев, где мы хотели бы изменять некоторые свойства, относительно других свойств анимируемых объектов, но не всегда возможно зафиксировать эти «взаимоотношения», управляя одним IPO-каналом через другой. Так происходит потому, что такое отношение не всегда оказывается простой линейной зависимостью, например, движение поршня управляется круговым движением. Другой случай когда отношение не постоянно, например, свет, включающийся только тогда, когда выключатель находится в определенном положении.
В этих случаях отношения между объектами могут быть определены Питон-выражением или так называемым
Ограничения на Питоне (PyConstraints)
Там, где управляющие объекты могут использоваться, чтобы обходить пределы встроенных возможностей Блендера по управлению IPO-каналами, PyConstraints позволяют нам преодолеть трудности в ситуациях, где встроенные ограничения не достаточны. Например, невозможно ограничить положение одного объекта на поверхности другого, если в нем есть отверстия. Встроенные ограничения предлагают способы ограничивать расположение объекта не ниже чем расположен другой объект (ограничение
Поскольку все вступительные замечания позади, мы наконец снова можем вернуться к программированию в следующем абзаце.
Установка времени - один управляет всеми
Как использовать часы, если невозможно установить время удобным способом? Вместо перемещения каждой стрелки часов отдельно, мы хотели бы поворачивать единственную кнопку, чтобы перемещать обе стрелки — большую (минутную) и маленькую (часовую), причем (очевидно) часовая стрелка должна перемещаться в двенадцать раз медленнее минутной.
Поэтому, мы должны определить объект-кнопку (которую мы скорее всего не будем визуализировать), для управления вращением костей в стрелках часов.
Чтобы настроить ведомые каналы, выполним шаги:
1. В окне 3D View, выберите объект
2. В окне редактора IPO-Кривых удостоверьтесь что выбран тип IPO – object. Справа вы увидите список IPO-каналов. Выберите RotZ, щелкнув на нем левой кнопкой мышки.
3. Выберите Curve | Transform Properties. В появившемся окне нажмите на кнопку Add Driver.
4. Не закрывая Transform Properties, выберите Curve | Insert 1:1 mapping и затем щелкните по Default one-to-one mapping. В редакторе IPO появится прямая светло-голубая линия.
5. В окне Transform Properties, нажмите на изображение светло-зеленого питона. Изображение станет темно-зеленым, и теперь возможно редактировать выражение pydriver в смежной текстовой области. Введите туда следующий код:
Вот и все! Теперь, если вращать кнопку вокруг оси Z, большая стрелка следует примеру. Все же pydriver– выражение действительно нуждается в некотором разъяснении. Выделенная часть является движком (driver) - канал объекта (object channel), обеспечивающий входные данные для управления IPO-каналом.