Вход/Регистрация
Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода
вернуться

Larsson Thomas

Шрифт:

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

# Делает возможным иметь доступ к скрипту из меню Add > Mesh

#

def menu_func(self, context):

self.layout.operator("mesh.primitive_twisted_cylinder_add",

text="Twisted cylinder",

icon='MESH_TORUS')

def register:

bpy.utils.register_module(__name__)

bpy.types.INFO_MT_mesh_add.prepend(menu_func)

def unregister:

bpy.utils.unregister_module(__name__)

bpy.types.INFO_MT_mesh_add.remove(menu_func)

if __name__ == "__main__":

register

Модальный оператор

Следующий пример взят прямо из документации по API, как и последующие несколько примеров.

Модальный оператор определяет функцию

Operator.modal
которая при запуске обрабатывает события, пока не вернёт
'FINISHED'
или
'CANCELLED'
. Grab (сдвиг), Rotate (вращение), Scale (масштабирование) и Fly-Mode (режим полёта) - примеры модальных операторов. Они особенно полезны для интерактивных инструментов, ваш оператор может иметь собственное состояние, в котором клавиши переключают опции работы оператора.

Когда вызывается оператор в этом примере, он добавляет модального обработчика к себе с помощью вызова

context.window_manager.modal_handler_add(self)
. После этого активный объект продолжает перемещаться по плоскости XY, повторяя перемещения мыши. Для того, чтобы выйти, нажмите кнопку мыши или клавишу Esc.

Модальный метод обрабатывает три типа событий:

1. Перемещение мыши перемещает активный объект.

2. Нажатие ЛКМ для подтверждения и выхода в нормальный режим. Объект оставляется в своей новой позиции.

3. Нажатие ПКМ или клавиши Esc, чтобы отменить и выйти в нормальный режим. Объект возвращается в свою первоначальную позицию.

Важно, чтобы был некоторый способ выходить в нормальный режим. Если функция modal всегда возвращает 'RUNNING_MODAL', скрипт войдёт в бесконечный цикл, и Вам придётся перезапускать Блендер.

Модальный оператор определяет два специальных метода с именами

__init__
и
__del__
, которые вызываются, когда модальная операция начинается и прекращается, соответственно.

Запустите скрипт. Активный объект перемещается по плоскости XY при перемещении мыши. Скрипт также создает панель с кнопкой, нажатием на которую Вы также можете выполнить модальный оператор.

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

# File modal.py

# from API documentation

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

import bpy

class MyModalOperator(bpy.types.Operator):

bl_idname = "mine.modal_op"

bl_label = "Move in XY plane"

def __init__(self):

print("Start moving")

def __del__(self):

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'}

  • Читать дальше
  • 1
  • ...
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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