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

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

Жанры

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

Larsson Thomas

Шрифт:

from bpy.props import * 

class MESH_OT_primitive_twisted_cylinder_add(bpy.types.Operator):

'''Add a twisted cylinder'''

bl_idname = "mesh.primitive_twisted_cylinder_add"

bl_label = "Add twisted cylinder"

bl_options = {'REGISTER', 'UNDO'}

radius = FloatProperty(name="Radius",

default=1.0, min=0.01, max=100.0)

nseg = IntProperty(name="Major Segments",

description="Number of segments for one layer",

default=12, min=3, max=256)

vstep = FloatProperty(name="Vertical step",

description="Distance between subsequent planes",

default=1.0, min=0.01, max=100.0)

nplanes = IntProperty(name="Planes",

description="Number of vertical planes",

default=4, min=2, max=256)

twist = FloatProperty(name="Twist angle",

description="Angle between subsequent planes (degrees)"
,

default=15, min=0, max=90)

location = FloatVectorProperty(name="Location")

rotation = FloatVectorProperty(name="Rotation")

#
Заметьте: вращение (Rotation) в радианах!

def execute(self, context):

ob = addTwistedCylinder(context, self.radius, self.nseg, self.vstep,

self.nplanes, self.twist)

ob.location = self.location

ob.rotation_euler = self.rotation

#context.scene.objects.link(ob)

#context.scene.objects.active = ob

return {'FINISHED'}

#

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

# Делает возможным иметь доступ к скрипту из меню 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):

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

Измена. (Не)любимая жена олигарха

Лаванда Марго
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. (Не)любимая жена олигарха

Хозяйка дома в «Гиблых Пределах»

Нова Юлия
Любовные романы:
любовно-фантастические романы
5.75
рейтинг книги
Хозяйка дома в «Гиблых Пределах»

Фиктивный брак

Завгородняя Анна Александровна
Фантастика:
фэнтези
6.71
рейтинг книги
Фиктивный брак

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

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

Держать удар

Иванов Дмитрий
11. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Держать удар

Флеш Рояль

Тоцка Тала
Детективы:
триллеры
7.11
рейтинг книги
Флеш Рояль

Драконий подарок

Суббота Светлана
1. Королевская академия Драко
Любовные романы:
любовно-фантастические романы
7.30
рейтинг книги
Драконий подарок

Зауряд-врач

Дроздов Анатолий Федорович
1. Зауряд-врач
Фантастика:
альтернативная история
8.64
рейтинг книги
Зауряд-врач

По дороге на Оюту

Лунёва Мария
Фантастика:
космическая фантастика
8.67
рейтинг книги
По дороге на Оюту

Мастер 5

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

Не лечи мне мозги, МАГ!

Ордина Ирина
Фантастика:
городское фэнтези
попаданцы
фэнтези
5.00
рейтинг книги
Не лечи мне мозги, МАГ!

Измена. Право на семью

Арская Арина
Любовные романы:
современные любовные романы
5.20
рейтинг книги
Измена. Право на семью

Крепость над бездной

Лисина Александра
4. Гибрид
Фантастика:
боевая фантастика
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Крепость над бездной

Неудержимый. Книга XXI

Боярский Андрей
21. Неудержимый
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Неудержимый. Книга XXI