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


Log in to reply