В Blender Python API у коллекции нет прямого указателя на ее родительскую (parent) коллекцию. Однако мы можем получать родительскую коллекцию, просматривая список потомков каждой коллекции, пока в одном из них не найдем текущую.
Список коллекций сцены можно получить через:
1 2 3 |
bpy.data.collections[:] # [bpy.data.collections['Collection'], bpy.data.collections['Collection 1'], ...] |
однако в него не входит коллекция сцены верхнего уровня “Scene Collection”. Указатель на эту коллекцию можно получить через:
1 2 3 |
bpy.context.scene.collection # bpy.data.scenes['Scene'].collection |
Определим общий список для поиска:
1 2 |
all_collections = bpy.data.collections[:] all_collections.append(bpy.context.scene.collection) |
Текущую активную коллекцию мы можем получить через:
1 |
active_collection = bpy.context.collection |
Теперь мы можем найти родительскую коллекцию для текущей активной коллекции, просматривая по нашему списку потомков children каждой коллекции и та коллекция, в списке потомков которой найдется искомая и будет для нее родительской.
1 2 3 4 5 6 7 |
parent_collection = next((collection for collection in all_collections \ if active_collection.name in collection.children \ ), None) print(parent_collection) # <bpy_struct, Collection("Collection 2") at 0x000001F47C934708> |
Если у коллекции нет родителя, наш метод поиска вернет None.