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:
https://miro.com/app/board/o9J_kjIM1Ko=/
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:
c4d.documents.InsertBaseDocument(sk_doc)
c4d.documents.SetActiveDocument(sk_doc)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?
Thanks!
Sascha
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 = c4d.storage.LoadDialog(flags = 2) c4d.gui.MessageDialog("Please select the destination folder for the converted .c4d files.", type = 0) sk_exportfolder = c4d.storage.LoadDialog(flags = 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) c4d.documents.InsertBaseDocument(sk_doc) c4d.documents.SetActiveDocument(sk_doc) # 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."