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