Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush Python API
      • ZBrush GoZ API
      • Code Examples on Github
    • Forum
    • Downloads
    • Support
      • Support Procedures
      • Registered Developer Program
      • Plugin IDs
      • Contact Us
    • Categories
      • Overview
      • News & Information
      • Cinema 4D SDK Support
      • Cineware SDK Support
      • ZBrush 4D SDK Support
      • Bugs
      • General Talk
    • Unread
    • Recent
    • Tags
    • Users
    • Login

    Auto Open Preferences directly to the Settings

    Scheduled Pinned Locked Moved PYTHON Development
    12 Posts 0 Posters 935 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • H Offline
      Helper
      last edited by

      On 05/09/2016 at 19:08, xxxxxxxx wrote:

      I did it like this , here the code :
      ________________________________________________________________________
      import c4d
      from c4d import gui
      #Welcome to the world of Python

      #--| The Main C4D Formats ID's |--#
      Dae14_ID = 1022316

      def main() :

      FilesTool=c4d.plugins.FindPlugin(Dae14_ID, c4d.PrefsLib_OpenDialog(Dae14_ID))
              
      if __name__=='__main__':
          main()
      _________________________________________________________________________

      IT Work Andreas!
      thank you again!😉😄🙂  You the best Andreas!

      1 Reply Last reply Reply Quote 0
      • H Offline
        Helper
        last edited by

        On 06/09/2016 at 00:10, xxxxxxxx wrote:

        Hi Ashton,

        yes, it works, but only due to the tolerance of Python.
        What happens in your code:
        First PrefsLib_OpenDialog() gets called. This succeeds, the prefs dialog opens. The function will return True. Then this return value is fed into the type parameter of FindPlugin(). This will probably fail, due to the strange type parameter it got passed. And the return value of FindPlugin() is then assigned to a variable that gets never used afterwards.
        So, yes, it works, but the code is a bit wonky.

        Simply doing this is enough:

        c4d.PrefsLib_OpenDialog(Dae14_ID)
        
        1 Reply Last reply Reply Quote 0
        • H Offline
          Helper
          last edited by

          On 06/09/2016 at 07:24, xxxxxxxx wrote:

          Is there any way to unfold the branches in that dialog?
          This does not work. It only makes it active.

          c4d.PrefsLib_OpenDialog(465001638)   #<---The Import/Export branch
          

          -ScottA

          1 Reply Last reply Reply Quote 0
          • H Offline
            Helper
            last edited by

            On 06/09/2016 at 08:10, xxxxxxxx wrote:

            Hi Scott,

            there's no option to unfold the branches, but if you open the prefs dialog of a specific im-/exporter (like in Ashton's example), the branch gets unfolded as needed.

            1 Reply Last reply Reply Quote 0
            • H Offline
              Helper
              last edited by

              On 06/09/2016 at 08:39, xxxxxxxx wrote:

              The branch always stays closed for me in R13. It never unfolds.

              -ScottA

              1 Reply Last reply Reply Quote 0
              • H Offline
                Helper
                last edited by

                On 06/09/2016 at 08:44, xxxxxxxx wrote:

                Hi Scott,

                just tested and yes, you are right. In R13 it's not unfolding. This behavior changed with R15, since then the tree properly unfolds.

                1 Reply Last reply Reply Quote 0
                • H Offline
                  Helper
                  last edited by

                  On 06/09/2016 at 08:48, xxxxxxxx wrote:

                  OK. Thanks.

                  Can you tell me quick if we can add things to the preferences with Python?
                  AFAIK. The PrefsDialogObject class is still not supported. So I don't see any way to add custom prefs using Python.
                  I'll ask this question in a new thread if you want.

                  -ScottA

                  1 Reply Last reply Reply Quote 0
                  • H Offline
                    Helper
                    last edited by

                    On 06/09/2016 at 08:49, xxxxxxxx wrote:

                    Yep, please open a new thread to keep everything tidy.

                    1 Reply Last reply Reply Quote 0
                    • H Offline
                      Helper
                      last edited by

                      On 06/09/2016 at 16:51, xxxxxxxx wrote:

                      Thanks again Andreas , so like this and also i hope who else see this it post, it can help them. This is a mock up example plugin code:

                        
                      # Plugin: C4DPythonDevelopmentExample
                      # Developer: Ashton Rolle AKA AP Ashton
                        
                      #--------| Imports |-------#
                      #-------------------------------------#
                      import c4d
                      from c4d import plugins
                      import os
                      import webbrowser
                      from c4d import gui, bitmaps
                      from c4d import documents, storage
                      import collections
                      import urllib
                      import sys, subprocess
                      import math
                      #--------------------------------------#
                        
                      #---------| Plugin ID Register |------------------------#
                      PLUGIN_ID = 1000001  # Get yours at www.plugincafe.com and Plugin IDs 1000001-1000010 are reserved for development.
                        
                      #---------| Plugin ID Name |------------------------#
                      PLUGIN_Name = "C4DPythonDevelopmentExample" # Your Plugin Name
                        
                      #--| ID's for Dialog User Interface, UI Buttons, and Check Buttons |--# 
                      UI_FormatsDropDownMenu = 1001
                      UI_DevelopmentSettingsGearButton = 1004
                      #--| UI Formats IDS for the format List |--#
                      DAE_1_4 = 1011
                      FBX_ALL = 1012
                      #--| The Main C4D Formats ID's |--#
                      fbx_ID = 00000000 # Get Main C4D Export Formats ID
                      dae1_4_ID = 00000000 # Get Main C4D Export Formats ID
                        
                      #------| UI  Layout |--#
                      class C4DPythonDevelopmentExampleDialog(c4d.gui.GeDialog) :
                        
                          def CreateLayout(self) :
                              self.SetTitle(PLUGIN_Name)   # Your Title for the Main Dialog or You can put it like this: self.SetTitle("C4DPythonDevelopmentExample")      
                              self.AddStaticText(0, c4d.BFH_CENTER, 0, 0, "C4DPythonDevelopmentExample", c4d.BORDER_WITH_TITLE_BOLD)
                              self.AddSeparatorH(200, flags=c4d.BFH_MASK)      
                              self.GroupBegin(201, c4d.BFH_MASK, 1, 0, "Development Settings:")
                              self.GroupBorder(c4d.BORDER_GROUP_IN)
                              self.GroupBorderSpace(20, 5, 20, 5)
                              self.GroupBegin(201, c4d.BFH_MASK, 2, 0, "")
                              self.format_list = self.AddComboBox(UI_FormatsDropDownMenu, c4d.BFH_MASK, 200, 10, False) # DROP MENU using a ComboBox and in the list that is (AddChild) .
                              self.AddChild(UI_FormatsDropDownMenu, DAE_1_4, 'COLLADA 1.4 (*.dae)')
                              self.AddChild(UI_FormatsDropDownMenu, FBX_ALL, 'FBX (*.fbx)')
                      	#---| Adding a UI Custom Image  Button |---#      
                              bc = c4d.BaseContainer()
                              path = os.path.join(os.path.dirname(__file__), "res/Icons+UI Icons", "ID_OPERATOR_BITMAP.png")  #The path to the image 
                              bc.SetFilename(UI_DevelopmentSettingsGearButton, path)  # Add this location info to the conatiner 
                              bc.SetLong(c4d.BITMAPBUTTON_BORDER, c4d.BORDER_ROUND) # Sets the border to look like a button
                              self.myBitButton=self.AddCustomGui(UI_DevelopmentSettingsGearButton, c4d.CUSTOMGUI_BITMAPBUTTON, "", c4d.BFH_MASK, 20, 0, bc)
                              self.myBitButton.SetImage(path, False)  # Add the image to the button
                              self.GroupEnd()          
                              self.GroupEnd()                
                              return True        
                          #--| The Set State of the Layout Interface |--#
                          def InitValues(self) :
                              self.SetLong(UI_FormatsDropDownMenu, UI_FormatsDropDownMenu)        
                              return True
                        
                          #--| F.U.N.C.T.I.O.N.S |--#
                          def DevelopmentSettings(self) :
                              # This execute when user click on the gear settings button and # Check For Main Format ID from #--| The Main C4D Formats ID's |--#
                              if self.GetLong(UI_FormatsDropDownMenu)==DAE_1_4:
                                  ExportPLUGIN_ID = dae1_4_ID
                                  c4d.PrefsLib_OpenDialog(ExportPLUGIN_ID)
                                  return True     
                        
                        
                      #--| C.O.M.M.A.N.D.S to Execute the F.U.N.C.T.I.O.N.S as been Set |-------------------------------------------------------#
                          def Command (self, id, msg) :
                        
                              if id == UI_DevelopmentSettingsGearButton:
                                  self.DevelopmentSettings()
                        
                      #------|Initialize|--------------------|The Plugin Info and Plugin Register|----------------------------------------------------#
                      class PYTHONDevelopmentData(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 = C4DPythonDevelopmentExampleDialog()
                                  print "C4DPythonDevelopmentExample  is Open"
                              return self.dialog.Open(dlgtype=c4d.DLG_TYPE_ASYNC, pluginid=PLUGIN_ID, defaultw=210, defaulth=35)
                        
                          def RestoreLayout(self, sec_ref) :
                              if self.dialog is None:
                                  self.dialog = C4DPythonDevelopmentExampleDialog()        
                              return self.dialog.Restore(pluginid=PLUGIN_ID, secret=sec_ref)
                        
                          def ExecuteOptionID(self, doc, plugid, subid) :
                              return True        
                        
                       #-----------------------------------------------------------------------------------------------------------------------------------#
                      if __name__ == '__main__':
                          bmp = c4d.bitmaps.BaseBitmap()
                          dir, file = os.path.split(__file__)
                          fn = os.path.join(dir, "res/Icons", "icon_PYTHONDevelopment.png")
                          bmp.InitWith(fn)
                          print "C4DPythonDevelopmentExample \nPlugin Initialized and By AP Ashton Rolle."
                          result = plugins.RegisterCommandPlugin(id=PLUGIN_ID, # Plugin Register ID
                                                                 str=PLUGIN_Name,  # This is for the Plugin Name to show in the Plugins list. 
                                                                 info=0,  # if you want a option Button or have a ExecuteOptionID c4d.PLUGINFLAG_COMMAND_OPTION_DIALOG | c4d.PLUGINFLAG_COMMAND_HOTKEY,
                                                                 icon=bmp, 
                                                                 help="What C4DPythonDevelopmentExample is do", 
                                                                 dat=PYTHONDevelopmentData())              
                      

                      Thanks and,
                      Cheers Guys,
                      AP Ashton

                      1 Reply Last reply Reply Quote 0
                      • H Offline
                        Helper
                        last edited by

                        On 07/09/2016 at 06:11, xxxxxxxx wrote:

                        Hi Ashton,

                        thanks for sharing your code. In general I think, code is better shared via GitHub or something alike. Way easier to browse and share.

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post