#これはなに?
Houdini Pythonの練習です。
車輪の再開発っぽい気もしますが、「選択中のSOPノードをMergeにつなぐ」という内容。
#スクリプト
selNodes = hou.selectedNodes()
mrgNode = selNodes[0].parent().createNode('merge')
mrgNode.moveToGoodPosition()
mrgNode.setDisplayFlag(True)
mrgNode.setRenderFlag(True)
for i,node in enumerate(selNodes):
mrgNode.setInput(i,node)
#node.moveToGoodPosition()
mrgNode.setSelected(True, clear_all_selected=True)
これをシェルフに追加して、複数ノードを選択してから実行すると
こんな感じに。
Mergeノードが作成され、そこに選択中ノードが一括で接続されます。
##メモ
hou.selectedNodes()
は超定番「いま選択中のを取得」です。リストで返ってきます。
selNodes[0].parent()
でいま選択してるノードが置かれている階層を得ます。そこでcreateNode
メソッドを使ってノードを作ります。createNode('merge')
でMergeSOPが作られます。
moveToGoodPosition()
ネットワークエディタ上で「適当にいい位置に」ノードを移動させてくれます。
後半のforループの中でも使っていますが、あんまり上手い配置にならなかったのでコメントアウトしています。
(コメント解除して動作を比較してみてください。)
mrgNode.setDisplayFlag(True)
mrgNode.setRenderFlag(True)
ノードのディスプレイフラグ、レンダーフラグをONにしています。
for i,node in enumerate(selNodes):
mrgNode.setInput(i,node)
選択中のノードをforループでまわしてます。
さっき作ったMergeノードのsetInput
メソッドにノードを渡すことで、Mergeのインプットにそのノードが接続されます。MayaでいうconnectAttr
的なものです。
setInput
の第一引数では、そのノードを何番目につなぐかを指定できます。enumerate
を使ってループの順番i
を得ているので、それを渡しています。
mrgNode.setSelected(True, clear_all_selected=True)
最後に、さっき作ったMergeノードを選択状態にします。フラグをONにするところに入れてもいいですね。
「選択する」コマンドじゃなくて「選択状態にする」ってところが風情ですね
#参考
selectedNodes
http://www.sidefx.com/docs/houdini15.0/hom/hou/selectedNodes
parent()やmoveToGoodPosition()、setInput()、setSelected()はこちら
http://www.sidefx.com/docs/houdini15.0/hom/hou/Node
setDisplayFlagはこちら
http://www.sidefx.com/docs/houdini15.0/hom/hou/SopNode