今回は各マテリアル側から,アサインしているオブジェクトにアクセスする方法を試してみます.
マテリアルがシーン内のオブジェクトに適用されている場合は,マテリアルのAssignmentを見ればわかります.ここにアクセスするには[c4d.ID_MATERIALASSIGNMENTS]を使います.
MatAssignDataのドキュメントはこちら
c4d.MatAssignDataクラス
ObjectFromIndex(doc, lIndex)
この戻り値はそのマテリアルが適用されているオブジェクトのテクスチャタグとなります.
tag.GetObject()を使うことでオブジェクトにアクセスできます.
doc = c4d.documents.GetActiveDocument()
mat = doc.GetFirstMaterial()
while mat:
objLink = mat[c4d.ID_MATERIALASSIGNMENTS]
objCnt = objLink.GetObjectCount()
if objCnt > 0:
for i in xrange(objCnt):
print "Material Name :", mat.GetName()
tag = objLink.ObjectFromIndex(doc, i)
print "Link index[", i, "] :", tag
obj = tag.GetObject()
print "Object name :", obj.GetName()
mat = mat.GetNext()
そのマテリアルがシーン内で使われているかの確認や,マテリアルが適用されているオブジェクトにアクセスすることができ,こちらのほうが都合がよいこともありそうです.