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

стр.

>

>self.layout.operator("hello.hello", text='Bonjour').country = "France"  


>#

># Меню в районе окна Properties, контекст материалов

>#

>class MaterialPanel(bpy.types.Panel):

>    bl_label = "Hello from Material context"

>    bl_space_type = "PROPERTIES"

>    bl_region_type = "WINDOW" bl_context = "material" 


>    def draw(self, context):

>    self.layout.operator("hello.hello", text='Ciao').country = "Italy"  


>#

># Кнопка Hello выводит сообщение в консоли

>#

>class OBJECT_OT_HelloButton(bpy.types.Operator):

>    bl_idname = "hello.hello"

>    bl_label = "Say Hello"

>    country = bpy.props.StringProperty()  


>    def execute(self, context):

>        if self.country == '':

>            print("Hello world!")

>        else:

>            print("Hello world from %s!" % self.country)

>        return{'FINISHED'}  


>#

># Регистрация

># Все панели и операторы должны быть зарегистрированы в Блендере; в противном

># случае они не появятся. Самый простой путь зарегистрировать всё в файле -

># с помощью вызова bpy.utils.register_module(__name__).

># 


>bpy.utils.register_module(__name__)


Планировка панели и несколько аргументов

Эта программа иллюстрирует, как организовать размещение объектов на панели. Когда скрипт выполнится, будет создана панель в области tool props, с кнопками, расположенными нетривиальным способом.



Сценарий также показывает один метод отсылания нескольких аргументов оператору. Класс OBJECT_OT_Button имеет два свойства, number (номер) и row (строка) и печатает величины этих свойств в окне терминала. Будучи целочисленными свойствами, они оба возвращают 0 по-умолчанию, если не заданы. Таким образом, если мы нажимаем кнопки 7, 8 и 23, скрипт выведет

>Row 0 button 7

>Row 3 button 0

>Row 0 button 0

Но что, если мы хотим задать свойства как number, так и row, то есть вызвать оператор с двумя аргументами? Это нельзя сделать непосредственно, но мы можем создать третье свойство loc, которое является строкой, и которое анализируется оператором, если не нуль. Если мы нажимаем кнопку 13, скрипт выведет

>Row 4 button 13

Этот метод можно также использовать, чтобы посылать более сложные структуры данных оператору. Кроме того, мы можем использовать глобальные переменные с этой целью, смотрите подраздел A popup dialog


>#----------------------------------------------------------

># File layout.py

>#----------------------------------------------------------

>import bpy 


># Планировка панели

>class LayoutPanel(bpy.types.Panel):

>    bl_label = "Panel with funny layout"

>    bl_space_type = "VIEW_3D"

>    bl_region_type = "TOOL_PROPS" 


>    def draw(self, context):

>    layout = self.layout


>    layout.label("First row")

>    row = layout.row(align=True)

>    row.alignment = 'EXPAND'

>    row.operator("my.button", text="1").number=1

>    row.operator("my.button", text="2", icon='MESH_DATA').number=2

>    row.operator("my.button", icon='LAMP_DATA').number=3


>    row = layout.row(align=False)

>    row.alignment = 'LEFT'

>    row.operator("my.button", text="4").number=4

>    row.operator("my.button", text="", icon='MATERIAL').number=5

>    row.operator("my.button", text="6", icon='BLENDER').number=6

>    row.operator("my.button", text="7", icon='WORLD').number=7


>    layout.label("Third row", icon='TEXT')

>    row = layout.row()

>    row.alignment = 'RIGHT'

>    row.operator("my.button", text="8").row=3

>    row.operator("my.button", text="9", icon='SCENE').row=3

>    row.operator("my.button", text="10", icon='BRUSH_INFLATE').row=3


>    layout.label("Fourth row", icon='ACTION')

>    row = layout.row() box = row.box()

>    box.operator("my.button", text="11", emboss=False).loc="4 11"

>    box.operator("my.button", text="12", emboss=False).loc="4 12"

>    col = row.column() subrow = col.row()

>    subrow.operator("my.button", text="13").loc="4 13"

>    subrow.operator("my.button", text="14").loc="4 14"

>    subrow = col.row(align=True)

>    subrow.operator("my.button", text="15").loc="4 15"

>    subrow.operator("my.button", text="16").loc="4 16"

>    box = row.box() box.operator("my.button", text="17").number=17

>    box.separator()

>    box.operator("my.button", text="18")

>    box.operator("my.button", text="19")