title


genchansansanは今日も戦う。

2016/10/25

nodeが作られた瞬間にPythonでそのnodeに何かしたいとき。

先日同僚に聞かれて、ちょっと調べていたらhoudiniのhelpに載ってのですが、
nodeが作られたタイミングをイベントとして受け取って、何かPythonで処理したい時のscript。



これでname conventionやらcolor conventionがしやすくなるし、自作したPyQt Panelとリアルタイムな感じでやり取りできるので、便利そう。
サンプルなので、attribute wrangleのノードの色変えるだけです。。。
def setUpCallback(node):
node.addEventCallback((hou.nodeEventType.ChildCreated,), onNodeChange)
def onNodeChange(**kwargs):
childNode = kwargs["child_node"]
setUpCallback(childNode)
setClr(childNode)
def allSubChildren(node):
yield node
for child_node in node.children():
for n in allSubChildren(child_node):
yield n
####################################
def setClr(node):
if node.type().name() == "attribwrangle":
attribClr = hou.Color((1.0,0.8,0))
node.setColor(attribClr)
####################################
for node in allSubChildren(hou.node("/")):
#node.removeAllEventCallbacks()
setUpCallback(node)
helpのよりシンプルにしてありますが、
yieldって使ったことなくて勉強になりました。