Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода - [5]

Шрифт
Интервал

>    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.

Этот скрипт копирует углы поворота >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'])


Три способа создания объектов

Примеры, которые мы изучали до сих пор, показывают, что объект можно создавать в Питоне с использованием различных парадигм.


Метод данных

• Метод данных тщательно подражает тому, как данные сохраняются непосредственно в Блендере.

Добавляются данные, и затем объект. Для меша:

>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')

>bone.head = (0,0,0)

>bone.tail = (0,0,1)


• Наконец, обычно необходимо обновить модифицированные данные. В случае меша, мы явно вызываем функцию update.

>me.update()

У арматуры подразумевается обновление, когда мы переключаем её в режим объектов.

>bpy.ops.object.mode_set(mode='OBJECT')


Операторный Метод

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


• Добавляется объект с помощью оператора bpy.ops.object.add. Он автоматически заботится о нескольких вещах, которые мы должны были делать вручную в методе данных: он создает данные объекта (то есть меш или арматуру), привязывает объект к сцене, делает его активным и выбирает объект. С другой стороны, теперь мы должны извлечь объект и данные. Это просто, поскольку bpy.context.object всегда указывает на активный объект.

Чтобы добавить меш-объект, мы делаем

>bpy.ops.object.add(type='MESH')

>ob = bpy.context.object

>me = ob.data

и для добавления арматуры:

>bpy.ops.object.add(

>type='ARMATURE',

>enter_editmode=True,

>location=origin)

>ob = bpy.context.object

>amt = ob.data


• Как и в методе данных, объект нужно заполнить фактическими данными и обновить перед использованием. Для меша мы добавляем вершины и грани:

>me.from_pydata(verts, [], faces)

>me.update()

а для арматуры мы добавляем кость:

>bone = amt.edit_bones.new('Bone')

>bone.head = (0,0,0)

>bone.tail = (0,0,1)

>bpy.ops.object.mode_set(mode='OBJECT')

Заметьте, что нам не нужно явно входить в режим редактирования, поскольку арматура вошла в него уже при создании.


Метод примитивов

Если мы хотим сделать объект типа одного из примитивов, может существовать оператор, который создаёт примитив с желаемыми свойствами.


• Конус фактически аппроксимируется пирамидой.

Для создания меша пирамиды с 4 сторонами:

>bpy.ops.mesh.primitive_cone_add(

>vertices=4,

>radius=1,

>depth=1,

>cap_end=True)

тогда как следующий код добавляет арматуру с единственной костью:

>bpy.ops.object.armature_add()

>bpy.ops.transform.translate(value=origin)


• Как и в операторном методе, мы затем извлекаем вновь созданный объект из >bpy.context.object.

>ob = bpy.context.object

>me = ob.data


Сравнение

Метод примитивов самый простой, но он работает только в том случае, когда нужный примитив доступен. Даже в программе примера, он создает меш пирамиды, который отличается от созданных другими двумя методами: основание не является единственным четырёхугольником, а состоит из четырех треугольников с общей точкой в середине основания. Другие два метода более-менее эквивалентны.


Рекомендуем почитать
Изучаем Java EE 7

Java Enterprise Edition (Java EE) остается одной из ведущих технологий и платформ на основе Java. Данная книга представляет собой логичное пошаговое руководство, в котором подробно описаны многие спецификации и эталонные реализации Java EE 7. Работа с ними продемонстрирована на практических примерах. В этом фундаментальном издании также используется новейшая версия инструмента GlassFish, предназначенного для развертывания и администрирования примеров кода. Книга написана ведущим специалистом по обработке запросов на спецификацию Java EE, членом наблюдательного совета организации Java Community Process (JCP)


MFC и OpenGL

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Как функции, не являющиеся методами, улучшают инкапсуляцию

Когда приходится инкапсулировать, то иногда лучше меньше, чем большеЯ начну со следующего утверждения: Если вы пишете функцию, которая может быть выполнена или как метод класса, или быть внешней по отношению к классу, Вы должны предпочесть ее реализацию без использования метода. Такое решение увеличивает инкапсуляцию класса. Когда Вы думаете об использовании инкапсуляции, Вы должны думать том, чтобы не использовать методы.Удивлены? Читайте дальше.


Обработка событий в С++

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Программное обеспечение встроенных систем. Общие требования к разработке и документированию

Embedded system software. General requirements for development and documentationСтандарт подготовлен в развитие ГОСТ Р ИСО/МЭК 12207-99 «Информационная технология. Процессы жизненного цикла программных средств» с целью учета специфики разработки и документирования программного обеспечения встроенных систем реального времени.


Как пасти котов. Наставление для программистов, руководящих другими программистами

«Как пасти котов» – это книга о лидерстве и руководстве, о том, как первое совмещать со вторым. Это, если хотите, словарь трудных случаев управления IT-проектами. Программист подобен кошке, которая гуляет сама по себе. Так уж исторически сложилось. Именно поэтому так непросто быть руководителем команды разработчиков. Даже если вы еще месяц назад были блестящим и дисциплинированным программистом и вдруг оказались в роли менеджера, вряд ли вы знаете, с чего надо начать, какой выбрать стиль руководства, как нанимать и увольнять сотрудников, проводить совещания, добиваться своевременного выполнения задач.