Книга: Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода
Управляющие элементы (Drivers)
Управляющие элементы (Drivers)
Эта программа добавляет арматуру с одной управляющей костью и двумя управляемыми костями. Вращение Конца (tip) по Z управляется позицией по X управляющей кости. Вращение Базы (base) по Z управляется как позицией по Y, так и вращением по Z управляющей кости.
#----------------------------------------------------------
# File driver.py
#----------------------------------------------------------
import bpy
def run(origin):
# Создание арматуры и объекта
amt = bpy.data.armatures.new('MyRigData')
rig = bpy.data.objects.new('MyRig', amt)
rig.location = origin
amt.show_names = True
# Привязка объекта к сцене
scn = bpy.context.scene
scn.objects.link(rig)
scn.objects.active = rig
scn.update()
# Создание костей
bpy.ops.object.mode_set(mode='EDIT')
base = amt.edit_bones.new('Base')
base.head = (0,0,0)
base.tail = (0,0,1)
tip = amt.edit_bones.new('Tip')
tip.head = (0,0,1)
tip.tail = (0,0,2)
tip.parent = base
tip.use_connect = True
driver = amt.edit_bones.new('Driver')
driver.head = (2,0,0)
driver.tail = (2,0,1)
bpy.ops.object.mode_set(mode='POSE')
# Добавление управляющего элемента для вращения по Z кости Tip
# Tip.rotz = 1.0 - 1.0*x, где x = Driver.locx
fcurve = rig.pose.bones["Tip"].driver_add('rotation_quaternion', 3)
drv = fcurve.driver
drv.type = 'AVERAGE'
drv.show_debug_info = True
var = drv.variables.new()
var.name = 'x'
var.type = 'TRANSFORMS'
targ = var.targets[0]
targ.id = rig
targ.transform_type = 'LOC_X'
targ.bone_target = 'Driver'
targ.use_local_space_transform = True
fmod = fcurve.modifiers[0]
fmod.mode = 'POLYNOMIAL'
fmod.poly_order = 1
fmod.coefficients = (1.0, -1.0)
# Добавление управляющего элемента для вращения по Z кости Base
# Base.rotz = z*z - 3*y, где y = Driver.locy и z = Driver.rotz
fcurve = rig.pose.bones["Base"].driver_add('rotation_quaternion', 3)
drv = fcurve.driver
drv.type = 'SCRIPTED'
drv.expression = 'z*z - 3*y'
drv.show_debug_info = True
var1 = drv.variables.new()
var1.name = 'y'
var1.type = 'TRANSFORMS'
targ1 = var1.targets[0]
targ1.id = rig
targ1.transform_type = 'LOC_Y'
targ1.bone_target = 'Driver'
targ1.use_local_space_transform = True
var2 = drv.variables.new()
var2.name = 'z'
var2.type = 'TRANSFORMS'
targ2 = var2.targets[0]
targ2.id = rig
targ2.transform_type = 'ROT_Z'
targ2.bone_target = 'Driver'
targ2.use_local_space_transform = True
return
if __name__ == "__main__":
run((0,0,0))
- Действия (Actions) и управляющие элементы (drivers)
- 6.4. Рабочий лист Excel и его структурные элементы
- 4.4. Логические элементы и синтез логических схем
- 4.7 Структурные элементы SAN
- Вложение файлов в элементы списков
- Логические элементы
- 5.2. Основные приемы работы, элементы текстового редактора
- Правило 16. Группируйте связанные между собой элементы
- Элементы и
- Основные элементы меню Пуск
- Installing Proprietary Video Drivers
- Элементы xsl:choose, xsl:when, xsl:otherwise