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"}
Смысл большинства ключей в этом словаре очевиден.
• name
: Название аддона.
• author
: Имя автора.
• version
: Версия скрипта.
• blender
: Версия Блендера.
• api
: Номер ревизии, с которой скрипт работает.
• location
: Где искать кнопки.
• description
: Описание, отображаемое в виде всплывающей подсказки и в документации.
• warning
: Предупреждающее сообщение. Если не пусто, в окне пользовательских настроек будет отображаться небольшой предупреждающий знак.
• wiki_url
: Ссылка на вики-страницу скрипта. Должна быть реальным Блендер-сайтом, но здесь мы ссылаемся на тему в форуме blenderartists.org.
• tracker_url
: Ссылка на трекер ошибок скрипта.
• support
: Официальная поддержка или сообщество
• category
: Категория скрипта, т.е. 3D View, Import-Export, Add Mesh, или Rigging. Соответствует категориям в окне Пользовательских настроек.
Многие элементы могут быть просто опущены, как мы увидим в других примерах ниже.
Второе требование к аддону — это определение функций register()
и unregister()
которые обычно располагаются в конце файла. register()
обычно вызывает оператор bpy.utils.register_module(__name__)
, в котором регистрируются все классы, определенные в файле. Она также может содержать несколько пользовательских задач инициализации. Скрипт этого примера также объявляет пользовательские RNA-свойства. Как мы видели в разделе RNA-свойства против ID-свойств, объявление необходимо здесь потому, что в противном случае логическое свойство будет отображаться как целое число.
def register():
initialize()
bpy.utils.register_module(__name__)
def unregister():
bpy.utils.unregister_module(__name__)
if __name__ == "__main__":
register()
Отмена регистрации аналогична регистрации. Последние строки делают возможным запуск скрипта в автономном режиме из окна Текстового редактора. Даже если пользователь никогда не будет выполнять скрипт из редактора, полезно иметь такую возможность при отладке.
Читать дальше