Чтение онлайн

на главную

Жанры

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

Larsson Thomas

Шрифт:

print("Moved from (%d %d) to (%d %d)" %

(self.init_x, self.init_y, self.x, self.y))

def execute(self, context):

context.object.location.x = self.x / 100.0

context.object.location.y = self.y / 100.0

def modal(self, context, event):

if event.type == 'MOUSEMOVE':
# Применение

self.x = event.mouse_x

self.y = event.mouse_y

self.execute(context)

elif event.type == 'LEFTMOUSE':
#
Подтверждение

return {'FINISHED'}

elif event.type in ('RIGHTMOUSE', 'ESC'):
# Отмена

return {'CANCELLED'}

return {'RUNNING_MODAL'}

def invoke(self, context, event):

self.x = event.mouse_x

self.y = event.mouse_y

self.init_x = self.x

self.init_y = self.y

self.execute(context)

print(context.window_manager.modal_handler_add(self))

return {'RUNNING_MODAL'}

#

# Панель в районе tools

#

class MyModalPanel(bpy.types.Panel):

bl_label = "My modal operator"

bl_space_type = "VIEW_3D"

bl_region_type = "TOOLS"

def draw(self, context):

self.layout.operator("mine.modal_op")

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

bpy.utils.register_module(__name__) 

# Автоматически перемещает активный объект при запуске

bpy.ops.mine.modal_op('INVOKE_DEFAULT')

Invoke (вызов) против execute (выполнения)

Этот скрипт иллюстрирует разницу между invoke (вызывать) и execute (выполнять). Вызываемое (invoking) событие является аргументом функции

Operator.invoke
, который устанавливает два свойства целого типа x и y для положения мыши и вызывает функцию
Operator.execute
. Как альтернатива, мы можем выполнить (execute) оператор и явно установить
x
и
y
:
bpy.ops.wm.mouse_position(’EXEC_DEFAULT’, x=20, y=66
)

Вместо вывода координат мыши в окно терминала, информация отправляется в информационную панель в верхнем правом углу. Это хорошее место для

отображения краткого уведомления, так как пользователю не придется искать его в другом окне, тем более, что терминал/DOS-окно отображается не во всех версиях Blender. Однако длинные сообщения трудно вписываются в ограниченное пространство информационной панели.

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

# 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)

Поделиться:
Популярные книги

Как я строил магическую империю 4

Зубов Константин
4. Как я строил магическую империю
Фантастика:
боевая фантастика
постапокалипсис
аниме
фантастика: прочее
фэнтези
5.00
рейтинг книги
Как я строил магическую империю 4

Безумный Макс. Поручик Империи

Ланцов Михаил Алексеевич
1. Безумный Макс
Фантастика:
героическая фантастика
альтернативная история
7.64
рейтинг книги
Безумный Макс. Поручик Империи

Попаданка 3

Ахминеева Нина
3. Двойная звезда
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Попаданка 3

Муж на сдачу

Зика Натаэль
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Муж на сдачу

Призыватель нулевого ранга. Том 3

Дубов Дмитрий
3. Эпоха Гардара
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Призыватель нулевого ранга. Том 3

На границе империй. Том 10. Часть 5

INDIGO
23. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 5

Адвокат

Константинов Андрей Дмитриевич
1. Бандитский Петербург
Детективы:
боевики
8.00
рейтинг книги
Адвокат

На границе империй. Том 7

INDIGO
7. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
6.75
рейтинг книги
На границе империй. Том 7

Здравствуй, 1985-й

Иванов Дмитрий
2. Девяностые
Фантастика:
альтернативная история
5.25
рейтинг книги
Здравствуй, 1985-й

О, Путник!

Арбеков Александр Анатольевич
1. Квинтет. Миры
Фантастика:
социально-философская фантастика
5.00
рейтинг книги
О, Путник!

Чужбина

Седой Василий
2. Дворянская кровь
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Чужбина

Бестужев. Служба Государевой Безопасности. Книга четвертая

Измайлов Сергей
4. Граф Бестужев
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бестужев. Служба Государевой Безопасности. Книга четвертая

Локки 5. Потомок бога

Решетов Евгений Валерьевич
5. Локки
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Локки 5. Потомок бога

На границе империй. Том 10. Часть 4

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 4