UNSOLVED Finding name/handle to last object merged into scene

After calling MergeDocument()

merge_status = c4d.documents.MergeDocument(doc, path,
                                           c4d.SCENEFILTER_MERGESCENE | c4d.SCENEFILTER_OBJECTS)

I check merge_status to be true and wish to find some handle/name to the object associated with the call to MergeDocument(), how do I do that ?

I tried the following on an empty scene

        doc = c4d.documents.GetActiveDocument()
        ao = doc.GetActiveObject()

that works if I am calling MergeDocument for a single path but if I am calling MergeDocument (in a loop) for a collection of paths, GetActiveObject() points to the same object, not the next one corresponding to the next path I am merging into the scene

Cheers

Hi,

there's no direct way of doing it. You must store the different object. Either you can store the original object's list and select/inverse the selection to retrieve all the objects that were not in the original document. Or you can store the object in a list each time you import a document.

import c4d
import os
from c4d import gui


def GetNextObject(op):
    if op==None:
        return None
  
    if op.GetDown():
        return op.GetDown()
  
    while not op.GetNext() and op.GetUp():
        op = op.GetUp()
  
    return op.GetNext()
 

def GetOriginalObjectList():
    originalObjects = list()
    child = doc.GetFirstObject()
    if child is None:
        return originalObjects
    
    while child:
        originalObjects.append(child)
        child = GetNextObject(child)
    
    return originalObjects




def main():
    # Store the original object in a list
    originalObjects = GetOriginalObjectList()
    mergedObject = list()
    
    path="D:\\MAXON\\temp\\merging_doc"
    for root, dirs, files in os.walk(path):
        for name in files:
            filePath = os.path.join(path,name)
            merge_status = c4d.documents.MergeDocument(doc, filePath, c4d.SCENEFILTER_MERGESCENE | c4d.SCENEFILTER_OBJECTS)
            if merge_status:
                mergedObject.append(doc.GetActiveObjects(c4d.GETACTIVEOBJECTFLAGS_CHILDREN))

    c4d.CallCommand(100004767) # Deselect All object
    # select all object that were on the orignal document
    for obj in originalObjects:
        obj.SetBit(c4d.BIT_ACTIVE)
    
    c4d.CallCommand(100004794) # Invert Selection    

    #Print all the object list we gather during the import.
    for objList in  mergedObject:
        print (objList)
          
    c4d.EventAdd()

# Execute main()
if __name__=='__main__':
    main()

Cheers,
Manuel