Code:
import c4d
import os
def iterateObjs(op, opType=c4d.Oxref):
while op:
if op.CheckType(opType):
yield op
iterateObjs(op.GetDown())
op = op.GetNext()
# Main function
def main():
folderPath = c4d.storage.LoadDialog(flags=c4d.FILESELECT_DIRECTORY)
if not folderPath: return
doc.StartUndo()
for obj in iterateObjs(doc.GetFirstObject()):
oldPath = obj[c4d.ID_CA_XREF_FILE]
if not oldPath: continue
fileName = os.path.basename(oldPath)
if not fileName: continue
newFolderPath = os.path.join(folderPath, fileName)
if not newFolderPath: continue
if not os.path.exists(newFolderPath):
print "{0} do not exist".format(newFolderPath)
continue
genState = obj[c4d.ID_CA_XREF_GENERATOR]
obj.SetParameter(c4d.ID_CA_XREF_GENERATOR, True, c4d.DESCFLAGS_SET_USERINTERACTION)
# Update the path
doc.AddUndo(c4d.UNDOTYPE_CHANGE, obj)
obj[c4d.ID_CA_XREF_FILE] = newFolderPath
obj.SetParameter(c4d.ID_CA_XREF_GENERATOR, genState, c4d.DESCFLAGS_SET_USERINTERACTION)
# Click Refresh Button
doc.AddUndo(c4d.UNDOTYPE_CHANGE, obj)
c4d.CallButton(obj, c4d.ID_CA_XREF_REFRESH)
doc.EndUndo()
c4d.EventAdd()
# Execute main()
if __name__=='__main__':
main()
Tien un petit truc codé rapidement