Houdini 18.5 ネットワークとパラメータ

ノードの名前を変更する

ノードの名前を変更したり、FindとReplaceを使って一度にたくさんのノードを一括で名前変更することができます。

On this page

How to

To...Do this

単一ノードの名前を変更する

ネットワークエディタ内で、(ノード本体の隣にある)ノードの名前をクリックします。 または、ノードを選択してF2を押します。

Tip

Houdiniは、シーン内のどの既存のノード参照も自動的に更新します。ノードの名前を変更することでエクスプレッションが壊れるんじゃないかという心配は不要です。

すべてのノード名に対する検索と置換

To...Do this

すべてのノード名に対してテキスト/パターンを一度に検索と置換をする

  1. ネットワークエディタ内で、 Edit ▸ Rename Nodes を選択、または、Alt + Wを押します。

    "Find and Replace in Node Names"ウィンドウが開きます。

  2. Find フィールドに、検索したいノード名のテキスト/パターンを入力します(globパターンを使った検索と置換の方法は、以下のパターンを参照してください)。 Replace フィールドに、合致したノード名の置換に使用するテキスト/パターンを入力します。

    これらのフィールドを入力する時、それらのコントロール下のプレビューテーブルが更新されて、 Rename をクリックまたはEnterを押した時に変更される予定の名前が表示されます。名前変更で何かエラーが起きれば(例えば、"After"という名前が無効だったり既に使用されている)、そのテーブル内でその名前が赤くハイライトされます。

    そのテーブル内での名前変更の処理で何かエラーが起きれば、 Rename ボタンが無効になります。

  3. Ensure Unique Names を有効にすると、Houdiniは、変更後の名前が既存の名前と干渉した時に、その名前の最後に数値を追加/増分します。つまり、名前が既に使用されていても名前変更が失敗しなくなりますが、その新しい名前が期待した名前の通りになりません(このオプションが有効な時、Houdiniが数値を追加するタイミング/方法を予測できないので、プレビューが正確でないことがあります)。

    このオプションが無効な時(デフォルト)、そのウィンドウは、変更後の名前が既存の名前と干渉していることを検知した時に処理が続行できなくなります。

  4. Match Whole Name を有効にすると、Houdiniは、 Find パターンが名前の先頭から後尾まで一致したノードのみを考慮します。

    例えば、 Match Whole Name が有効で、 Findnullなら、nullというノードに合致しますが、null2というノードには合致しません。

    Tip

    Find 文字列がアスタリスク*で開始または終了していれば、Houdiniは、 Match Whole Name が有効であると見なして動作します。

  5. Find in Selected を有効にすると、Houdiniは現在選択されているノードのみを検索します。

そのコントロール下のテーブルは、 Rename をクリックまたはEnterを押した時に変更される予定の名前が表示されます。

複数のネットワーク内にあるノードの名前を一度に変更する

In パスフィールドにスペース区切りでディレクトリパスのパターンを入力すると、複数ネットワーク内のノードの名前を変更することができます。

Tip

名前以外の基準を使って名前を変更させるノードを合致させたい場合、まず最初にFindダイアログを使って、その変更したい名前のノードを選択してから、 Edit ▸ Rename Nodes を選択して Find in Selected を有効にすると、それらのノードに対してのみ名前を変更することができます。

