Q100372: 接続を明確にするために Python を使用して入力ポートと出力ポートの名前を変更する方法

フォローする

まとめ

複数の入力を持つノード (マージ、スイッチ、またはグローバル状態変数ノードなど) を設定する場合、接続の目的を明確にするために各接続ポートの名前を手動で変更するのは非常に面倒な場合があります。プロセスを自動化するには、名前変更を処理するカスタムのシェルフ アイテムまたはスーパーツールを 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/ 」ディレクトリのシェルフ フォルダ名の下に配置することで、上記のスクリプトをカスタム シェルフ アイテムとしてテストすることもできます。

例えば:

Windows: C:\Users\username\.katana\Shelves\RenameShelf\renameInputPorts.py
Linux: /home/username/.katana/Shelves/RenameShelf/renameInputPorts.py
/.katana/Shelves/RenameShelf/renameInputPorts.py /home/username/.katana/Shelves/RenameShelf/renameInputPorts.py

このセットアップは、カスタム シェルフまたはスーパーツールの基礎となります。ここから、各ポートの名前を変更できるポップアップ ウィジェットを追加したり、SuperTool ノード自体の一部としてコードを含めたりすることができます。

接続のセットアップ、シェルフ アイテムとスーパーツールの作成の詳細については、以下のリンクを使用してKatanaユーザー ガイドとKatana開発者ガイドを確認してください。

Python のノード接続: Katana開発者ガイド - ノードの操作 - ノードの接続
シェルフ スクリプト: Katanaユーザー ガイド - Katanaでのスクリプト作成とプログラミング - シェルフ アイテム スクリプト
SuperTools: Katanaユーザー ガイド - グループ、マクロ、およびスーパー ツール - SuperTools


スクリプトの説明

selectedNodes = NodegraphAPI.GetAllSelectedNodes()

NodegraphAPI を使用すると、まずスクリプト ロジックを適用するターゲット ノードを見つけます。これは 2 つの方法で実行できます。1 つは名前でノードを指定する方法、もう 1 つは現在選択されているノードをクエリする方法です。上の行は、現在選択されているノード オブジェクトのリストを検索し、「 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 のようになります。

添付ファイル

私たちはそれを聞いて申し訳ございません

理由をお聞かせください