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

            for area in scrn.areas:

                if area.type == 'VIEW_3D':

                    for space in area.spaces:

                        if space.type == 'VIEW_3D':

                            space.viewport_shade = 'SOLID'

                            reg = space.region_3d

                            reg.view_perspective = 'CAMERA' break

    return 


def run():

    setRenderSettings()

    setDefaultCameraView()

    # стартует анимация, к несчастью в старом виде.

    bpy.ops.screen.animation_play(reverse=False, sync=False)

    return


if __name__ == "__main__":

    run()



Свойства (Properties)

RNA-свойства против ID-свойств

В Блендере есть два различных типа свойств: ID-свойства и RNA-свойства. RNA-свойства расширяют определение структуры данных. Они должны быть объявлены до того, как будут использоваться.


Я потратил некоторое время на выяснение того, как же расшифровывается и что означает аббревиатура RNA для программирования на Питоне в Блендере. Может быть, я был недостаточно настойчив в поисках, но всё, что я нашел — это РНК, Рибонуклеиновая кислота. Разработчики применили химико-биологическую метафору для обозначения реальных структур данных на языке С (DNA, в переводе ДНК) и соответствующих им структур на Питоне (RNA, в переводе РНК). С понятием ID, думаю все и так знакомы, это сокращение слова Идентификатор. - прим. пер.


bpy.types.Object.myRnaInt = bpy.props.IntProperty(

    name = "RNA int",

    min = -100,

    max = 100,

    default = 33)

Как только RNA-свойства были объявлены, они будут доступны через точечный синтаксис:

cube.myRnaInt = -99

После декларации RNA-свойства myRnaInt расширяет определение структуры данных Object, каждый объект будет иметь это свойство.

ID-cвойство добавляется к единственному блоку данных, не влияя на другие данные того же самого типа. Ему не нужна какая-либо предварительная декларация, но оно автоматически определяется при присвоении, напр.

cube.data["MyIdInt"] = 4711

ID-свойства могут только быть целыми, вещественными, и строками; другие типы автоматически будут преобразованы. Следовательно, строка

cube.data["MyIdBool"] = True

определяет целое ID-свойство, а не логическое.


Не знаю, как в предыдущих версиях, а в 2.57 вполне можно определять списки — прим. пер.


Свойства сохраняются в blend-файле, но декларации свойств — нет.


Вот скрипт, который создает три меша, назначает различные свойства и печатает их величины в консоли.


#----------------------------------------------------------

# File properties.py

#----------------------------------------------------------

import bpy

from bpy.props import *


# Очистка сцены и создание нескольких объектов

bpy.ops.object.select_by_type(type='MESH')

bpy.ops.object.delete()

bpy.ops.mesh.primitive_cube_add(location=(-3,0,0))

cube = bpy.context.object

bpy.ops.mesh.primitive_cylinder_add(location=(0,0,0))

cyl = bpy.context.object

bpy.ops.mesh.primitive_uv_sphere_add(location=(3,0,0))

sphere = bpy.context.object


# Определение RNA-свойства для каждого объекта

bpy.types.Object.myRnaInt = IntProperty(

    name = "RNA int",

    min = -100, max = 100,

    default = 33) 


bpy.types.Object.myRnaFloat = FloatProperty(

    name = "RNA float",

    default = 12.345,

    min = 1, max = 20)  


bpy.types.Object.myRnaString = StringProperty(

Перейти на страницу:

Похожие книги