まとめ
複数の入力を持つノード(Mergeノード、Switchノード、Global State Variablesノードなど)を設定する際、接続目的を明確にするために各接続ポートの名前を手動で変更するのは非常に面倒です。このプロセスを自動化するには、名前変更を処理するカスタムシェルフアイテムまたは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 アイテムとしてテストすることもできます。
例えば:
Windows: C:\Users\username\.katana\Shelves\RenameShelf\renameInputPorts.py
Linux: /home/username/.katana/Shelves/RenameShelf/renameInputPorts.py
この設定は、カスタムシェルフまたはスーパーツールのベースとなります。ここから、各ポートの名前を変更できるポップアップウィジェットを追加したり、スーパーツールノード自体にコードを組み込んだりすることも可能です。
接続の設定、シェルフ アイテムとスーパー ツールの作成の詳細については、以下のリンクを使用してKatanaユーザー ガイドとKatana開発者ガイドを確認してください。
Python のノード接続: Katana開発者ガイド - ノードの操作 - ノードの接続
シェルフ スクリプト: Katanaユーザー ガイド - Katanaでのスクリプトとプログラミング - シェルフ アイテム スクリプト
SuperTools: Katanaユーザーガイド - グループ、マクロ、および Super Tools - 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 のようになります。
添付ファイル
私たちはそれを聞いて申し訳ございません
理由をお聞かせください