Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода - страница 13
>
> 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)