Книга: Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода
Объявление оператора и добавление его в меню
Объявление оператора и добавление его в меню
Операторы, которые нам до сих пор попадались, были простыми кнопками. В этой программе мы делаем более сложный оператор, который создаёт искривленный цилиндр.
Для вызова оператора нажмите Пробел и наберите "Add twisted cylinder"; Блендер предлагает сопоставляемые имена операторов во время набора. Цилиндр имеет несколько опций, которые появятся в области Tool props (ниже секции Tools), сразу после создания цилиндра. Их можно интерактивно модифицировать, и результат немедленно отобразится в 3D-виде.
Последняя часть скрипта регистрирует его. Вместо нажатия клавиши Пробел, теперь можно вызывать скрипт гораздо более удобным образом из подменю Add » Mesh. Если бы мы использовали append (добавить) вместо prepend
(предварять) в функции register()
, вызов появился бы внизу вместо верхнего меню.
#----------------------------------------------------------
# File twisted.py
#----------------------------------------------------------
import bpy, math
def addTwistedCylinder(context, r, nseg, vstep, nplanes, twist):
# Функция создания цилиндра
verts = []
faces = []
w = 2*math.pi/nseg
a = 0
da = twist*math.pi/180
for j in range(nplanes+1):
z = j*vstep
a += da
for i in range(nseg):
verts.append((r*math.cos(w*i+a), r*math.sin(w*i+a), z))
if j > 0:
i0 = (j-1)*nseg
i1 = j*nseg
for i in range(1, nseg):
faces.append((i0+i-1, i0+i, i1+i, i1+i-1))
faces.append((i0+nseg-1, i0, i1, i1+nseg-1))
me = bpy.data.meshes.new("TwistedCylinder")
me.from_pydata(verts, [], faces)
ob = bpy.data.objects.new("TwistedCylinder", me)
context.scene.objects.link(ob)
context.scene.objects.active = ob return ob
#
# Интерфейс пользователя
#
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()
- Панели и кнопки
- Планировка панели и несколько аргументов
- Панель свойств
- Использование свойств сцены для сохранения информации
- Опрос (Polling)
- Динамическое выпадающее меню
- Объявление оператора и добавление его в меню
- Модальный оператор
- Invoke (вызов) против execute (выполнения)
- Всплывающий диалог
- Диалоговое окно ошибки
- Ничего, кроме правды: поведение потребителей
- Роль товарной категории и установление цены
- Глава 7 Чего нужно опасаться при моделировании бизнес-процессов. Проектные риски моделирования бизнеспроцессов
- Категорийный менеджмент. Курс управления ассортиментом в рознице
- 6.3. Добавление фоновой музыки
- 7.4.2.4. Создание своего первого LiveCD
- 6.4. Рабочий лист Excel и его структурные элементы
- Кроссбраузерность вашего сайта
- 10.5. Транзакции и пути доступа меню
- 2.5.3. Настройки панели задач и меню Пуск
- 5. Операции внутреннего соединения.
- 7. Операция левого внешнего соединения.