Solved Merge IsolateObjects into a second document

I have a list of objects in one document (OptimizedDoc) that I want to copy over into another (doc) with materials and tags. My current code is:

tempDoc = c4d.documents.IsolateObjects(OptimizedDoc, Transfer_Objects)
c4d.documents.MergeDocument(doc, tempDoc, c4d.SCENEFILTER_NONE)

I get - TypeError: unable to convert c4d.documents.BaseDocument to @net.maxon.interface.url-C
The documentation says the second spot on Merge Document should be the file to merge into doc, but I think the way I'm presenting it is incorrect. Am I supposed to be pointing to a file location in memory? Thanks!

hi,

you have to save the document to memory and use the result to merge the document.
When you merge, you have to set the flags to what you want to merge, otherwise it will not merge what you want.

On this example i'm merging a document with another selected document.

import c4d
from c4d import gui
# Welcome to the world of Python


# Main function
def main():
    
    obj = doc.GetActiveObject()
    if obj is None:
        return
    # Isolate the active object
    isolateDoc = c4d.documents.IsolateObjects(doc, [obj])
    
    # Creates the Memory File Strcuture
    mfs = c4d.storage.MemoryFileStruct()
    
    # Sets the mfs to write mode
    mfs.SetMemoryWriteMode()
    # save the document to mfs
    c4d.documents.SaveDocument(isolateDoc, mfs, c4d.SAVEDOCUMENTFLAGS_DONTADDTORECENTLIST, c4d.FORMAT_C4DEXPORT)
    # retrieve the data    
    data = mfs.GetData()
    # Set the MFS to read mode
    mfs.SetMemoryReadMode(data[0], data[1] )    
    
    
    flags =  c4d.SCENEFILTER_OBJECTS | c4d.SCENEFILTER_MATERIALS
    
    # Load Document 
    selectedFile = c4d.storage.LoadDialog()
    if selectedFile is None:
        return
    newDoc = c4d.documents.LoadDocument(selectedFile, flags)
    
    
    #Merge the isolated document with the current one.
    
    c4d.documents.MergeDocument(newDoc, mfs, flags)
    
    c4d.documents.InsertBaseDocument(newDoc)
    c4d.documents.SetActiveDocument(newDoc)
    

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

Cheers,
Manuel

MAXON SDK Specialist

MAXON Registered Developer