Книга: Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода

Использование свойств сцены для сохранения информации

Использование свойств сцены для сохранения информации

Эта программа позволяет пользователю ввести информацию различного типа, которая затем посылается на панель кнопкам. Механизм заключается в использовании RNA-свойств, которые можно настроить с помощью панели и читать с помощью кнопки. Все типы данных Блендера могут иметь свойства. Глобальные свойства, которые непосредственно не связаны каким-либо специфическим объектом, может оказаться удобно хранить в текущей сцене. Заметим, однако, что они будут потеряны, если Вы переключитесь на новую сцену.


#----------------------------------------------------------
# File scene_props.py
#----------------------------------------------------------
import bpy
from bpy.props import *  
#
# Сохранение свойств в активной сцене
#
def initSceneProperties(scn):
    bpy.types.Scene.MyInt = IntProperty(
        name = "Integer",
        description = "Enter an integer")
    scn['MyInt'] = 17
    bpy.types.Scene.MyFloat = FloatProperty(
        name = "Float",
        description = "Enter a float",
        default = 33.33,
        min = -100,
        max = 100)
    bpy.types.Scene.MyBool = BoolProperty(
        name = "Boolean",
        description = "True or False?")
    scn['MyBool'] = True
    bpy.types.Scene.MyEnum = EnumProperty(
        items = [('Eine', 'Un', 'One'),
                 ('Zwei', 'Deux', 'Two'),
                 ('Drei', 'Trois', 'Three')],
        name = "Ziffer")
    scn['MyEnum'] = 2
    bpy.types.Scene.MyString = StringProperty(
        name = "String")
    scn['MyString'] = "Lorem ipsum dolor sit amet"
    return 
initSceneProperties(bpy.context.scene)  
#
# Меню в районе UI
#
class UIPanel(bpy.types.Panel):
    bl_label = "Property panel"
    bl_space_type = "VIEW_3D"
    bl_region_type = "UI" 
    def draw(self, context):
        layout = self.layout
        scn = context.scene
        layout.prop(scn, 'MyInt', icon='BLENDER', toggle=True)
        layout.prop(scn, 'MyFloat')
        layout.prop(scn, 'MyBool')
        layout.prop(scn, 'MyEnum')
        layout.prop(scn, 'MyString')
        layout.operator("idname_must.be_all_lowercase_and_contain_one_dot")  
#
# Кнопка выводит значения свойств в окне консоли.

class OBJECT_OT_PrintPropsButton(bpy.types.Operator):
    bl_idname = "idname_must.be_all_lowercase_and_contain_one_dot"
    bl_label = "Print props" 
    def execute(self, context):
        scn = context.scene printProp("Int: ", 'MyInt', scn)
        printProp("Float: ", 'MyFloat', scn)
        printProp("Bool: ", 'MyBool', scn)
        printProp("Enum: ", 'MyEnum', scn)
        printProp("String: ", 'MyString', scn)
        return{'FINISHED'}  
def printProp(label, key, scn):
    try:
        val = scn[key]
    except:
        val = 'Undefined'
    print("%s %s" % (key, val))  
# Регистрация
bpy.utils.register_module(__name__)

Оглавление книги


Генерация: 1.319. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз