2012-11-28

現在アクティブなviewerに選択している複数のnodeをすべてコネクトする(ただし10個まで?

需要があったから作ってみました。

既存ショートカットの ctrl + i を複数のノードを選択している状態で発動させると、新規にviewerノードを作成してそれに選択していたノードがすべてコネクトされる。これを新規のviewerノードではなく、現在のアクティブなviewerでやりたいというリクエスト。



現在のアクティブなviewerはpythonで、

nuke.activeViewer()

で表すことができる。ただし、これはノードを表しているのではないので、後ろに.node()をつけて、

nuke.activeViewer().node()

で現在アクティブなviewerノードとなる。
あとはこれに、選択したノードすべてを繋ぎたい。「繋ぐ(親ノードを指定)」は、

setInput(番号, ノード)

となる。たとえば、Merge1を3番のパイプに繋ぎたい場合は

nuke.activeViewer().node().setInput(2, nuke.toNode('Merge1'))

となる。3番だけど0起点だから数字は「2」だ。
ともあれ、実際のスクリプトとしては、


selN = nuke.selectedNodes()
curV = nuke.activeViewer().node()
a = 0
for n in selN:
    curV.setInput(a, n)
    a = a + 1

見たいな感じで表現できる。
実行してみると・・・

複数あるノードを

選んで実行すると、
カレントビューのviewerノードに繋がる!


あとは、関数化してショートカットへ。


import nuke
def main():
    selN = nuke.selectedNodes()
    curV = nuke.activeViewer().node()
    a = 0
    for n in selN:
        curV.setInput(a, n)
        a = a + 1


として、viewMultiConnect.py って名前で「.nuke」に保存。同じ階層にmenu.pyをつくり、


import viewMultiConnect
m = nuke.menu("Nodes")
m.addCommand("viewMultiConnect", "viewMultiConnect.main()", "ctrl+shift+i")

として保存。(※menu.pyが既存の場合は上記コードを付け加える
この場合最後の"ctrl+shift+i"がショートカットとなる。