Check if an object has changed



  • On 14/05/2014 at 11:24, xxxxxxxx wrote:

    I have a IN_EXCLUDE list that contains splines (parametric or freehand)
    I need to check if any of these splines changed. If it changed position, rotation, scale, point position or, if it is a parametric spline, if any of the parameters changed.
    I tried using IsDirty but it is not working.
    How can I check for any change in the splines of the list?



  • On 14/05/2014 at 16:45, xxxxxxxx wrote:

    It's not the most elegant solution, but you can cache all of the data you want to watch, and then check for changes anytime C4D sends an c4d.EVMSG_CHANGE message via CoreMessage.

    If someone knows of something cleaner with less overhead, I'd love to hear about it.



  • On 14/05/2014 at 17:24, xxxxxxxx wrote:

    I found a way. I will post it here tomorrow. It is very late here now.



  • On 15/05/2014 at 04:03, xxxxxxxx wrote:

    Here is what I did:

    I created a global variable (actually, a variable that exists only in the scope of my plugin class) named "old_changes" and initialized it to zero.
    then, in the GetVirtualObjects method, I used some code similar to this:

    op_list is a IN-EXCLUDE field

    count=op_list.GetObjectCount()
    new_changes=0

    for i in range(count) :
         obj=op_list.ObjectFromIndex(doc,i)
         if obj is not None:
              new_changes+=obj.GetDirty(c4d.DIRTYFLAGS_DATA) + obj.GetDirty(c4d.DIRTY_MATRIX)
              obj.Touch()

    Comparing "new_changes" and "old_chages", if they differ, something was changed in the objects of the list.
    Finally, of course, I set "old_changes" to be equal to "new_changes"


Log in to reply