Solved Python Tag not updating

Hi, I have a null with some User Data on it and a Python tag attached to it. When I make changes in the User Data, the Python tag does not seem to see them. If I make a slight change to the Python tag, then it does. Is there a way to get the Python tag to react to User Data changes without modifying it? Thanks.

Hi @Swinn, thanks for reaching out us.

With regard to your issue, please have a look at this thread where it was discussed how to have a python tag reacting to a button userdata assigned to the tag's parent. In your case you might be more interested in parsing the events stream until you encounter a MSG_DESCRIPTION_POSTSETPARAMETER .

import c4d

def message(msg_type, data):
    if msg_type == c4d.MSG_NOTIFY_EVENT:
        event_data = data['event_data']
        msg_id = event_data['msg_id']
        if msg_id == c4d.MSG_DESCRIPTION_POSTSETPARAMETER:
            desc_id = event_data['msg_data']['descid']
            if desc_id[1].id == 1: # The ID of the User Data
                print "A little bit more off"
                mtx =  op.GetObject().GetMg()
                mtx.off = mtx.off + c4d.Vector(10,0,0)
                op.GetObject().SetMg(mtx)

def main():
    obj = op.GetObject()

    # Check if we already listen for message
    if not obj.FindEventNotification(doc, op, c4d.NOTIFY_EVENT_MESSAGE):
        obj.AddEventNotification(op, c4d.NOTIFY_EVENT_MESSAGE, 0, c4d.BaseContainer())

Rest to be told that, for some yet-to-understand reason, the Python console doesn't print the text A little bit more off on the user changing the userdata, but this is neglectable if you're interested in the real action that the Python tag executes.

Best, R

With regard to logging-lagging @m_adam has pointed me to this other thread.
If you rewrite my code as

...
            if desc_id[1].id == 1: # The ID of the User Data
                txt = "A little bit more off"
                pythonLogger = maxon.Loggers.Python()
                pythonLogger.Write(maxon.TARGETAUDIENCE.ALL, txt, maxon.MAXON_SOURCE_LOCATION(1), maxon.WRITEMETA.UI_SYNC_DRAW)
                mtx =  op.GetObject().GetMg()
                mtx.off = mtx.off + c4d.Vector(10,0,0)
                op.GetObject().SetMg(mtx)

you'll be fine to go :)

Cheers, R

Thanks! I will test this out.

@r_gigante said in Python Tag not updating:

if desc_id[1].id == 1: # The ID of the User Data
txt = "A little bit more off"
pythonLogger = maxon.Loggers.Python()
pythonLogger.Write(maxon.TARGETAUDIENCE.ALL, txt, maxon.MAXON_SOURCE_LOCATION(1), maxon.WRITEMETA.UI_SYNC_DRAW)
mtx = op.GetObject().GetMg()
mtx.off = mtx.off + c4d.Vector(10,0,0)
op.GetObject().SetMg(mtx)

I get an error message Traceback (most recent call last):
File "Python UD Integration Test", line 11, in message
NameError: global name 'maxon' is not defined

import maxon

Done. Fixed. Duh on my part. :)
Thanks!

Now getting this error:

Traceback (most recent call last):
File "Python UD Integration Test", line 13, in message
File "/Applications/MAXON/Cinema 4D R20/resource/modules/python/libs/python27/maxon/interface.py", line 287, in MAXON_SOURCE_LOCATION
return SourceLocation(loc[0], loc[1])
File "/Applications/MAXON/Cinema 4D R20/resource/modules/python/libs/python27/maxon/interface.py", line 274, in init
Data.init(self, self._dt)
File "/Applications/MAXON/Cinema 4D R20/resource/modules/python/libs/python27/maxon/data.py", line 104, in init
self._data = Data_Create(self._dt._data, C)
TypeError: failed to set member 'file', caused by (exceptions.TypeError: unable to convert maxon.datatype.DataType to @char)

make sure to pass a str value aka str(yourMessage)

if this doesn't solve the issue open a new topic :)

Cheers,
Maxime