Включить или выключить коллекцию, в которой содержится определенный объект, можно через Blender Python API при помощи несложного скрипта. Например, выключим коллекцию в которой лежит текущий выделенный объект.
Для начала нужно получить указатель на коллекции, в которой лежит наш объект.
1 2 3 |
bpy.context.object.users_collection # (bpy.data.collections['Collection'], bpy.data.collections['Collection 5']) |
Так как объект может располагаться больше чем в одной коллекции, мы получаем список указателей.
Пройдем по полученному списку в цикле и выключим все коллекции. Выключить коллекцию для сцены (иконка с монитором) мы можем сразу.
1 2 |
for col in bpy.context.object.users_collection: col.hide_viewport = True |
Для того чтобы выключить коллекцию на слое видимости (view layer) нам нужно получить указатель на коллекцию слоя видимости. Воспользуемся для этого следующей функцией:
1 2 3 4 5 6 7 8 9 |
def layer_collection(name, _layer_collection=None): if _layer_collection is None: _layer_collection = bpy.context.view_layer.layer_collection if _layer_collection.name == name: return _layer_collection else: for l_col in _layer_collection.children: if rez := layer_collection(name=name, _layer_collection=l_col): return rez |
Имея указатель на коллекцию слоя видимости мы можем включать и выключать ее видимость (иконки с галочкой и глазом):
1 2 3 4 |
for col in bpy.context.object.users_collection: l_col = layer_collection(col.name) l_col.exclude = True l_col.hide_viewport = True |
Полный код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import bpy def layer_collection(name, _layer_collection=None): if _layer_collection is None: _layer_collection = bpy.context.view_layer.layer_collection if _layer_collection.name == name: return _layer_collection else: for l_col in _layer_collection.children: if rez := layer_collection(name=name, _layer_collection=l_col): return rez cols = bpy.context.object.users_collection for col in cols: col.hide_viewport = True l_col = layer_collection(col.name) l_col.exclude = True l_col.hide_viewport = True |
Для того чтобы вернуть видимость коллекции по объекту при помощи этого же скрипта, нужно всего-лишь заменить True на False.