Введение в написание скриптов на Питоне для Блендера 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)