この記事は、前の記事#1からの続きです。
フェイスアサイン+インスタンス
フェイスアサインがある状態のシェイプからインスタンスを作成してみます。


で、思ったのですが、インスタンス間ではシェイプの形状はシェアしているものの、マテリアルの状態は完全別個で保持されているようなので、フェイスアサインをしたシェイプのインスタンスをガンガン増やすと、データ量がどんどん増えていく事にならないでしょうか。。
子インスタンス側だけにフェイスアサインする


とりあえず、インスタンスが絡んでもわかりづらいノードグラフになる事は無いようです。
なお、
objectGroup = shape.instObjGroups[0].objectGroups[0]
attrs = (objectGroup, objectGroup.objectGrpCompList,
objectGroup.objectGroupId, objectGroup.objectGrpColor)
for a in attrs:
print('{}({}) : {}'.format(a, a.type(), a.get()))
# 以下、出力:
# pCubeShape1.instObjGroups[0].objectGroups[0](TdataCompound) : [[], 0, -1]
# pCubeShape1.instObjGroups[0].objectGroups[0].objectGrpCompList(componentList) : []
# pCubeShape1.instObjGroups[0].objectGroups[0].objectGroupId(long) : 0
# pCubeShape1.instObjGroups[0].objectGroups[0].objectGrpColor(short) : -1
フェイスアサインのないシェイプに対してもobjectGroups
及びobjectGrpCompList
へのアクセスはできました。対応フェイス番号がなしになっています。
一旦まとめ
- マテリアルのフェイスアサインを行うとノードグラフが複雑になる
- が、本質的にはインスタンスオブジェクトグループ以下を見れば良い
- シェイプのインスタンスが絡んでもそこまで複雑にならない
- フェイスアサインのあるシェイプのインスタンスをガンガン作ると管理が面倒になりそう
- コンポーネントのインスタンスオブジェクトグループについてはよくわからない。デフォルトのマテリアルアサイン?
コンポーネントのインスタンスオブジェクトグループについて何か調査が進んだら#3を書きたいと思います。
英文で構わないので、解説のあるリンクなど知っている方は教えていただけると幸せ。