How to set a callback in Python State on nodes parameters?

   3946   2   0
User Avatar
Member
151 posts
Joined: June 2019
Online
I want to create a function inside python state to respond on parameter change.

Currently I'm doing some interop through state command in python module. So I have a callback in module, something like this:

import toolutils as tu

def on_parm_changed(kwargs):
    try:
        tu.sceneViewer().runStateCommand("clear", args={"args":kwargs})
    except:
        pass

That way I can be aware of parameters changing inside state. I'm just wondering if there's another way to do that (this one looks cumbersome)?

I want exactly the node parameter, not a parameter bound via hou.ViewerStateTemplate.bindParameter() (or may be a way that I can bind existing node parm to the state so I'd receive onParmChangeEvent)
Edited by elovikov - Dec. 16, 2020 09:47:45
User Avatar
Staff
450 posts
Joined: Feb. 2018
Offline
This is how it's done in the $HH/viewer_states/examples/advanced_drawable_demo.hip scene:
    def onEnter(self,kwargs):
        node = kwargs['node']
        if not self.geometry:
            self.geometry = node.geometry()

        if self.geometry:        
            self.line.setGeometry(self.geometry)
            self.face.setGeometry(self.geometry)
            self.point.setGeometry(self.geometry)
            self.vector.setGeometry(self.geometry)
            
        self.cursor_text.show(True)
        node.addEventCallback([hou.nodeEventType.ParmTupleChanged], self.updateNodeParmCB)

    def updateNodeParmCB(self, **kwargs):
        """ Update the ramp dirty cache when a node ramp parm is 
            modified 
        """
        parm = kwargs['parm_tuple'][0]
        if parm.name() in self.ramp_dirty.keys():
            self.ramp_dirty[parm.name()] = True
        elif parm.name().startswith('cramp_face'):
            self.ramp_dirty['cramp_face'] = True
Edited by mabelzile - Dec. 17, 2020 08:50:56
User Avatar
Member
151 posts
Joined: June 2019
Online
Great! Thank you very much, that looks much cleaner.
  • Quick Links