Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода - страница 12
>
>import bpy
>def run(origin):
> # Создание арматуры и объекта
> amt = bpy.data.armatures.new('MyRigData')
> rig = bpy.data.objects.new('MyRig', amt)
> rig.location = origin
> amt.show_names = True
> # Привязка объекта к сцене
> scn = bpy.context.scene
> scn.objects.link(rig)
> scn.objects.active = rig
> scn.update()
> # Создание костей
> bpy.ops.object.mode_set(mode='EDIT')
> base = amt.edit_bones.new('Base')
> base.head = (0,0,0)
> base.tail = (0,0,1)
> tip = amt.edit_bones.new('Tip')
> tip.head = (0,0,1)
> tip.tail = (0,0,2)
> tip.parent = base
> tip.use_connect = True
> driver = amt.edit_bones.new('Driver')
> driver.head = (2,0,0)
> driver.tail = (2,0,1)
> bpy.ops.object.mode_set(mode='POSE')
> # Добавление управляющего элемента для вращения по Z кости Tip
> # Tip.rotz = 1.0 - 1.0*x, где x = Driver.locx
> fcurve = rig.pose.bones["Tip"].driver_add('rotation_quaternion', 3)
> drv = fcurve.driver
> drv.type = 'AVERAGE'
> drv.show_debug_info = True
> var = drv.variables.new()
> var.name = 'x'
> var.type = 'TRANSFORMS'
> targ = var.targets[0]
> targ.id = rig
> targ.transform_type = 'LOC_X'
> targ.bone_target = 'Driver'
> targ.use_local_space_transform = True
> fmod = fcurve.modifiers[0]
> fmod.mode = 'POLYNOMIAL'
> fmod.poly_order = 1
> fmod.coefficients = (1.0, -1.0)
> # Добавление управляющего элемента для вращения по Z кости Base
> # Base.rotz = z*z - 3*y, где y = Driver.locy и z = Driver.rotz
> fcurve = rig.pose.bones["Base"].driver_add('rotation_quaternion', 3)
> drv = fcurve.driver
> drv.type = 'SCRIPTED'
> drv.expression = 'z*z - 3*y'
> drv.show_debug_info = True
> var1 = drv.variables.new()
> var1.name = 'y'
> var1.type = 'TRANSFORMS'
> targ1 = var1.targets[0]
> targ1.id = rig
> targ1.transform_type = 'LOC_Y'
> targ1.bone_target = 'Driver'
> targ1.use_local_space_transform = True
> var2 = drv.variables.new()
> var2.name = 'z'
> var2.type = 'TRANSFORMS'
> targ2 = var2.targets[0]
> targ2.id = rig
> targ2.transform_type = 'ROT_Z'
> targ2.bone_target = 'Driver'
> targ2.use_local_space_transform = True
> return
>if __name__ == "__main__":
> run((0,0,0))
Другие типы данных
Эта программа добавляет текстовый объект в 3D-пространство и устанавливает некоторые атрибуты. Заметьте, что тип данных здесь используется TextCurve; тип Text применяется для текста в текстовом редакторе.
>#----------------------------------------------------------
># File text.py
>#----------------------------------------------------------
>import bpy
>import math from math
>import pi
>def run(origin):
> # Создание и именование объекта TextCurve
> bpy.ops.object.text_add(
> location=origin,
> rotation=(pi/2,0,pi))
> ob = bpy.context.object
> ob.name = 'HelloWorldText'
> tcu = ob.data
> tcu.name = 'HelloWorldData'
> # Атрибуты TextCurve
> tcu.body = "Hello, world"
> tcu.font = bpy.data.fonts[0]
> tcu.offset_x = -9
> tcu.offset_y = -0.25
> tcu.shear = 0.5
> tcu.size = 3
> tcu.space_character = 2
> tcu.space_word = 4
> # Унаследованные атрибуты Curve (Кривая)
> tcu.extrude = 0.2
> tcu.use_fill_back = True
> tcu.use_fill_deform = True
> tcu.use_fill_front = True
>if __name__ == "__main__":
> run((0,0,0))
Эта программа иллюстрирует три метода установки объекта на новом слое:
1. Создать его на правильном слое.
2. Создать его в слое 1, и изменить Object.layer.
3. Создать его в слое 1, и использовать оператор для его перемещения.
Также показано, как изменять видимость слоёв.
>#----------------------------------------------------------
># File layers.py
>#----------------------------------------------------------
>import bpy
>def createOnLayer(mat):
> for n in range(3, 8):
> # Создание n-угольника в слое n+11
> layers = 20*[False]
> layers[n+11] = True
> bpy.ops.mesh.primitive_circle_add(
> vertices=n,
> radius=0.5,
> fill=True,
> view_align=True,
> layers=layers,
> location=(n-3,0,0)
> )
> bpy.context.object.data.materials.append(mat)