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

ЖАНРЫ

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

Larsson Thomas

Шрифт:

from bpy.props import *

#

# Оператор сообщения об ошибке. При вызове, всплывает

# диалоговое окно с переданным сообщением.

#

class MessageOperator(bpy.types.Operator):

bl_idname = "error.message"

bl_label = "Message"

type = StringProperty

message = StringProperty

def execute(self, context):

self.report({'INFO'}, self.message)

print(self.message)

return {'FINISHED'}

def invoke(self, context, event):

wm = context.window_manager

return wm.invoke_popup(self, width=400, height=200)

def draw(self, context):

self.layout.label("A message has arrived")

row = self.layout.split(0.25)

row.prop(self, "type")

row.prop(self, "message")

row = self.layout.split(0.80)

row.label("") row.operator("error.ok")

#

#
Кнопка ОК в диалоге ошибки

#

class OkOperator(bpy.types.Operator):

bl_idname = "error.ok"

bl_label = "OK"

def execute(self, context):

return {'FINISHED'}

#

# Открывает диалог выбора файла и начинает сканирование выбранного файла.

#

class ScanFileOperator(bpy.types.Operator):

bl_idname = "error.scan_file"

bl_label = "Scan file for return"

filepath = bpy.props.StringProperty(subtype="FILE_PATH")

def execute(self, context):

scanFile(self.filepath)

return {'FINISHED'}

def invoke(self, context, event):

context.window_manager.fileselect_add(self)

return {'RUNNING_MODAL'}

#

# Сканирование файлов. Если строка содержит слово "return",

# вызывается диалоговое окно ошибки и производится выход.

# Если достигнут конец файла, отображается другое сообщение.

#

def scanFile(filepath):

fp = open(filepath, "rU")

n = 1

for line in fp:

words = line.split

if "return" in words:

bpy.ops.error.message('INVOKE_DEFAULT',

type = "Error",

message = 'Found "return" on line %d' % n)

return

n += 1

fp.close

bpy.ops.error.message('INVOKE_DEFAULT',

 type = "Message",

 message = "No errors found in %d lines" % n)

return

#
Регистрация классов и автоматический запуск сканирования

bpy.utils.register_class(OkOperator)

bpy.utils.register_class(MessageOperator)

bpy.utils.register_class(ScanFileOperator)

bpy.ops.error.scan_file('INVOKE_DEFAULT')

Аддоны Блендера

До сих пор мы рассматривали только автономные скрипты, которые выполняются из окна текстового редактора. Для конечных пользователей более удобно, если скрипт — это аддон (add-on, надстройка) Блендера, который может быть включен в окне Пользовательских настроек. Также можно автоматически загружать скрипт каждый раз при запуске Блендера

Для того, чтобы скрипт был аддоном, он должен быть написан по-особому. Там должна быть структура

bl_info
в начале файла, а также в конце должны быть определены функции
register
(регистрации) и
unregister
(отмены регистрации). Кроме того, скрипт должен быть размещен в месте, в котором Блендер ищет аддоны при запуске. Оно включает в себя каталоги
addons
и
addons-contrib
, которые расположены в подкаталоге
2.57/scripts
каталога, в котором находится Блендер.

Прикрепление ключей формы

Этот скрипт может быть выполнен, как обычно, из окна текстового редактора. Тем не менее, он также может быть доступен как аддон Блендера. Информация аддона указывается в словаре

bl_info
в начале файла.

bl_info = {

'name': 'Shapekey pinning',

'author': 'Thomas Larsson',

'version': (0, 1, 2),

'blender': (2, 5, 7),

'api': 35774,

"location": "View3D > UI panel > Shapekey pinning",

'description': 'Pin and key the shapekeys of a mesh',

'warning': '',

'wiki_url': 'http://blenderartists.org/forum/showthread.php?193908',

'tracker_url': '',

"support": 'COMMUNITY',

"category": "3D View"}

Смысл большинства ключей в этом словаре очевиден.

Поделиться с друзьями: