How to load a file with python and turn it into the active document ?

  • Hi!

    I am a total beginner in python ... so this might be easy :)

    I am using C4D Release 20 and looking for a way to import files and then work with the files as if they where actually in my C4D Editor. With that I mean I want to work with those CallCommands etc. I know that´s not the pro way but... I am not a pro yet ;) Down below you se the code so far.

    The issue now is that this line:

    c4d.documents.LoadDocument(sk_doc, loadflags = 0)

    ...does not really load the file into a state where I can work with it. At this point my editor still shows my empty "BaseDocument" and if I try to "GetActiveDocument" I get a FALSE boolean return. So for python I still have loaded nothing it seams.

    I allready tried all sorts of other "loading" methods as you can see here:

    So somehow I think I need to get the loaded file out of some obscure hidden "position/state" into the state of the "ActiveDocument". So I added those lines here:


    But with them I get a "TypeError: argument 1 must be c4d.documents.BaseDocument, not str"

    And I have no idea how to change the file URL into a "c4d.documents.BaseDocument"-Type...

    Any idea anybody?



    import c4d
    import os
    from c4d import gui
    from c4d import documents
    # Main function
    def main():
        def tool():
            return c4d.plugins.FindPlugin(doc.GetAction(), c4d.PLUGINTYPE_TOOL)
        def object():
            return doc.GetActiveObject()
        def tag():
            return doc.GetActiveTag()
        def renderdata():
            return doc.GetActiveRenderData()
        def prefs(id):
            return c4d.plugins.FindPlugin(id, c4d.PLUGINTYPE_PREFS)
        # Set Variables for pathes with dialog
        c4d.gui.MessageDialog("Please select the folder with the BVH files.", type = 0)
        sk_sourcefolder = = 2)
        c4d.gui.MessageDialog("Please select the destination folder for the converted .c4d files.", type = 0)
        sk_exportfolder = = 2)
        # Listing and filtering all .bvh files in directory
        sk_filteredfiles = filter(lambda x: x.endswith(".bvh"), os.listdir(sk_sourcefolder))
        # Loop through selected directory
        for file in sk_filteredfiles:
            # Load and activate current project from list
            sk_doc = file
            print sk_doc
            c4d.documents.LoadDocument(sk_doc, loadflags = 0)
            # Set Render Settings
            c4d.CallCommand(600000098) # Projectname_As_Rendername
            c4d.CallCommand(12161) # Edit Render Settings...
            renderdata()[c4d.RDATA_RENDERENGINE] = 300001061 # Use Hardware OpenGL
            renderdata()[c4d.RDATA_XRES] = 400 # X Render Resolution
            renderdata()[c4d.RDATA_YRES] = 400 # Y Render Resolution
            renderdata()[c4d.RDATA_FRAMERATE] = doc[c4d.DOCUMENT_FPS]
            renderdata()[c4d.RDATA_FRAMESEQUENCE] = 3 # Preview Range als Render Range
    ... much more but irrelevant code for the current issue...

  • I have replied your post at C4DCafe.

    "The c4d.documents.LoadDocument returns you a BaseDocument, which you then need as argument for the InsertBaseDocument and SetActiveDocument."

Log in to reply