Вход/Регистрация
Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода
вернуться

Larsson Thomas

Шрифт:
empty-line/>

Этот код действительно несколько полезен для скрипта, который перенастраивает данные, полученные от захвата движения (motion capture). Для того, чтобы делать это правильно, нам нужно знать углы поворота roll. Тем не менее, их нельзя получить, если арматура связана с другим файлом через прокси. Для того, чтобы получить доступ к углу поворота rig.data.edit_bones[name].roll, арматуру нужно переключить в режим редактирования, который не доступен для связанных объектов. Но если скрипт выполнен в файле, где арматура определена, свойство Roll может быть доступно из связанного файла как rig.pose.bones[name].bone["Roll"].

#----------------------------------------------------------

# File bone_roll.py

#----------------------------------------------------------

import bpy

def createBoneRollProps(rig):

if rig.type != 'ARMATURE':

raise NameError("Object not an armature")

# Объект не является арматурой

bpy.context.scene.objects.active = rig

try:

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

editable = (len(rig.data.edit_bones) > 0)

except:

editable = False

rolls = {}

if editable:

for eb in rig.data.edit_bones:

rolls[eb.name] = eb.roll

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

for pb in rig.pose.bones:

pb.bone["Roll"] = rolls[pb.name]

else:

try:

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

except:

raise NameError("Armature is not posable. Create proxy")

# У арматуры не доступно позирование. Создайте прокси

for pb in rig.pose.bones:

try:

rolls[pb.name] = pb.bone["Roll"]

except:

raise NameError("Create roll props in asset file")

# Создайте свойство roll в файле актива

return rolls

rolls = createBoneRollProps(bpy.context.object)

for (bname, roll) in rolls.items:

print(" %16s %8.4f" % (bname, roll))

Интерфейс

Большинство скриптов должны взаимодействовать с пользователем каким-то способом. Скрипт может вызываться из меню или с помощью кнопки на панели, и он может получать входные данные посредством движков, переключателей, выпадающих меню или полей ввода. Элементы интерфейса пользователя реализованы как классы Питона. В этих заметках обсуждаются два типа элементов интерфейса:

• Панель является классом, производным от

bpy.types.Panel
. У неё есть свойства и функция draw, которая вызывается каждый раз, когда панель перерисовывается.

• Оператор является классом, производным от

bpy.types.Operator
. У него есть свойства, функция execute (выполнить), и необязательная функция invoke. Операторы можно зарегистрировать, чтобы они появились в меню. В частности, кнопка является оператором. Когда Вы нажимаете кнопку, вызывается функция execute.

Как панели, так и операторы должны быть зарегистрированы перед тем, как их начать использовать. Самый простой способ зарегистрировать все в файле — это закончить его с вызовом

bpy.utils.register_module(__name__).

Интерфейсная часть API, по видимому, менее стабильна, чем другие части, так что код в этом разделе может стать неработоспособным в будущих выпусках.

Панели и кнопки

Эта программа добавляет пять различных панелей к интерфейсу пользователя в разных местах. Каждая панель имеет имя и кнопку. Для всех кнопок используется один и тот же оператор, но текст на кнопке может быть изменён текстовым аргументом. Когда Вы нажимаете кнопку, Блендер выводит приветствие на терминале.

  • Читать дальше
  • 1
  • ...
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: