サポートチケットを作成する
フォローする

Q100372:Pythonを使った入出力ポートの名前変更

概要


複数の入力を持つノード(Merge、Switch、またはGlobal State Variablesノードなど)をセットアップする場合、接続目的を明確にするために各接続ポートの名前を手動で変更するのは非常に面倒です。プロセスを自動化するために、名前変更を処理するカスタムのShelf ItemまたはSuperToolをPythonで作成できます。この記事では、これを実現する方法について説明します。

詳しくは

選択された各ノードの入力ポートをループしてそれらを特定の値に名前変更するスクリプトの例が含まれ、以下に説明されています。

これは、例えばMergeまたはVariableSwitchノードを使用してKatana内でテストできます。

スクリプト例

# Grab all currently selected nodes
selectedNodes = NodegraphAPI.GetAllSelectedNodes()

# Loop through each selected node for node in selectedNodes:
# Get all the import ports within the node     inputPorts = node.getInputPorts()
# Loop through each port within the node     for inputs in inputPorts:         index= inputs.getIndex()         name = node.getInputPortByIndex(index).getName()
# Name each port 'Shot' plus their indexed location         node.renameInputPort(name,('Shot'+repr(index+1)))

スクリプトを使う

Katana内では、単にMergeまたはVariableSwitchノードを作成し、それに複数の入力ポートを追加することで(ノードの中央の矢印)、スクリプトをテストできます。


ノードが選択されているときに上記のスクリプトをPythonタブに貼り付け/実行すると、デフォルトの入力ポートの名前が次のように変更されます。

添付の' renameInputPorts.py 'ファイルをダウンロードし、それをユーザのホームエリア ' .katana/Shelves/ 'ディレクトリのShelfフォルダ名の下に置くことで、上記のスクリプトをカスタムShelf Itemとしてテストすることもできます。

例えば:

Windows: C:\Users\usename\.katana\Shelves\RenameShelf\renameInputPorts.py
Linux: /mnt/nethome/users/usename/.katana/Shelves/RenameShelf/renameInputPorts.py


この設定は、カスタムShelfまたはSuperToolの基本です。ここから、さらに各ウィジェットの名前を変更できるポップアップウィジェットを追加することも、SuperToolノード自体の一部としてコードを含めることもできます。


接続の設定、Shelf ItemsおよびSuperToolsの作成の詳細については、以下のリンクを使用してKatanaオンラインヘルプおよびKatana開発者ガイドを確認してください。


Python接続ノード: Katana開発者ガイド - ノードの操作 - ノードの接続
シェルフスクリプト: Katanaオンラインヘルプ - 技術情報 - シェルフアイテムのスクリプト
SuperTools: Katanaオンラインヘルプ - 技術情報 - SuperTools

スクリプトの説明

selectedNodes = NodegraphAPI.GetAllSelectedNodes()

NodegraphAPIを使用して、まずスクリプトロジックを適用するターゲットノードを見つけます。これは、ノードを名前で指定するか、現在選択されているノードを照会することによって、2つの方法で実行できます。上記の行は、検出しselectedNodesとして現在選択されているノードオブジェクトのリストを格納します。

for node in selectedNodes:
inputPorts = node.getInputPorts()

ノードオブジェクトのリストを取得したら、forループを使用してそれぞれを繰り返し、ノードのすべての入力ポートを取得するgetInputPorts()関数を呼び出します。

for inputs in inputPorts:         
  index= inputs.getIndex()

各ノードのポートが揃ったので、個々のポートを名前で、またはインデックス付きの場所でループします。上記の行は、 getIndex()関数を使用してそれらのインデックス位置を見つけます。

name = node.getInputPortByIndex(index).getName()
node.renameInputPort(name,('Shot'+repr(index+1))) 

上記の行はノードポートの現在の名前を取得し、その名前をShotに変更し、その後にそのポートのインデックスを付けます。ノードのポート数によって、最終的な名前はShot1、Shot2、Shot3のようになります。

この記事は役に立ちましたか?
/

We're sorry to hear that!

Please tell us why.
2人中2人がこの記事が役に立ったと言っています

コメント