パターン(上級)

  • 検索と置換の文字列にはglobパターンを使用することができます。ここで使用する特殊文字は、標準のHoudiniパターンと同じで、さらに、シーケンス番号を意味した#を使用することができます。

    *

    任意の文字列に一致します。

    #

    1つ以上の桁に一致します。例えば、1000550607

    ?

    任意の1文字に一致します。

    [chars]

    大括弧の中の文字のどれかに一致します。例えば、[abc]は、abcのどれかに一致します。

    [start-end]

    指定した範囲内の文字のどれかに一致します。例えば、[a-z]は、aからz(含む)までの任意の小文字に一致します。

    [!chars]

    設定した文字/範囲内にある文字 以外の 任意の文字に一致します。 例えば、[!a-m]aからmまでの小文字以外の文字に一致します(注意 この構文は、通常のHoudiniパターンでは利用できません)。

  • Find テキスト内のテキストマッチングパターン(特殊文字のグループ)は、 Replace テキスト内のそれぞれの呼応するパターンに置換されます。

    Find

    Replace

    left_*

    right_*

    left_arm

    right_arm

    left_foot

    right_foot

  • Find テキストに1つ以上のパターンが入っていれば、それらのパターンは、 位置関係 から Replace テキスト内のそれぞれの呼応するパターンに置換されます(例えば、 Find 内の最初の*Replace 内の最初の*に置換され、2番目のは2番目のに置換されるなど)。

    Find

    Replace

    *_alpha_*

    *_beta_*

    lamp_alpha_matt

    lamp_beta_matt

    window_alpha_lee

    window_beta_lee

  • パターンのテキストが特徴的パターンであれば、その特徴パターンを移動させることができ、Houdiniはそれに追従してパターンテキストを合わせます:

    Find

    Replace

    *_???

    old_???_* |

    lamp_esr

    old_esr_lamp

    window_jwz

    old_jwz_window

  • Replace テキスト内に$1$2などを使用すれば、 Find テキスト内のパターンの位置関係から合致したパターンを参照することができます。例えば、$1は、 Find 内の一番目の合致したパターンに置換されます:

    Find

    Replace

    *_*

    $2_$1

    lamp_new

    new_lamp

    window_final

    final_window

    Tip

    パターンの位置を数える時、以下のパターンがそれぞれ数えられます:

    • アスタリスク(*)

    • シャープ(#)

    • 1つ以上のクエッションマーク(?)

    • 1つ以上の文字範囲([])

    そのため、例えば Find テキストの*#_???には、*#???の3つのパターンがあります。

  • Findパターンの頭に^を置くことで、そのパターンを 否定 することができます。これは、特定の文字列で始まる、または、終わる名前を含めないようにするのに非常に役立ちます。例えば、^beta_*は、beta_から 始まらない 名前に合致します。

    ^文字は、パターン内の次の"部分"を否定します。以下の文字が、その部分として考慮されます:

    • 1つ以上の文字列

    • アスタリスク(*)

    • シャープ(#)

    • 1つ以上のクエッションマーク(?)

    • 1つ以上の文字範囲([])

    Findパターン内に否定マッチを含める場合、( Match Whole Name が有効であるかのように)そのFindパターンは名前全体に対してマッチングを行ないます。

    Note

    Renameダイアログの否定は、通常のHoudiniパターンと異なった挙動をします。その理由は、通常の挙動は名前変更にはあまり役立たないからです。

サンプル

To…

Find

Replace

接頭辞を除去する

prefix*

*

接頭辞を追加する

*

prefix*

接尾辞を除去する

*suffix

*

接尾辞を追加する

*

*suffix

接頭辞を置換する

left_*

right_*

接尾辞を置換する

*_left

*_right

頭から2個のアンダースコアを含んだ文字列まですべて除去します

*__*

$2

まだ_beta接頭辞が付いていないノードに対して_beta接頭辞を追加します

*^_beta

*_beta

delete_で始まっていない名前の最後に_keepを追加します

^delete_*

*_keep

スクリプト

hou.Nodeノード参照に対してhou.Node.setNameを使えば、そのノード名を変更することができます:

>>> node = hou.node("/obj/geo1")
>>> node.setName("table_lamp")

スクリプトを使って一括で名前変更するには、nodeutils.rename_nodes()関数を使用します:

from nodeutils import rename_nodes

success = rename_nodes(network, find, replace, selected=False, whole_name=False, errors=None,
                       fail_fast=False, unique_name=False, ignore_case=True)

rename_nodes関数は、以下の引数を受け取ります:

network

名前変更を実施する親ネットワークを表現したhou.Nodeオブジェクト。

find

検索したいテキスト/パターンを表現した文字列(上記のパターンを参照)。

replace

合致した文字列を置換するテキスト/パターンを表現した文字列(上記のパターンを参照)。

selected=False

Trueにすると、この関数は、ネットワーク内の現在選択されているノードのみを名前変更するように考慮します。

whole_name=False

Trueにすると、findパターンは、サブ文字列ではなく、ノード名全体に対してマッチングを行ないます。

errors=None

この引数にリストを指定すると、この関数は、(例えば、新しい名前が無効または既に使用中が原因で)名前変更が失敗する度に、リストに("oldname", "newname", "errormessage")タプルを追加します。

unique_name=False

これがTrueであれば、変更後の名前が既存の名前と干渉した時に、その名前の最後に数値を追加/増分します。 つまり、名前が既に使用されていても名前変更が失敗しなくなりますが、その新しい名前が期待した名前の通りになりません。 ただし、"Find"や"Replace"のパターンが無効なノード名を生成した場合には失敗します。

ignore_case=True

ノード名をFindパターンと比較する時に、大文字/小文字の区別を無視します。

fail_fast=False

これがTrueであれば、名前変更に失敗すると、この関数は終了して戻ります。デフォルトでは、この関数は失敗を無視し、残りの名前変更の実施を継続します。

Returns

すべての名前変更がエラーなく完了すればTrue、それ以外はFalseを返します。

rename_nodes関数は、Undoブロック内に、それらの変更した名前を格納します。hou.undos.performUndo()を使うことで、それらの成功した名前変更をアンドゥすることができます。

ネットワークとパラメータ

ネットワーク

パラメータの編集

次のステップ

エクスプレッション

導師レベル

リファレンス