detect a material has changed

  • On 25/08/2014 at 12:51, xxxxxxxx wrote:

    Hi there,

    how can I detect that the user has changed a property of a shader which is used in a material? For example in the color channel.

    Thanks in advance

  • On 25/08/2014 at 15:23, xxxxxxxx wrote:

    Hi Monkeytack,

    I don't think there's a built-in method for detecting that specific change. In similar situations (detecting changes in Layer Selection, etc) - I've cached a copy of the object I'm monitoring and then checked it against the live copy every time there's a c4d.EVMSG_CHANGE message.


  • On 28/08/2014 at 04:27, xxxxxxxx wrote:

    thanks for the reply!

    do you have an example script?
     I was not able to implement your description?

    I have a tag plugin and I want to notify changes of the material which is, as the tag plugin, assigned to an object.
    How can I notify an EventMessage in my tag plugin and do the cache?


  • On 28/08/2014 at 13:07, xxxxxxxx wrote:


    a tag's Execute function is called pretty much every time something happens in the scene. So you could check there if the material's dirty state changed:

    class ExamplePythonTag(plugins.TagData) :  
      materialDirtyStatus = 0  
      def Init(self, node) :  
          # init your plugin here  
          return True  
      def Execute(self, tag, doc, op, bt, priority, flags) :  
          # search for texture tag  
          textureTag = op.GetTag(c4d.Ttexture)  
          if textureTag != None:  
              # get material  
              material = textureTag.GetMaterial()  
              if material != None:  
                  # get dirty state  
                  dirty = material.GetDirty(c4d.DIRTY_DATA)  
                  # compare  
                  if dirty != self.materialDirtyStatus:  
                      print("material changed...")  
                      self.materialDirtyStatus = dirty  
          return c4d.EXECUTIONRESULT_OK  

    best wishes,

  • On 02/09/2014 at 02:47, xxxxxxxx wrote:

    Hello Sebastian,

    thank you for the reply!
    It works !

    best wishes

Log in to reply