Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода - страница 28
>
># File invoke.py # from API documentation
>#----------------------------------------------------------
>import bpy
>class SimpleMouseOperator(bpy.types.Operator):
> """ Этот оператор показывает расположение мыши,
> эта строка используется для подсказки (tooltip) и документирования API
> """
> bl_idname = "wm.mouse_position"
> bl_label = "Mouse location"
> x = bpy.props.IntProperty()
> y = bpy.props.IntProperty()
> def execute(self, context):
> # Вместо печати в консоли, используется функция report,
> # таким образом, появляется сообщение в заголовке
> self.report({'INFO'}, "Mouse coords are %d %d" % (self.x, self.y))
> return {'FINISHED'}
> def invoke(self, context, event):
> self.x = event.mouse_x
> self.y = event.mouse_y
> return self.execute(context)
>#
># Панель в районе tools
>#
>class MousePanel(bpy.types.Panel):
> bl_label = "Mouse"
> bl_space_type = "VIEW_3D"
> bl_region_type = "TOOL_PROPS"
> def draw(self, context):
> self.layout.operator("wm.mouse_position")
>#
># Регистрация
># Нет действительной необходимости регистрировать класс, потому что
># это происходит автоматически, когда регистрируется модуль.
># С другой стороны, это не повредит.
>bpy.utils.register_class(SimpleMouseOperator)
>bpy.utils.register_module(__name__)
># Автоматически отображать позицию мыши при запуске
>bpy.ops.wm.mouse_position('INVOKE_DEFAULT')
># Другой тестовый вызов, на этот раз вызывается непосредственно
># execute() с предустановленными настройками.
>#bpy.ops.wm.mouse_position('EXEC_DEFAULT', x=20, y=66)
Если этот скрипт запустить, появится всплывающее окно, где вы можете задать некоторые свойства. После того, как вы выйдите из всплывающего окна перемещением мыши наружу, свойства будут выведены одновременно в окно информации и на консоль.
В подразделе "Планировка панели и несколько аргументов" мы использовали одну строку для передачи нескольких аргументов в оператор. Здесь мы используем глобальные переменные для той же цели.
><
>#----------------------------------------------------------
># File popup.py
># from API documentation
>#----------------------------------------------------------
>import bpy
>from bpy.props import *
>theFloat = 9.8765
>theBool = False
>theString = "Lorem ..."
>theEnum = 'one'
>class DialogOperator(bpy.types.Operator):
> bl_idname = "object.dialog_operator"
> bl_label = "Simple Dialog Operator"
> my_float = FloatProperty(name="Some Floating Point",
> min=0.0, max=100.0)
> my_bool = BoolProperty(name="Toggle Option")
> my_string = StringProperty(name="String Value")
> my_enum = EnumProperty(name="Enum value",
> items = [('one', 'eins', 'un'),
> ('two', 'zwei', 'deux'),
> ('three', 'drei', 'trois')])
> def execute(self, context):
> message = "%.3f, %d, '%s' %s" % (self.my_float,
> self.my_bool, self.my_string, self.my_enum)
> self.report({'INFO'}, message)
> print(message)
> return {'FINISHED'}
> def invoke(self, context, event):
> global theFloat, theBool, theString, theEnum
> self.my_float = theFloat
> self.my_bool = theBool
> self.my_string = theString
> self.my_enum = theEnum
> return context.window_manager.invoke_props_dialog(self)
>bpy.utils.register_class(DialogOperator)
># Вызов диалогового окна при загрузке
>bpy.ops.object.dialog_operator('INVOKE_DEFAULT')
>#
># Панель в районе tools
>#
>class DialogPanel(bpy.types.Panel):
> bl_label = "Dialog"
> bl_space_type = "VIEW_3D"
> bl_region_type = "UI"
> def draw(self, context):
> global theFloat, theBool, theString, theEnum
> theFloat = 12.345
> theBool = True
> theString = "Code snippets"
> theEnum = 'two'
> self.layout.operator("object.dialog_operator")
>#
># Регистрация bpy.utils.register_module(__name__)
Насколько я знаю, Блендер не имеет элегантных средств уведомления пользователя, что что-то пошло не так. Можно напечатать сообщение в окне терминала или в информационной панели, а затем вызвать исключение. Большинство современных приложений вместо этого открывают окно сообщения и выводят сообщение об ошибке. Следующий скрипт использует API Блендера для создания всплывающего окна диалога для уведомления пользователя.