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

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

Жанры

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

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

Как я строил магическую империю 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