Thomas Larsson - Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода
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
for m in range(20):
ob.layers[m] = layers[m]
return
def moveLayerOperator(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,2,0)
)
bpy.context.object.data.materials.append(mat)
# Затем перемещение его на новый слой
layers = 20*[False]
layers[n+11] = True
bpy.ops.object.move_to_layer(layers=layers)
return
def run():
# Создание нескольких материалов
red = bpy.data.materials.new('Red')
red.diffuse_color = (1,0,0)
green = bpy.data.materials.new('Green')
green.diffuse_color = (0,1,0)
blue = bpy.data.materials.new('Blue')
blue.diffuse_color = (0,0,1)
# Три метода перемещения объектов в новый слой
createOnLayer(red)
changeLayerData(green)
moveLayerOperator(blue)
# Выбор слоёв 14 - 20
scn = bpy.context.scene
bpy.ops.object.select_all(action='SELECT')
for n in range(13,19):
scn.layers[n] = True
# Отмена выбора слоёв 1 - 13, но только впоследствии.
# Похоже, по крайней мере один слой должен быть выбран всегда.
for n in range(0,13):
scn.layers[n] = False
# Отмена выбора слоя 16
scn.layers[15] = False
return
if __name__ == "__main__":
run()
ГруппыЭта программа показывает, как создавать группы, добавлять объекты в группы, и пустышки, которые дублируют группы. Мы добавляем четыре группы, четыре меш-объекта назначаются каждый в две группы, и четыре текстовых объекта назначаются каждый в единственную группу. Затем мы добавляем четыре пустышки, которые будут дубликатами (dupli-group) четырёх групп. Наконец пустышки перемещаются, так что каждая колонка содержит элементы в этой группе.
#----------------------------------------------------------
# File groups.py
# Create groups
#----------------------------------------------------------
import bpyimport mathutils
from mathutils
import Vector
# Слои
Display = 5
Build = 6
def setObject(name, mat):
ob = bpy.context.object
ob.name = name
ob.data.materials.append(mat)
return ob
# Перемещение объекта в данный слой.
def moveToLayer(ob, layer):
ob.layers[layer] = True
for n in range(20):
if n != layer:
ob.layers[n] = False
return
# Добавление объекта TextCurve в слое 13
def addText(string, loc):
tcu = bpy.data.curves.new(string+'Data', 'FONT')
text = bpy.data.objects.new(string+'Text', tcu)
tcu.body = string
tcu.align = 'RIGHT'
text.location = loc
bpy.context.scene.objects.link(text)
# Нужно изменить text.layers после того, как текст будет привязан к сцене,
# в противном случае изменение не сможет сработать. moveToLayer(text, Build)
return text
def run():
# Создание двух материалов
red = bpy.data.materials.new('RedMat')
red.diffuse_color = (1,0,0)
green = bpy.data.materials.new('GreenMat')
green.diffuse_color = (0,1,0)
# Позиции
origin = Vector((0,0,0))
dx = Vector((2,0,0))
dy = Vector((0,2,0))
dz = Vector((0,0,2))
# Размещение объектов на слой построения (Build)
layers = 20*[False]
layers[Build] = True
# Создание объектов
bpy.ops.mesh.primitive_cube_add(location=dz, layers=layers)
redCube = setObject('RedCube', red)
bpy.ops.mesh.primitive_cube_add(location=dx+dz, layers=layers)
greenCube = setObject('GreenCube', green)
bpy.ops.mesh.primitive_uv_sphere_add(location=2*dx+dz, layers=layers)
redSphere = setObject('RedSphere', red)
bpy.ops.mesh.primitive_uv_sphere_add(location=3*dx+dz, layers=layers)
greenSphere = setObject('GreenSphere', green)
# Создание текстов
redText = addText('Red', -dx)
greenText = addText('Green', -dx)
cubeText = addText('Cube', -dx)
sphereText = addText('Sphere', -dx)
# Создание групп
redGrp = bpy.data.groups.new('RedGroup')
greenGrp = bpy.data.groups.new('GreenGroup')
cubeGrp = bpy.data.groups.new('CubeGroup')
sphereGrp = bpy.data.groups.new('SphereGroup')
# Таблица членов групп
members = {
redGrp : [redCube, redSphere, redText],
greenGrp : [greenCube, greenSphere, greenText],
cubeGrp : [redCube, greenCube, cubeText],
sphereGrp : [redSphere, greenSphere, sphereText] }
# Привязка объектов к группам
for group in members.keys():
for ob in members[group]:
group.objects.link(ob)
# Список пустышек
Откройте для себя мир чтения на siteknig.com - месте, где каждая книга оживает прямо в браузере. Здесь вас уже ждёт произведение Thomas Larsson - Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода, относящееся к жанру Программирование. Никаких регистраций, никаких преград - только вы и история, доступная в полном формате. Наш литературный портал создан для тех, кто любит комфорт: хотите читать с телефона - пожалуйста; предпочитаете ноутбук - идеально! Все книги открываются моментально и представлены полностью, без сокращений и скрытых страниц. Каталог жанров поможет вам быстро найти что-то по настроению: увлекательный роман, динамичное фэнтези, глубокую классику или лёгкое чтение перед сном. Мы ежедневно расширяем библиотеку, добавляя новые произведения, чтобы вам всегда было что открыть "на потом". Сегодня на siteknig.com доступно более 200000 книг - и каждая готова стать вашей новой любимой. Просто выбирайте, открывайте и наслаждайтесь чтением там, где вам удобно.


