
コレクションとビューレイヤーコレクションの違い、ビューレイヤーコレクションへのアクセス方法について説明する。
問題提起
コレクションの一部オプションは、ビューレイヤーごとの設定である(「ビューレイヤーでのビューポート非表示(目アイコン)」と「ビューレイヤーから除外」など)。
これらの設定はビューレイヤーからアクセスする必要があり、bpy.data.collectionsから変更することができない。
深い階層にあるビューレイヤーコレクションは、その階層まで指定する必要があり、簡単にアクセスすることができない(例:layer_collection.children["hoge"]では、hogeが深い階層のコレクション内にある場合は取得できない)。
解決法
一旦全てのビューレイヤーコレクションの階層を全て取得し、そのリストから名前指定することで、欲しいコレクションのビューレイヤーにおけるデータを取得することができる。
全ビューレイヤーコレクションを取得する
def get_all_vl_colle(tgt_colle, all_l):
for i in tgt_colle:
for c in i.children:
all_l += [c]
get_all_vl_colle(c.children, all_l)
return set(all_l)
vl = bpy.context.view_layer
all_l = vl.layer_collection.children.values()
for i in get_all_vl_colle(all_l, all_l):
i.name
i.exclude = True
i.hide_viewport = True
i.collection.hide_viewport = True
i.collection.hide_select = True
i.collection.hide_render = True
excludeやhide_viewportはビューレイヤーコレクション、コレクション実データの hide_viewport やhide_renderは、ビューレイヤーコレクション.collectionから指定する。