Creating a Selected Object Exporter Plugin for C4D



  • On 06/09/2015 at 11:56, xxxxxxxx wrote:

    HI Guys!
    I am new to Python and new to making plugins for cinema 4D. 
    I am Creating a Selected Object Exporter Plugin for Cinema 4D.
    I dont understand the SaveDocument and SceneSaverData and fomats id or i would how to put it together.
    Plz help me or give me a example or clue plz guys , and more info in the  video below. This what i done so far guys! 
    Plz CHECK THIS VIDEO! 
    Creating a Selected Object Exporter Plugin for Cinema 4D (Plz Help!) 
    https://www.youtube.com/watch?v=p2xtDvZpj-M&feature=youtu.be

    EVERYTHING is GREAT NOW! THANKS TO YOU GUYS ON THE FORUM!
    Selected Object Exporter V1.1 is OUT! and its FREE!
    http://fcstools.site40.net/store/
    Cheers,
    Ashton



  • On 06/09/2015 at 12:48, xxxxxxxx wrote:

    Hi
    Maybe link object and transfer linked object to export function (see in sdk docs: examples\scripts\FileImportExport)

    or Cesar made example > http://code.vonc.fr/?a=11



  • On 06/09/2015 at 16:06, xxxxxxxx wrote:

    I'd just create a new document, insert the selected object into the new doc, export, then kill document..  Everything done in the background without the user 'seeing' any of it..



  • On 07/09/2015 at 01:51, xxxxxxxx wrote:

    Hello,

    to copy selected objects into a new document you can use IsolateObjects(). Then you can use the created document with SaveDocument(). If you want to use an installed export format you have to use that as the format argument. You find some examples on how to configure and use an exporter this way in the example scripts found in the SDK download.

    SceneSaverData plugins are typically used to export the given document into a custom file format.

    Best wishes,
    Sebastian



  • On 07/09/2015 at 04:25, xxxxxxxx wrote:

    Hi,
    just a small request from my side:
    Please don't post any video support requests (except if it is really necessary to explain the problem).
    Such videos have several downsides:
    - you can't copy&paste code from a video
    - usually it takes us more time to watch a video, than to read a post
    - videos can't be searched with our forum search, so other users will have problems finding the information



  • On 08/09/2015 at 00:22, xxxxxxxx wrote:

    Just wondering.
    In his video he shows the source of a .pype (C4DtoFlightSim.pype) plugin.
    However, pype is a protected sourceplugin, so how is it possible  that he can see the source?

    -Pim



  • On 15/09/2015 at 05:48, xxxxxxxx wrote:

    HI GUYS! thanks for all the help! but 2 more things

    unitScale = c4d.UnitScaleData()  
    unitScale.SetUnitScale(1.0, c4d.DOCUMENT_UNIT_M)  
    bc = c4d.BaseContainer()  
    bc[c4d.DOCUMENT_DOCUNIT] = unitScale  
    doc.SetDocumentData(c4d. DOCUMENTSETTINGS_DOCUMENT, bc)  
    c4d.EventAdd()
    
    
    Thanks S_Bach ![View Drop Down](http://www.plugincafe.com/forum/forum_images/drop_down.png)  
    

    Thats works if u have it in a py script file and when you call out to it with a ID c4d give you, but when u use it by putting it in the code like this below, it dont work 
         
    def DAE_1_4_Format(self) :
            c4d.CallCommand(100004820, 100004820) # Copy
            c4d.CallCommand(12094, 12094) # New
            c4d.CallCommand(600000032, 600000032) # PS_M_id <--i calling a py file from the script that             works but if some use they might have this ID use already , so i would like to know what else i can          try. 
            c4d.CallCommand(100004821, 100004821) # Paste
            c4d.CallCommand(60000, 5) # Export Filter for DAE 1.4 in R16 and r17
            c4d.CallCommand(12664, 12664) # Close

    or how to call the script py file from my plugin folder to execute it 
    and  instead c4d.CallCommand(12664, 12664), how can i close it with out ask me save doc or no, i just want to close by it self and i try killdocument but notting happens , 
    hope yall can hep and this a video on how it looking so far : https://www.youtube.com/watch?v=bBuIT9spy30



  • On 15/09/2015 at 07:02, xxxxxxxx wrote:

    Pgrooff ( lol its a mistake i did not encrypt it to a .pype lol thats why but its .pyp and but you help me on that thing i post.)



  • On 15/09/2015 at 07:24, xxxxxxxx wrote:

    Ok, clear, thanks.



  • On 16/09/2015 at 07:30, xxxxxxxx wrote:

    Hi,

    before trying to answer your question, one request from my side:
    Please do not double post into several threads. Besides cluttering the forums, this could lead to several people investing time into your request in parallel.

    As I wasn't exactly sure, what you were asking for, I basically merged all information given in this thread into a single script.

    Of course you'd also be free to mix the code from the Script Log with "normal" Python scripts. Assuming, that you want to call Sebastian's script on the "# PS_M_id" line, you could use Sebastian's code in there directly.

    If you need to separate the functionality, I think it would be best to use Command plugins instead of scripts (as these will have a constant plugin ID).

    Enough options, here's my script, it's basically the workflow suggested by Eclektric earlier:

    import c4d
    from c4d import gui
      
    # Export all selected objects to Collada
      
    def main() :
        objs = doc.GetActiveObjects(c4d.GETACTIVEOBJECTFLAGS_CHILDREN)
        if objs == None:
            return
        
        # Get a fresh, temporary document with only the selected objects
        docTemp = c4d.documents.IsolateObjects(doc, objs)
        if docTemp == None:
            return
      
        # Set project scale
        unitScale = c4d.UnitScaleData()
        unitScale.SetUnitScale(1.0, c4d.DOCUMENT_UNIT_M)
      
        bc = c4d.BaseContainer()
        bc[c4d.DOCUMENT_DOCUNIT] = unitScale
        docTemp.SetDocumentData(c4d. DOCUMENTSETTINGS_DOCUMENT, bc)
      
        # Export the temporary document as Collada file
        # Collada im-/exporter IDs:
        # ID_COLLADA14_IMPORT 1022315
        # ID_COLLADA14_EXPORT 1022316
        # ID_COLLADA15_IMPORT 1025754
        # ID_COLLADA15_EXPORT 1025755
        if c4d.documents.SaveDocument(docTemp, "test.dae", c4d.SAVEDOCUMENTFLAGS_0, 1022316) == False:
            print "Save error"
      
        # In a previous version I used the KillDocument() call below.
        # It does no harm, but it is redundant, as docTemp never was inserted.
        # Throw away the temporary document
        # c4d.documents.KillDocument(docTemp)
      
    if __name__=='__main__':
        main()
    


  • On 16/09/2015 at 10:54, xxxxxxxx wrote:

    hi Andreas Block and sorry again , hey try it but it dont work I am now lost now but take a look at where i put it.

    class SelectedObjectExporterDialog(c4d.gui.GeDialog) : #<-------Main Dialog for the Plugin----#
        #--------------------------------------------#
        #_____ Interface Layout______________________________________________________#    
        LOGO = BANNER()

    def CreateLayout(self) :

    self.SetTitle("Selected Object Exporter v0.1")   # <-------------My Title for the MAIN Dialog------

    #The Menu for top part of Interface_____(About)-(Check for Updates)_________#
            self.MenuFlushAll()

    self.MenuSubBegin("About")
            self.MenuAddString(ABOUT["id"], ABOUT["name"])
            self.MenuSubEnd()
            self.MenuFinished()

    self.MenuSubBegin("Check for Updates")
            self.MenuAddString(Check_for_Updates["id"], Check_for_Updates["name"])
            self.MenuSubEnd()
            self.MenuFinished()

    #---This is were Your Plugin Image Group Go!------------------------------------------------------------------>
            self.GroupBegin(0, c4d.BFH_CENTER | c4d.BFV_CENTER, cols=1)
            self.GroupBorderNoTitle(c4d.BORDER_NONE)
            self.GroupBorderSpace(0, 0, 0, 0)
            self.AddUserArea(1, c4d.BFV_CENTER | c4d.BFV_CENTER)    
            self.AttachUserArea(self.LOGO, 1)
            self.GroupEnd()

    self.AddSeparatorH(200, flags=c4d.BFH_SCALEFIT)

    self.AddStaticText(0, c4d.BFH_CENTER, 0, 0, "|<| Welcome to SELECTED OBJECT EXPORTER |>|", 0) # <-------------My title ------

    self.GroupBegin(20007, c4d.BFH_FIT | c4d.BFH_SCALEFIT, 1, 0, "")     # <------------|
            self.AddSeparatorH(200, flags=c4d.BFH_SCALEFIT)                                   # Adding Separator lol ,thats how I put it. AND I use it Aot.
            self.GroupEnd()        
            #_____PART OF EXPORT Tab __________Quick Selected Exporter_________________________________________________#

    self.GroupBegin(20078, c4d.BFH_SCALEFIT | c4d.BFV_BOTTOM, 1, 0, "")

    self.Only_Obj = self.AddCheckbox(Selected_1, c4d.BFH_LEFT, 250, 0, "Selected Object Only")
            self.SetBool(Selected_1, True)
            self.AddSeparatorH(200, flags=c4d.BFH_SCALEFIT)

    self.GroupBegin(20078, c4d.BFH_SCALEFIT | c4d.BFH_CENTER | c4d.BFV_BOTTOM, 2, 0, "| Select Format |")
            self.GroupBorder(c4d.BORDER_GROUP_IN)

    self.AddStaticText(0, c4d.BFH_LEFT, 100, 0, "   FORMAT :")

    self.format_list = self.AddComboBox(Exporter_Button, c4d.BFH_SCALEFIT, 46, 0, False) # <----- DROP MENU using a ComboBox and in the list that is (AddChild) .         
            self.AddChild(Exporter_Button, DAE_1_4, 'COLLADA 1.4 (*.dae)')
            self.AddChild(Exporter_Button, FBX_ALL, 'FBX (*.fbx)')
            self.AddChild(Exporter_Button, W_Obj, 'Wavefront (*.obj)')
            self.AddChild(Exporter_Button, thee_Ds, '3D Studio (*.3ds)')
            self.AddChild(Exporter_Button, Direct_3D, 'Direct 3D (*.x)')
            self.AddChild(Exporter_Button, Alembic_abc, 'Alembic (*.abc)')
            self.AddChild(Exporter_Button, COLLADA_15, 'COLLADA 1.5 (*.dae)')
            self.AddChild(Exporter_Button, Illustrator_AI, 'Illustrator (*.ai)')
            self.AddChild(Exporter_Button, STL_stl, 'STL (*.stl)')
            self.AddChild(Exporter_Button, Dxf_DXF, 'DXF (*.dxf)')
            self.AddChild(Exporter_Button, 123349, '-----------------------')
            self.AddChild(Exporter_Button, 123346, 'MDL (*.MDL) Flight Sim Model')

    self.GroupEnd()

    self.AddSeparatorH(250, flags=c4d.BFH_SCALEFIT)

    self.GroupBegin(20078, c4d.BFH_SCALEFIT | c4d.BFV_BOTTOM, 2, 0, "")
            self.AddStaticText(0, c4d.BFH_LEFT, 240, 0, "  Model Project Scale. . . . . . .  . . . .  . .")
            self.format_list2 = self.AddComboBox(Exporter_Button2, c4d.BFH_SCALEFIT, 50, 0, False)
            self.AddChild(Exporter_Button2, ID_CM, 'Centimeters')
            self.AddChild(Exporter_Button2, ID_M, 'Meters')
            self.AddChild(Exporter_Button2, 10034, 'Kilometers')
            self.AddChild(Exporter_Button2, 10034, 'Millimeters')
            self.AddChild(Exporter_Button2, 10034, 'Miles')
            self.AddChild(Exporter_Button2, 10034, 'Yards')
            self.AddChild(Exporter_Button2, 10034, 'Feet')
            self.AddChild(Exporter_Button2, 10034, 'Inches')
            self.GroupEnd()

    self.AddButton(UI_BT_Export, c4d.BFH_SCALEFIT | c4d.BFV_BOTTOM , 100, 20, "EXPORT MODEL >>>")

    self.GroupSpace(200, 5)
            self.GroupEnd()

    self.GroupEnd()

    self.GroupBegin(20078, c4d.BFH_SCALEFIT | c4d.BFV_BOTTOM, 1, 0, "")

    self.AddSeparatorH(200, flags=c4d.BFH_SCALEFIT)
            
            self.AddStaticText(0, c4d.BFH_CENTER, 0, 10, "<<<<[-A Part of C4D|2|light SIM SDK-]>>>>", 0)
            self.AddSeparatorH(200, flags=c4d.BFH_SCALEFIT)
            self.AddButton(ID_Updates_BT, c4d.BFH_RIGHT, initw=180, name="Check for Updates")

    self.AddSeparatorH(200, flags=c4d.BFH_SCALEFIT)

    #self.AddStaticText(0, c4d.BFH_CENTER, 0, 10, "<<<-------------<[-QuantumDrop Studios-Copyrights 2015-]>----------->>>", 0) # for When Its Ready to go!

    self.GroupEnd()

    if self.readSettings() == False:
                self.SetLong(self.format_list, Exporter_Button)
                self.SetLong(self.format_list2, Exporter_Button2)

    return True 
        ############### End  of Layout #################################
        #--------------------------------------------#
        ####### The Set State of the Layout Interface#######________________________#
        def InitValues(self) :
            self.SetLong(Exporter_Button, Exporter_Button) #Sets the combobox to the first option when plugin opens
            self.SetLong(Exporter_Button2, ID_CM)
            self.UpdateDlg(self.GetLong(Exporter_Button))
            self.UpdateDlg(self.GetLong(Exporter_Button2))
            return True 
        #-------------------------------------------------------------------------------------------------#

    #_E.X.P.0.R.T__F.O.R.M.A.T.S________________________________________________________#
        ###-FORMATS FUNCTION For Commands -#######################

    #####_M.E.T.E.R.S_(ID_M)#####
        def DAE_1_4_Format_M(self) :
            objs = doc.GetActiveObjects(c4d.GETACTIVEOBJECTFLAGS_CHILDREN)
            if objs == None:
                return

    docTemp = c4d.documents.IsolateObjects(doc, objs)
            if docTemp == None:
                return

    # Set project scale
            unitScale = c4d.UnitScaleData()
            unitScale.SetUnitScale(1.0, c4d.DOCUMENT_UNIT_M)

    bc = c4d.BaseContainer()
            bc[c4d.DOCUMENT_DOCUNIT] = unitScale
            docTemp.SetDocumentData(c4d. DOCUMENTSETTINGS_DOCUMENT, bc)
            #c4d.CallCommand(100004821, 100004821) # Paste
            #c4d.CallCommand(60000, 5) # Export Filter for DAE 1.4 in R16 and r17
            c4d.documents.KillDocument(docTemp)
            return True
        def Three_DS_Format_M(self) :        
            c4d.CallCommand(100004820, 100004820) # Copy
            c4d.CallCommand(12094, 12094) # New
            c4d.CallCommand(600000032, 600000032) # PS_M_id
            c4d.CallCommand(100004821, 100004821) # Paste
            c4d.CallCommand(60000, 11) # Export Filter 3ds
            c4d.CallCommand(12664, 12664) # Close
            return True
        def FBX_Format_M(self) :
            c4d.CallCommand(100004820, 100004820) # Copy
            c4d.CallCommand(12094, 12094) # New
            c4d.CallCommand(600000032, 600000032) # PS_M_id
            c4d.CallCommand(100004821, 100004821) # Paste
            c4d.CallCommand(60000, 9) # Export Filter
            c4d.CallCommand(12664, 12664) # Close
            return True
        def OBJ_Format_M(self) :
            c4d.CallCommand(100004820, 100004820) # Copy
            c4d.CallCommand(12094, 12094) # New
            c4d.CallCommand(600000032, 600000032) # PS_M_id
            c4d.CallCommand(100004821, 100004821) # Paste
            c4d.CallCommand(60000, 14) # Export Filter - obj
            c4d.CallCommand(12664, 12664) # Close
            return True 
        #-----------------------------------------------
        ###########_C.E.N.T.I.M.E.T.E.R.S_(ID_CM)###################
        def DAE_1_4_Format_CM(self) :
            c4d.CallCommand(100004820, 100004820) # Copy
            c4d.CallCommand(12094, 12094) # New
            c4d.CallCommand(600000031, 600000031) # PS_CM_id[10601]
            c4d.CallCommand(100004821, 100004821) # Paste
            c4d.CallCommand(60000, 5) # Export Filter for DAE 1.4 in R16 and r17
            c4d.CallCommand(12664, 12664) # Close 
            self.Close()
            return True
        def Three_DS_Format_CM(self) :        
            c4d.CallCommand(100004820, 100004820) # Copy
            c4d.CallCommand(12094, 12094) # New
            c4d.CallCommand(600000031, 600000031) # PS_CM_id[10601]
            c4d.CallCommand(100004821, 100004821) # Paste
            c4d.CallCommand(60000, 11) # Export Filter 3ds
            c4d.CallCommand(12664, 12664) # Close
            return True
        def FBX_Format_CM(self) :
            c4d.CallCommand(100004820, 100004820) # Copy
            c4d.CallCommand(12094, 12094) # New
            c4d.CallCommand(600000031, 600000031) # PS_CM_id[10601]
            c4d.CallCommand(100004821, 100004821) # Paste
            c4d.CallCommand(60000, 9) # Export Filter
            c4d.CallCommand(12664, 12664) # Close
            return True
        def OBJ_Format_CM(self) :
            c4d.CallCommand(100004820, 100004820) # Copy
            c4d.CallCommand(12094, 12094) # New
            c4d.CallCommand(600000031, 600000031) # PS_CM_id[10601]
            c4d.CallCommand(100004821, 100004821) # Paste
            c4d.CallCommand(60000, 14) # Export Filter - obj
            c4d.CallCommand(12664, 12664) # Close
            return True

    #_T.H.E__C.O.M.M.A.N.D.S__F.U.N.C.T.I.O.N.S___________________________________________________________________________________________________________________________#
        def Command (self, id, msg) :
            if id == UI_BT_Export:
                if self.GetLong(10010)==ID_M: #<-------| if meters Check in the ComboxBox then excute the formats in the following of Meters List|
                    if self.GetLong(10004)==DAE_1_4:
                        self.DAE_1_4_Format_M()

    if self.GetLong(10004)==thee_Ds:
                        self.Three_DS_Format_M()

    if self.GetLong(10004)==FBX_ALL:
                        self.FBX_Format_M()

    if self.GetLong(10004)==W_Obj:
                        self.OBJ_Format_M()

    if self.GetLong(10004)==123346:
                        gui.MessageDialog('Sorry! \n MDL file format is not Supported at this time, \n this feature will be available in the future. \n This apart of C4DtoFlightSim SDK')                 
                    
                    elif self.GetLong(10004)==Exporter_Button:
                        gui.MessageDialog('Error 299 :Please Select A Export Format\nin the drop down list\nand have a good day!') 
                        print "Please Select A Export Format" 
                elif self.GetLong(10010)==ID_CM:
                    if self.GetLong(10004)==DAE_1_4:
                        self.DAE_1_4_Format_CM()

    if self.GetLong(10004)==thee_Ds:
                        self.Three_DS_Format_CM()

    if self.GetLong(10004)==FBX_ALL:
                        self.FBX_Format_CM()    
                    
                    if self.GetLong(10004)==FBX_ALL:
                        self.OBJ_Format_CM()

    if self.GetLong(10004)==123346:
                        gui.MessageDialog('Sorry! \n MDL file format is not Supported at this time, \n this feature will be available in the future. \n This apart of C4DtoFlightSim SDK')                 
                    elif self.GetLong(10004)==Exporter_Button:
                        gui.MessageDialog('Please Select A Export Format \n And have a good day!') 
                        print "Please Select A Export Format"
            elif id==ABOUT["id"]:
                self.About()
                return True
            elif id==Check_for_Updates["id"]:
                self.Check_for_Updates()
                return True            
            return True 
        #____END OF Comands____#

    #_Addons Menu on top =(About, Check for Updates)
            #_About In ifo ________#
        def About(self) :
            # MENU ITEM - About
            # Open a messagebox with about info
            gui.MessageDialog("This is the Selected Object Exporter from FlightSim SDK\nfor Cinema 4D Users\n---------------\nThis Plugin let you Export the Selected Object\nfrom your scene.\n---------------\nCreated By Ashton Rolle,Creswell Gould and Beris Omerović\nEmail Us: ( the_ashtonrolle@outlook.com)\n---------------\nQuantumDrop Studios-Copyrights 2015", c4d.GEMB_OK)
            return True
            #_CHeck for Updates____#
        def Check_for_Updates(self) :
            self.Dialog2 = UpdateDialog()
            self.Dialog2.Open(dlgtype=c4d.DLG_TYPE_ASYNC, defaultw=400, defaulth=150, xpos=-1, ypos=-1)
            return True
      
    #____The Plugin Info and Plugin Register_______#
    class SelectedObjectExporter(c4d.plugins.CommandData) :

    dialog = None

    def Init(self, op) :
            return True

    def Message(self, type, data) :
            return True

    def Execute(self, doc) :
            if self.dialog is None:
                self.dialog = SelectedObjectExporterDialog()
            return self.dialog.Open(dlgtype=c4d.DLG_TYPE_ASYNC, pluginid=PLUGIN_ID, defaultw=320, defaulth=200)

    if __name__ == '__main__':
        bmp = c4d.bitmaps.BaseBitmap()
        dir, file = os.path.split(__file__)
        fn = os.path.join(dir, "res/Icons", "Icon_3.png")
        bmp.InitWith(fn)
        print "Selected Object Exporter loaded."
        result = plugins.RegisterCommandPlugin(PLUGIN_ID, "SelectedObjectExporter", 0, bmp, "SelectedObjectExporter", SelectedObjectExporter())



  • On 17/09/2015 at 02:14, xxxxxxxx wrote:

    Hi,

    please don't get this wrong, but I won't start debugging your code without a real question or error description. Also it looks like you completely ignored the code I posted.
    Always remember, we have to support a lot of developers (not only the ones present in this forums). Please help us to help you.



  • On 17/09/2015 at 18:56, xxxxxxxx wrote:

    Sorry bro it not that, your code works! its just, it does not work when i put the code of the ( def DAE_1_4_Format_M(self) : ) thats the thing and i like your code lol , and that why i say what if i wanted to call out to a .py file  in the res folder and excute it,  than script folder and it would be to still on how to do this Andreas
    It would be cool and i mix script up to take a look : I can give it a name and it will export 
    def main() :
        objs = doc.GetActiveObjects(c4d.GETACTIVEOBJECTFLAGS_CHILDREN)
        if objs == None:
            return
        
        # Get a fresh, temporary document with only the selected objects
        docTemp = c4d.documents.IsolateObjects(doc, objs)
        if docTemp == None:
            return    
        
        
        # Set project scale
        unitScale = c4d.UnitScaleData()
        unitScale.SetUnitScale(1.0, c4d.DOCUMENT_UNIT_M)

    bc = c4d.BaseContainer()
        bc[c4d.DOCUMENT_DOCUNIT] = unitScale
        docTemp.SetDocumentData(c4d. DOCUMENTSETTINGS_DOCUMENT, bc)    
        
        # Get Alembic export plugin, 1028082 is its ID
        plug = plugins.FindPlugin(1022316, c4d.PLUGINTYPE_SCENESAVER)
        if plug is None:
            return
        
        # Get a path to save the exported file
        filePath = storage.LoadDialog(title="Save File for COLLADA 1.4 Export", flags=c4d.FILESELECT_SAVE, force_suffix="dae")
        if filePath is None:
            return
            
            # Finally export the document
        if documents.SaveDocument(docTemp, filePath, c4d.SAVEDOCUMENTFLAGS_EXPORTDIALOG, 1022316) :
            print "Document successfully exported to:"
            print filePath
        else:
            print "Export failed!"

    c4d.documents.KillDocument(docTemp)

    But the only thing is getting it to work with my code i had setup for , thats all. 
    but Sorry Again Andreas



  • On 25/09/2015 at 10:21, xxxxxxxx wrote:

    For everybody else reading this thread:
    Ashton sent me his code. And it turned out, I didn't understand (sorry for that, Ashton) his question correctly.
    Instead of calling the scripts he had prepared, he wanted to use a direct implementation. All he was missing, was to get the active document (c4d.documents.GetActiveDocument()) in order to get the code I posted working.
    Again: Sorry, for being so slow-witted, Ashton.



  • On 26/09/2015 at 08:16, xxxxxxxx wrote:

    It's ok , but WERE YOU PUT IT CAUSE I SO LOST! 
    sorry but can u message me on that Andreas! 
       
    def DAE_1_4_Format_M(self) :

    c4d.documents.GetActiveDocument()
    

    objs = doc.GetActiveObjects(c4d.GETACTIVEOBJECTFLAGS_CHILDREN)
            if objs == None:
                return
        
                # Get a fresh, temporary document with only the selected objects
            docTemp = c4d.documents.IsolateObjects(doc, objs)
            if docTemp == None:
                return

    # Set project scale
            unitScale = c4d.UnitScaleData()
            unitScale.SetUnitScale(1.0, c4d.DOCUMENT_UNIT_M)

    bc = c4d.BaseContainer()
            bc[c4d.DOCUMENT_DOCUNIT] = unitScale
            docTemp.SetDocumentData(c4d. DOCUMENTSETTINGS_DOCUMENT, bc)
                
            filePath = storage.LoadDialog(title="Save File for COLLADA Export", flags=c4d.FILESELECT_SAVE, force_suffix="dae")
            if filePath is None:
                return
            
            # Finally export the document
            if documents.SaveDocument(docTemp, filePath, c4d.SAVEDOCUMENTFLAGS_EXPORTDIALOG, 1022316) :
                print "Document successfully exported to:"
            else:
                print "Export failed!"
            
            c4d.documents.KillDocument(docTemp)

    return True

    Cheers,
    Ashton



  • On 26/09/2015 at 13:09, xxxxxxxx wrote:

    Sorry, I wanted to send it via mail, but I messed it up. I just sent another mail.
    What's the reason for posting code again?



  • On 26/09/2015 at 14:27, xxxxxxxx wrote:

    Originally posted by xxxxxxxx

    he wanted to use a direct implementation.

    ok, he wanna  something direct, why not to use something such http://pycollada.readthedocs.org/en/v0.4/intro.html or autodesk fbx20xx_x_fbxpythonsdk_os



  • On 26/09/2015 at 15:07, xxxxxxxx wrote:

    Thanks for the tips for Andreas and I will have the plugin up and run in a week thanks and i will send you a copy bro.



  • On 29/09/2015 at 10:04, xxxxxxxx wrote:

    Thanks for Everyone Help guys on the Forum! everything is working Check this video out!
    and this were you can get the plugin too! 
    Selected Object Exporter Plugin for Cinema 4D (Beta Ready) 
    https://www.youtube.com/watch?v=GaTAqyQMzbk&feature=youtu.be

    Enjoy,Cheers,
    Ashton


Log in to reply