Export selected objects to separate files
-
Hello guys,
I wrote small script and got one problem. I can't export selected objects to separate files, after export operation i got obj files with duplicate meshes inside. Which the command do i must use for it?
import c4d import os from os.path import join, normpath dirpath = "c:/usr/temp/mayablender/" def main(): doc = c4d.documents.GetActiveDocument() selected = doc.GetActiveObjects(0) for ob in selected: ob.DelBit(c4d.BIT_ACTIVE) doc.SetActiveObject(ob) full_dirpath = normpath(join(dirpath + ob.GetName() + ".obj")) # export to obj c4d.documents.SaveDocument(doc,full_dirpath,c4d.SAVEDOCUMENTFLAGS_0,1030178) if __name__=='__main__': main()
-
Whos knows any solution for it?
-
Hi @klints2, first of all, welcome in the plugincafe community.
I would like to point you some rules on this forum regarding how to post questions in order to help us to help you!
- How to Post Questions especially the tagging part and take care to post on the correct category.
- Q&A New Functionality.
Then additionally it's not necessary to bump a topic to put more pressure on us, we monitor this forum and try to answers as soon as we can due to our workload.
Don't worry it's your first post you couldn't know, so I've setup your topic correctly.Regarding your issue. Cinema 4D Obj exporter and all Cinema 4D exporters, does not offer a way to export only a list of objects.
So you have to copy all the stuff needed into a temporary document and then export this temporary document
the function c4d.documents.IsolateObjects does exactly that an returns the temporary BaseDocument.Then in order to properly setup, the obj exported I invite you to read the export_OBJ in our GitHub repository.
If you have any questions, please let me know.
Cheers,
Maxime. -
@klints2
Try to use IsolateObjectsA helper routine to copy the objects of document to a new document (returned). All materials associated are also copied over and the links are corrected.
-
@mikeudin Thanks, but don't undestand how works this command, i was tried to get list from
isolated = c4d.documents.IsolateObjects(doc, selected)
but it's give me nothing and i can't usefor
for it.
How do i can exported only selected list to obj, without dialog windows?Sorry this is my first script for c4d, i'm maya user and little confused. Thanks
-
Well, I think found it.
Don't perfect but its worksimport c4d import os from os.path import join, normpath from c4d import documents def export(): dirpath = "c:/usr/temp/" # temp directory global tdoc sobj = doc.GetActiveObjects(0) # isolate objects tdoc = c4d.documents.IsolateObjects(doc, sobj) # get path with object name full_dirpath = normpath(join(dirpath + (doc.GetActiveObjects(0)[0]).GetName() + ".obj")) # export to obj documents.SaveDocument(tdoc,full_dirpath,c4d.SAVEDOCUMENTFLAGS_0,1030178) if __name__=='__main__': export() documents.KillDocument(tdoc)
-
Hi @klints2, may I ask you why this is not perfect? Moreover here just a few corrections in your code.
- In Cinema 4D (and in general), try to avoid as much as possible global variables. In your case you can call documents.KillDocument(tdoc) just after the SaveDocument.
- Make use of join as the function should behave.
dirpath = "c:/usr/temp/" # temp directory full_dirpath = normpath(join(dirpath, (doc.GetActiveObjects(0)[0]).GetName() + ".obj"))
- Always check, you get object selected or you will get some errors in the console.
sobj = doc.GetActiveObjects(0) if not sobj: return
Cheers,
Maxime. -
Hi @m_adam, thanks for you correction and advice, it's really usefull for me. I'm learn python just couple month and not sure in my code yet.
- yeah i'm missed this mistake
full_dirpath = normpath(join(dirpath, (doc.GetActiveObjects(0)[0]).GetName() + ".obj"))
Thanks one more time, always good to have help and support!
- yeah i'm missed this mistake