add Userdata - incorrect

On 04/05/2015 at 22:08, xxxxxxxx wrote:


I try to add User Data by getting from one Object and add them to an other.

This Code run without error - but I need to open the User Data Manager to see the User Data in my Object.

newuserdata = None 
    	if fix != None:
	    	for id, bc in fix.GetUserDataContainer() :
	    	    if id == foundid:
	    	    	newuserdata = bc
if newuserdata != None:
	node = c4d.BaseObject(1030625)
	newud = node.AddUserData(newuserdata)
	node[newud] = fix[foundid]

On 06/05/2015 at 02:17, xxxxxxxx wrote:


You can simply call c4d.gui.ActiveObjectManager_SetObject() with ACTIVEOBJECTMODE_OBJECT flag, the object and its new user data ID (pass 0 for flags parameter).

On 06/05/2015 at 02:56, xxxxxxxx wrote:

Hi Yannick,

that not solve the problem - the user data is still not visible until i click into the user data manager


On 06/05/2015 at 07:54, xxxxxxxx wrote:


ActiveObjectManager_SetObject() should show the Object+User Data tabs in the attribute manager.
Are you sure it is called with the complete added user data ID? A user data ID has a first level of ID ID_USERDATA then a second level with the ID beginning at 1.

On 06/05/2015 at 15:53, xxxxxxxx wrote:

i tried this

newud = node.AddUserData(newuserdata)
		   		node[newud] = fix[foundid]

On 06/05/2015 at 23:04, xxxxxxxx wrote:

It seems ActiveObjectManager_SetObject() doesn't work well with child objects. You can simply call doc.SetActiveObject(node) instead.

On 07/05/2015 at 02:20, xxxxxxxx wrote:

Hi Yannick,

doc.SetActiveObject(node)  will select the object but it don`t change anything to the user data -  I need to open the User Data Manager to see the User Data in my Object.

On 07/05/2015 at 02:30, xxxxxxxx wrote:

Sorry, I had not read well your first post. I'm afraid there's no way to open the Manage User Data dialog.

On 07/05/2015 at 02:42, xxxxxxxx wrote:

There is no need if the user data will show up by adding them :)

On 07/05/2015 at 07:39, xxxxxxxx wrote:

Hi guys,

I was interested in this task, that´s why I decided to take part...

With this snippet you can port multiple userdata and it works as expected.
The if clause with the desc id depends on you, for sure.

One question; what kind of object is this : node = c4d.BaseObject(1030625) ?

import c4d  
from c4d import gui  
def main() :  
  newUserData = []  
  if op != None:  
      userData = op.GetUserDataContainer()  
      if userData!=[]:  
          for i in xrange(len(userData)) :  
              desc_id = userData[i][0]  
              if desc_id:  
                  con = userData[i][1]  
                  print i,desc_id,con  
      if newUserData != None:  
          node = c4d.BaseObject(c4d.Onull)  
          for i in xrange(len(newUserData)) :                 
              newud = node.AddUserData(newUserData[i][1])  
              node[newud] = op[newUserData[i][0]]  

Best wishes

On 14/05/2015 at 08:21, xxxxxxxx wrote:

Hey Martin,

thanks for the code - but even with that I see the same behavior - only after opening the user data dialog - i see the user data.

may the problem is not in this code - its in the object - the 1030625 is an own object.

On 14/05/2015 at 11:13, xxxxxxxx wrote:


I'm a ghost without internet access and will not be able to reply back to you.
But there's a common problem with adding User Data that isn't documented.

If you create your UD gizmo. And it doesn't show up right way in the  AM.
Try usng this code at the end to force the AM to redraw itself. And show the new UD you added:

c4d.SendCoreMessage(c4d.COREMSG_CINEMA, c4d.BaseContainer(c4d.COREMSG_CINEMA_FORCE_AM_UPDATE))

-The Ghost