Книга: Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода

Режим редактирования против режима позы

Режим редактирования против режима позы

Атрибуты костей, которые влияют на изначальную позу арматуры (голова, хвост, поворот, родитель, использование соединения, и т.п.), доступны только в режиме редактирования (использование кости в ob.data.edit bones), тогда как атрибуты, которые применяются при позировании, требуют, чтобы арматура была в режиме позы (использование кости в ob.pose.bones). Насколько я знаю, единственный способ переключаться между режимами редактирования и позы — с помощью вызова операторов

bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.object.mode_set(mode='POSE')

Поскольку операторы воздействуют на активный объект, мы должны удостовериться, что активен правильный объект, устанавливая bpy.context.scene.objects.active.

Этот скрипт копирует углы поворота roll из исходной оснастки (имя объекта 'SrcRig') в целевую оснастку (имя объектна 'TrgRig'). Обе арматуры должны иметь одинаковое число костей с идентичными именами.


#----------------------------------------------------------
# File copy_roll.py
#----------------------------------------------------------
import bpy
def copyRolls(src, trg):
    rolls = {} bpy.context.scene.objects.active = src
    bpy.ops.object.mode_set(mode='EDIT')
    for eb in src.data.edit_bones:
        rolls[eb.name] = eb.roll
    bpy.ops.object.mode_set(mode='POSE')
    bpy.context.scene.objects.active = trg
    bpy.ops.object.mode_set(mode='EDIT')
    for eb in trg.data.edit_bones:
        oldRoll = eb.roll
        eb.roll = rolls[eb.name]
        print(eb.name, oldRoll, eb.roll)
    bpy.ops.object.mode_set(mode='POSE')
    return
objects = bpy.context.scene.objects
copyRolls(objects['SrcRig'], objects['TrgRig'])

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


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