Книга: Введение в написание скриптов на Питоне для Блендера 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))

Оглавление книги


Генерация: 1.259. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз