Drop Down Menu



  • On 19/03/2014 at 12:48, xxxxxxxx wrote:

    How would you add a python plugin to Cinemas top menu? Is it possible to make a drop down for multiple custom plugins?



  • On 20/03/2014 at 01:37, xxxxxxxx wrote:

    Take a look in the Python docs under "Plugin structure" -> "Enhancing the main menu". Just place the example in your pyp, PluginMessage is a function called automatically by C4D.

    Cheers, s_rath



  • On 23/03/2014 at 09:14, xxxxxxxx wrote:

    Is this a new feature that was added recently Sebastien?
    The example in the docs isn't working for me in R13.

    C4DPL_COMMANDLINEARGS: works
    C4DPL_BUILDMENU:  Does not work

      
    #The main.cpp file in C++ is where plugins get registered and other things get loaded when C4D starts up  
    #In Python we can also write some of the C++ functions used in the main.cpp file to do things when C4D opens  
    #We can also add new menus to C4D here  
    #Note: If menus are modified from outside C4DPL_BUILDMENU message, gui.UpdateMenus() needs to be called.  
      
    import c4d  
    import sys,os  
    from c4d import gui,plugins  
      
    #This is a custom method that will insert a new menu into C4D when it starts up  
    def EnhanceMainMenu() :  
      mainMenu = gui.GetMenuResource("M_EDITOR")                    # Get main menu resource  
      pluginsMenu = gui.SearchPluginMenuResource()                  # Get 'Plugins' main menu resource  
      
      menu = c4d.BaseContainer()                                    # Create a container to hold a new menu information  
      menu.InsData(c4d.MENURESOURCE_SUBTITLE, "Scott")              # Set the name of the menu  
      menu.InsData(c4d.MENURESOURCE_COMMAND, "New Scene")           # Add registered default command 'New Scene' to the menu  
      menu.InsData(c4d.MENURESOURCE_SEPERATOR, True)                # Add a separator  
      menu.InsData(c4d.MENURESOURCE_COMMAND, PLUGIN_CMD_5159)       # Add command 'Cube' with ID 5159 to the menu  
      
      submenu = c4d.BaseContainer()                                 # Create a new submenu container  
      submenu.InsData(c4d.MENURESOURCE_SUBTITLE, "Submenu")         # This is a submenu  
      submenu.InsData(c4d.MENURESOURCE_COMMAND, "IDM_SAVE")         # Add registered default command 'Save' to the menu  
      
      menu.InsData(c4d.MENURESOURCE_SUBMENU, submenu)               # Add the submenu  
      
      if pluginsMenu:  
          #Insert menu after 'Plugins' menu  
          mainMenu.InsDataAfter(c4d.MENURESOURCE_STRING, menu, pluginsMenu)  
      else:  
          #Insert menu after the last existing menu ('Plugins' menu was not found)  
          mainMenu.InsData(c4d.MENURESOURCE_STRING, menu)  
      
      
      
    def PluginMessage(id, data) :  
      
      #The console can be accessed upon start up with this method  
      if id==c4d.C4DPL_COMMANDLINEARGS:  
          print sys.argv #print arguments  
          print "Hello World"   
          return True  
      
      return False  #<-- Notice that the method itself must return False(Not True)  
        
      #This is where we check the build status of the menus. And also inserts any new ones  
      if id==c4d.C4DPL_BUILDMENU:  
          EnhanceMainMenu()
    

    -ScottA



  • On 23/03/2014 at 20:24, xxxxxxxx wrote:

    Hi Scott,

    1. Wrap the PLUGIN_CMD_5159 in quotes
    2. remove the return statement from the PluginMessage function

    -Niklas



  • On 24/03/2014 at 08:00, xxxxxxxx wrote:

    Thanks Niklas.

    The Enhance The Main Menu example in the docs doesn't have a return False line in it. So looking at the CL example directly above it. I thought the CL method needed to return False.
    But now I see that it's the PluginMessage() method that's the one that needs to return False.

    -ScottA


Log in to reply