KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программирование » Thomas Larsson - Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода

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

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн 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)


    # Список пустышек

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*