grp.add([v], w, 'REPLACE')
# Добавление меш-объекту модификатора арматуры, с использованием
# групп вершин, а не envelopes
mod = ob.modifiers.new('MyRigModif', 'ARMATURE')
mod.object = rig mod.use_bone_envelopes = False
mod.use_vertex_groups = True
return
def run(origin):
rig = createArmature(origin)
ob = createMesh(origin)
skinMesh(ob, rig)
# Перемещение и вращение кости Tip в режиме позы
bpy.context.scene.objects.active = rig
bpy.ops.object.mode_set(mode='POSE')
ptip = rig.pose.bones['Tip']
ptip.location = (0.2,-0.5,0)
rotMatrix = mathutils.Matrix.Rotation(0.6, 3, 'X')
ptip.rotation_quaternion = rotMatrix.to_quaternion()
return
if __name__ == "__main__":
run((0,0,0))
Атрибуты костей, которые влияют на изначальную позу арматуры (голова, хвост, поворот, родитель, использование соединения, и т.п.), доступны только в режиме редактирования (использование кости в 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
.
Этот скрипт копирует углы поворота
#----------------------------------------------------------
# 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'])
Три способа создания объектов
Примеры, которые мы изучали до сих пор, показывают, что объект можно создавать в Питоне с использованием различных парадигм.
• Метод данных тщательно подражает тому, как данные сохраняются непосредственно в Блендере.
Добавляются данные, и затем объект. Для меша:
me = bpy.data.meshes.new(meshName)
ob = bpy.data.objects.new(obName, me)
и для арматуры:
amt = bpy.data.armatures.new(amtname)
ob = bpy.data.objects.new(obname, amt)
• Объект привязывается к текущей сцене и делается активным. Дополнительно, мы можем сделать вновь созданный объект активным или выбранным. Этот код одинаков для всех типов объектов.
scn = bpy.context.scene
scn.objects.link(ob)
scn.objects.active = ob
ob.select = True
• Заполняются данные. В случае меша, мы добавляем списки вершин и граней.
me.from_pydata(verts, [], faces)
В случае арматуры, мы переключаем в режим редактирования и добавляем кость.
bpy.ops.object.mode_set(mode='EDIT')
bone = amt.edit_bones.new('Bone')