Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода
Шрифт:
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
) Вместо вывода координат мыши в окно терминала, информация отправляется в информационную панель в верхнем правом углу. Это хорошее место для
#----------------------------------------------------------
# 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)
Поделиться:
Популярные книги
Прометей: повелитель стали
3. Прометей
Фантастика:
фэнтези
7.05
рейтинг книги
Гром над Академией Часть 3
4. Гром над миром
Фантастика:
фэнтези
5.25
рейтинг книги
Уязвимость
Любовные романы:
современные любовные романы
7.44
рейтинг книги
Войны Наследников
9. Десять Принцев Российской Империи
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Законы рода
1. Граф Берестьев
Фантастика:
фэнтези
боевая фантастика
аниме
5.00
рейтинг книги
«Три звезды» миллиардера. Отель для новобрачных
2. Три звезды
Любовные романы:
современные любовные романы
7.50
рейтинг книги
Мимик нового Мира 13
12. Мимик!
Фантастика:
боевая фантастика
юмористическая фантастика
рпг
5.00
рейтинг книги
Месть за измену
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Мастер 3
3. Мастер
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Не грози Дубровскому! Том 11
11. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Наваждение генерала драконов
3. Генералы драконов
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Огненный князь 4
4. Багряный восход
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Мужчина не моей мечты
1. Мужчина не моей мечты
Любовные романы:
любовно-фантастические романы
8.30
рейтинг книги
Золушка по имени Грейс
Фантастика:
фэнтези
8.63