[BPY28]再帰問題(親コレクションの取得)
親コレクションを取得してください。条件は:
・画面で選択中のコレクションを対象
・親コレクションが存在するときは親コレクションを返す。
・Scene Collection と第1レベルは「親無し」とする
はい、コードです。
def find_collection_parent_recv(cur,col):
for x in cur.children:
if x == col:
return(cur)
else:
pcol=find_collection_parent_recv(x,col)
if pcol != None:
return(pcol)
return(None)
def find_collection_parent(col):
scol = C.scene.collection
if col == scol:
return(None)
for x in scol.children:
if x == col:
return(None)
else:
cur = find_collection_parent_recv(x,col)
if cur != None:
return(cur)
return(None)
ccol = C.collection
pcol = find_collection_parent(ccol)
if pcol != None:
print(pcol.name)
3Dビューの「(1) Collection | Cube」の"Collection"が「現在アクティブなCollection」で、例えばここで[Shift]+[A]>Mesh>Cube したら Collection 配下に置かれる、というわけ。
はい、じゃあ3Dビューのこの状態でアウトライナーを確認すると
現在いるCollectionは
>>> C.collection
bpy.data.collections['Collection']
そこにあるオブジェクトは
>>> C.collection.objects
bpy.data.collections['Collection'].objects
>>> for x in C.collection.objects:
... print(x)
...
<bpy_struct, Object("Cube")>
<bpy_struct, Object("Light")>
<bpy_struct, Object("Camera")>
ではアウトライナーからコレクションを追加してみましょう
この時の"Collection"の子となるコレクションは
>>> for x in C.collection.children:
... print(x)
...
<bpy_struct, Collection("Collection 1")>
<bpy_struct, Collection("Collection 2")>
はい、簡単ですね、ここまでは。
なお、上で説明しているのは「コンテキスト(bpy.context)を起点として色々見てみる」というものです。
「データ(bpy.data)」からだとまた扱いが異なるのですよ。
ひとまず「(データとしての)コレクションを一覧表示」してみましょう。
>>> for x in D.collections:
... print(x)
...
<bpy_struct, Collection("Collection")>
<bpy_struct, Collection("Collection 1")>
<bpy_struct, Collection("Collection 2")>
では次に、シーンのフルコピーを作ります。画面右上のほう、"Scene" と書かれた右側の用紙が重なっているアイコンをクリックします。メニューから Full Copy を選ぶと、シーンのフルコピーが行われます。
この状態でD.collectionsを一覧で出力してみると…ありゃりゃ?シーン別に分けたいって場合はどうすれば???ってなりますね?
>>> for x in D.collections:
... print(x)
...
<bpy_struct, Collection("Collection")>
<bpy_struct, Collection("Collection 1")>
<bpy_struct, Collection("Collection 1.001")>
<bpy_struct, Collection("Collection 2")>
<bpy_struct, Collection("Collection 2.001")>
<bpy_struct, Collection("Collection.001")>
これはあれですかね、夏休みの宿題ですかね?(やらんけど)
お読みいただきありがとうございます。サポートいただいた分はおやつのグレードアップに使おうかと思います。スキ、SNSにシェアもよろしくお願いします!