Для того, чтобы добавить в сцену все объекты из внешнего blend-файла, можно воспользоваться механизмом BlendDataLibraries.
Blend-файлы устроены таким образом, что каждый из них, одновременно со своей основной функцией работы со сценами, может выполнять и функции библиотеки – контейнера, содержащего меши, материалы, кисти и другие объекты, которые можно загружать в текущую рабочую сцену.
Для того, чтобы обратиться к содержимому blend-файла и получить из него нужные объекты, воспользуемся методом bpy.data.libraries.load, указав в параметрах полный путь к файлу, содержащему нужные данные.
1 2 3 4 5 |
import bpy src_path='_PATH_TO_FILR_.blend' with bpy.data.libraries.load(src_path) as (data_from, data_to): |
При таком обращении метод вернет два объекта типа bpy_lib, которые по сути являются списком атрибутов bpy.data, с которыми можно через них взаимодействовать.
Список атрибутов data_from:
1 2 3 4 5 6 |
# ['actions', 'armatures', 'brushes', 'cache_files', 'cameras', 'collections', 'curves', 'fonts', 'grease_pencils', 'hairs', 'images', 'lattices', 'lightprobes', 'lights', 'linestyles', 'masks', 'materials', 'meshes', 'metaballs', 'movieclips', 'node_groups', 'objects', 'paint_curves', 'palettes', 'particles', 'pointclouds', 'scenes', 'screens', 'simulations', 'sounds', 'speakers', 'texts', 'textures', 'volumes', 'workspaces', 'worlds'] |
Для того, чтобы добавить в сцену все объекты из исходного файла, нам нужен атрибут “objects”.
Загрузка нужного типа данных производится простым присваиванием data_to = data_from:
1 2 |
with bpy.data.libraries.load(src_path) as (data_from, data_to): data_to.objects = data_from.objects |
После чего пройдя по всем объектам из “data_to”, мы можем добавить их в сцену:
1 2 |
for obj in data_to.objects: bpy.context.scene.collection.objects.link(obj) |
Полный код, добавляющий все объекты из внешнего файла в сцену:
1 2 3 4 5 6 7 8 9 |
import bpy src_path='_PATH_TO_FILR_.blend' with bpy.data.libraries.load(src_path) as (data_from, data_to): data_to.objects = data_from.objects for obj in data_to.objects: bpy.context.scene.collection.objects.link(obj) |
*.blend-файл с примером кода для моих подписчиков на Patreon.