忘却まとめ

Blenderの中級者・上級者向けの踏み込んだ情報や、アドオン・3DCGに関する情報を記事にします

【コレクションとビューレイヤーコレクションの違い】全ビューレイヤーコレクションを取得する再帰関数【Blender / Python】

Python その他

投稿日:

コレクションとビューレイヤーコレクションの違い、ビューレイヤーコレクションへのアクセス方法について説明する。

問題提起

コレクションの一部オプションは、ビューレイヤーごとの設定である(「ビューレイヤーでのビューポート非表示(目アイコン)」と「ビューレイヤーから除外」など)。
これらの設定はビューレイヤーからアクセスする必要があり、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から指定する。

3Dモデルなどの制作依頼はこちら

-Python, その他

Copyright© 忘却まとめ , 2021 All Rights Reserved Powered by STINGER.