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

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

Жанры

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

Larsson Thomas

Шрифт:

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