まとめ
複数の入力を持つノード (マージ、スイッチ、またはグローバル状態変数ノードなど) を設定する場合、接続の目的を明確にするために各接続ポートの名前を手動で変更するのは非常に面倒な場合があります。プロセスを自動化するには、名前変更を処理するカスタムのシェルフ アイテムまたはスーパーツールを 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 のようになります。
添付ファイル
私たちはそれを聞いて申し訳ございません
理由をお聞かせください