Edited at

[Cinema 4D] マテリアルアサインリスト

今回は各マテリアル側から,アサインしているオブジェクトにアクセスする方法を試してみます.

マテリアルがシーン内のオブジェクトに適用されている場合は,マテリアルの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()

そのマテリアルがシーン内で使われているかの確認や,マテリアルが適用されているオブジェクトにアクセスすることができ,こちらのほうが都合がよいこともありそうです.