Чтение онлайн

ЖАНРЫ

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

Larsson Thomas

Шрифт:

# Добавление управляющего элемента для вращения по 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)

return

def changeLayerData(mat):

for n in range(3, 8):

# Создание n-угольника в слое 1

bpy.ops.mesh.primitive_circle_add(

vertices=n,

radius=0.5,

fill=True,

view_align=True,

location=(n-3,1,0)

)

bpy.context.object.data.materials.append(mat)

# Затем перемещение его на новый слой

ob = bpy.context.object

ob.layers[n+11] = True

# Удаление его из других слоев.

layers = 20*[False]

layers[n+11] = True

Поделиться с друзьями: