Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода
Шрифт:
bpy.utils.unregister_module(__name__)
bpy.types.INFO_MT_file_import.remove(menu_func)
if __name__ == "__main__":
try:
unregister
except:
pass
register
Многофайловые пакеты
Пакеты — это способ структурирования
A.B
определяет подмодуль с именем B
в пакете с именем A
. Точно так же как использование модулей спасает авторов различных модулей от необходимости беспокоиться о существовании совпадающих глобальных имен переменных, использование точечной нотации имен модулей спасает авторов многомодульных пакетов от необходимости волноваться о совпадающих именах модулей. За дополнительной информацией о пакетах Питона, пожалуйста, обратитесь к документации на пакеты Питона Каждый пакет должен содержать файл
__init__.py
. Этот файл необходим, чтобы заставить Питон относиться к каталогу, как к содержащему пакет, это сделано для предотвращения у каталогов с частоиспользуемым названием, например, string, непреднамеренного сокрытия действительного модуля, которое происходит в дальнейшем пути поиска модулей. В простейшем случае, __init__.py
может быть просто пустым файлом, но он также может выполнять код инициализации пакета. В Блендере __init__.py
часто содержит пользовательский интерфейс и информацию аддона, в то время как реальная работа делается в других файлах. В отличие от других скриптов в этой книге, многофайловый пакет не может быть выполнен из текстового редактора. Он должен быть скопирован в место, которое входит в путь поиска в Блендере, например,
addons
или addons-contrib
, см. раздел аддоны Блендера. К счастью, вам не нужно перезагружать весь Блендер для перезагрузки файлов после каждой модификации. Нажатие F8 на клавиатуре перезагружает все активированные аддоны в Блендере. Простой пример
Этот пакет разнесён на четыре файла. Три из них создают меши: куб, цилиндр и сферу, соответственно. Это файлы автономных скриптов, которые можно выполнять в окне текстового редактора для отладочных целей. Условие
(__name__ == "__main__")
истинно, если файл был запущен в автономном режиме. mycube.py
#----------------------------------------------------------
# File mycube.py
#----------------------------------------------------------
import bpy
def makeMesh(z):
bpy.ops.mesh.primitive_cube_add(location=(0,0,z))
return bpy.context.object
if __name__ == "__main__":
ob = makeMesh(1)
print(ob, "created")
mycylinder.py
#----------------------------------------------------------
# File mycylinder.py
#----------------------------------------------------------
import bpy
def makeMesh(z):
bpy.ops.mesh.primitive_cylinder_add(location=(0,0,z))
return bpy.context.object
if __name__ == "__main__":
ob = makeMesh(5)
print(ob, "created")
mysphere.py
#----------------------------------------------------------
# File mysphere.py
#----------------------------------------------------------
import bpy
def makeMesh(z):
bpy.ops.mesh.primitive_ico_sphere_add(location=(0,0,z))
return bpy.context.object
if __name__ == "__main__":
ob = makeMesh(3)
print(ob, "created")
__init__.py
Четвертый
bl_info
и код регистрации, необходимый для аддона и пользовательского интерфейса. В нем также содержится следующий фрагмент кода для импорта других файлов пакета. # Для поддержки правильной перезагрузки, пробуем обратиться
# к переменной пакета, если она есть, перезагрузить всё
if "bpy" in locals:
import imp imp.reload(mycube)
imp.reload(mysphere)
imp.reload(mycylinder)
print("Reloaded multifiles")
else:
from . import mycube, mysphere, mycylinder
print("Imported multifiles")
Этот код работает следующим образом.
• Если
__init__.py
запускается в первый раз, т.е. при запуске Блендера с включенным аддоном в вашем файле default.blend, "bpy" in locals
возвращает Ложь. Другие файлы в пакете импортируются и в терминале выводится "Imported multifiles". • Если
__init__.py
запускается в первый раз после запуска Блендера с выключенным аддоном в вашем файле default.blend, и вы нажали включение аддона, "bpy" in locals
возвращает Ложь. Другие файлы в пакете импортируются и в терминале выводится "Imported multifiles". • После того, как дополнения включены, в любое время вы нажимаете F8, чтобы перезагрузить аддоны,
"bpy" in locals
возвращает Истину. Другие файлы в пакете перезагружаются, а в терминал выводится "Reloaded multifiles".
Поделиться:
Популярные книги
Как я строил магическую империю 4
4. Как я строил магическую империю
Фантастика:
боевая фантастика
постапокалипсис
аниме
фантастика: прочее
фэнтези
5.00
рейтинг книги
Безумный Макс. Поручик Империи
1. Безумный Макс
Фантастика:
героическая фантастика
альтернативная история
7.64
рейтинг книги
Попаданка 3
3. Двойная звезда
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Муж на сдачу
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Призыватель нулевого ранга. Том 3
3. Эпоха Гардара
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
На границе империй. Том 10. Часть 5
23. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Адвокат
1. Бандитский Петербург
Детективы:
боевики
8.00
рейтинг книги
На границе империй. Том 7
7. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
6.75
рейтинг книги
Здравствуй, 1985-й
2. Девяностые
Фантастика:
альтернативная история
5.25
рейтинг книги
О, Путник!
1. Квинтет. Миры
Фантастика:
социально-философская фантастика
5.00
рейтинг книги
Чужбина
2. Дворянская кровь
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Бестужев. Служба Государевой Безопасности. Книга четвертая
4. Граф Бестужев
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Локки 5. Потомок бога
5. Локки
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
На границе империй. Том 10. Часть 4
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00