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

стр.

>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


Сравнение

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

Примитив не обязан быть особенно простым; есть примитивы для создания меша обезьяны или человеческая оснастка. Но метод примитивов всегда ограничен заготовленными объектами.

Мы используем все три метода в примерах в этой заметке.



>#----------------------------------------------------------

># File objects.py

>#----------------------------------------------------------

>import bpy

>import mathutils

>from mathutils import Vector 


>def createMeshFromData(name, origin, verts, faces):

>    # Создание меша и объекта

>    me = bpy.data.meshes.new(name+'Mesh')

>    ob = bpy.data.objects.new(name, me)

>    ob.location = origin ob.show_name = True


>    # Привязка объекта к сцене, он становится активным

>    scn = bpy.context.scene

>    scn.objects.link(ob)

>    scn.objects.active = ob

>    ob.select = True


>    # Создание меша из полученных verts (вершин), faces (граней).

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

>    # Обновление меша с новыми данными

>    me.update()

>    return ob 


>def createMeshFromOperator(name, origin, verts, faces):

>    bpy.ops.object.add(

>        type='MESH',

>        enter_editmode=False,

>        location=origin)

>    ob = bpy.context.object

>    ob.name = name

>    ob.show_name = True

>    me = ob.data me.name = name+'Mesh'


>    # Создание меша из полученных verts (вершин), faces (граней).

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

>    # Обновление меша с новыми данными

>    me.update()

>    # Установка режима объектов

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

>    return ob 


>def createMeshFromPrimitive(name, origin):

>    bpy.ops.mesh.primitive_cone_add(

>        vertices=4,

>        radius=1,

>        depth=1,

>        cap_end=True,

>        view_align=False,

>        enter_editmode=False,

>        location=origin,

>        rotation=(0, 0, 0))


>    ob = bpy.context.object

>    ob.name = name

>    ob.show_name = True

>    me = ob.data

>    me.name = name+'Mesh'

>    return ob 


>def createArmatureFromData(name, origin):

>    # Создание меша и объекта

>    amt = bpy.data.armatures.new(name+'Amt')

>    ob = bpy.data.objects.new(name, amt)

>    ob.location = origin

>    ob.show_name = True


>    # Привязка объекта к сцене, он становится активным

>    scn = bpy.context.scene

>    scn.objects.link(ob)

>    scn.objects.active = ob

>    ob.select = True


>    # Создание одиночной кости

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

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

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

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

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

>    return ob 


>def createArmatureFromOperator(name, origin):

>    bpy.ops.object.add(

>        type='ARMATURE',

>        enter_editmode=True,

>        location=origin)

>    ob = bpy.context.object

>    ob.name = name

>    ob.show_name = True

>    amt = ob.data

>    amt.name = name+'Amt'


>    # Создание одиночной кости

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

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