Add a combobox userdata using python



  • On 26/09/2014 at 11:47, xxxxxxxx wrote:

    How can I add a userdata combobox using python?

    Define a long and adding children to it does not work.

                bc = c4d.GetCustomDatatypeDefault(c4d.DTYPE_LONG) # Create default container
                bc[c4d.DESC_NAME] = "Point" # Rename the entry
                element1 = node.AddUserData(bc) # Add userdata container
                node[element1] = 2 # Assign a value
                
                #DTYPE_CHILDREN
                bc = c4d.GetCustomDatatypeDefault(c4d.DTYPE_CHILDREN) # Create default container
                bc[c4d.DESC_NAME] = "Name 01" # Rename the entry
                element11 = node.AddUserData(bc) # Add userdata container
                node[element11] = "Name 01" # Assign a value
    


  • On 26/09/2014 at 13:45, xxxxxxxx wrote:

    import c4d  
    def main() :  
       
      obj = doc.GetActiveObject()  
      if not obj: return False  
        
      #This code block creates a ComboButton type button gizmo  
      cbgizmo = c4d.GetCustomDataTypeDefault(c4d.DTYPE_LONG)  
      cbgizmo[c4d.DESC_NAME] = "My Combo"  
      cbgizmo[c4d.DESC_CUSTOMGUI] = c4d.CUSTOMGUI_CYCLE  
        
      #Create a list of names and put them into a container      
      names = c4d.BaseContainer()  
      names.SetString(0,"Scott")  
      names.SetString(1,"Jim")  
      names.SetString(2, "Jane")  
      cbgizmo.SetContainer(c4d.DESC_CYCLE, names)  
      
      entries = op.AddUserData(cbgizmo)  
        
      #This sets the ComboButton to the second entry by default("Jim")  
      #Because you might not want the first entry to be the default  
      op[entries] = 1  
                
      c4d.SendCoreMessage(c4d.COREMSG_CINEMA, c4d.BaseContainer(c4d.COREMSG_CINEMA_FORCE_AM_UPDATE))  
      c4d.EventAdd()  
      
    if __name__=='__main__':  
      main()
    

    -ScottA



  • On 27/09/2014 at 00:50, xxxxxxxx wrote:

    Great, thank you.

    And I guess, adding or changing the list of names is then just using BaseList2D.SetUserDataContainer().



  • On 27/09/2014 at 07:31, xxxxxxxx wrote:

    Edit or add things to the "names" BaseContainer() to change the things in the list.
    SetUserDataContainer() updates the UD after you've changed something inside it.

    -ScottA


Log in to reply