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

на главную - закладки

Жанры

Введение в написание скриптов на Питоне для Блендера 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)

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

Прометей: повелитель стали

Рави Ивар
3. Прометей
Фантастика:
фэнтези
7.05
рейтинг книги
Прометей: повелитель стали

Гром над Академией Часть 3

Машуков Тимур
4. Гром над миром
Фантастика:
фэнтези
5.25
рейтинг книги
Гром над Академией Часть 3

Уязвимость

Рам Янка
Любовные романы:
современные любовные романы
7.44
рейтинг книги
Уязвимость

Войны Наследников

Тарс Элиан
9. Десять Принцев Российской Империи
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Войны Наследников

Законы рода

Flow Ascold
1. Граф Берестьев
Фантастика:
фэнтези
боевая фантастика
аниме
5.00
рейтинг книги
Законы рода

«Три звезды» миллиардера. Отель для новобрачных

Тоцка Тала
2. Три звезды
Любовные романы:
современные любовные романы
7.50
рейтинг книги
«Три звезды» миллиардера. Отель для новобрачных

Мимик нового Мира 13

Северный Лис
12. Мимик!
Фантастика:
боевая фантастика
юмористическая фантастика
рпг
5.00
рейтинг книги
Мимик нового Мира 13

Месть за измену

Кофф Натализа
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Месть за измену

Мастер 3

Чащин Валерий
3. Мастер
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Мастер 3

Не грози Дубровскому! Том 11

Панарин Антон
11. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Не грози Дубровскому! Том 11

Наваждение генерала драконов

Лунёва Мария
3. Генералы драконов
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Наваждение генерала драконов

Огненный князь 4

Машуков Тимур
4. Багряный восход
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Огненный князь 4

Мужчина не моей мечты

Ардова Алиса
1. Мужчина не моей мечты
Любовные романы:
любовно-фантастические романы
8.30
рейтинг книги
Мужчина не моей мечты

Золушка по имени Грейс

Ром Полина
Фантастика:
фэнтези
8.63
рейтинг книги
Золушка по имени Грейс