On 16/06/2017 at 03:05, xxxxxxxx wrote:
import c4d
def main() :
File=r"d: est\Mats.c4d"
TempDoc = c4d.documents.LoadDocument(File, c4d.SCENEFILTER_MATERIALS)
MatListTemp = list()
MatTemp = TempDoc.GetFirstMaterial()
while(MatTemp) :
nMatTemp = MatTemp.GetNext()
MatListTemp.append(MatTemp)
MatTemp = nMatTemp
TempDoc.Remove()
MatCurentDoc = doc.GetFirstMaterial()
MatList = list()
while(MatCurentDoc) :
nMatCurentDoc = MatCurentDoc.GetNext()
MatList.append(MatCurentDoc)
MatCurentDoc = nMatCurentDoc
doc.StartUndo()
for Mat in MatList:
for MatTemp in MatListTemp:
if MatTemp.GetName() == Mat.GetName() :
LayerMat = Mat.GetLayerObject(doc)
ObjLink = Mat[c4d.ID_MATERIALASSIGNMENTS]
list_tags = list()
for i in xrange(ObjLink.GetObjectCount()) :
list_tags.append(ObjLink.ObjectFromIndex(doc, i))
doc.AddUndo(c4d.UNDOTYPE_CHANGE, Mat)
Mat.Remove()
doc.AddUndo(c4d.UNDOTYPE_DELETE, Mat)
doc.InsertMaterial(MatTemp)
doc.AddUndo(c4d.UNDOTYPE_NEW, MatTemp)
doc.AddUndo(c4d.UNDOTYPE_CHANGE, MatTemp)
MatTemp.SetLayerObject(LayerMat)
for tag in list_tags:
doc.AddUndo(c4d.UNDOTYPE_CHANGE, tag)
tag[c4d.TEXTURETAG_MATERIAL] = MatTemp
doc.EndUndo()
c4d.EventAdd()
if __name__ == '__main__':
main()
I'm downloading and replacing the materials with a script. All assigned objects are visible in the material assignments. If you undo the action (Ctrl + Z), the objects are missing in the material assignments.