On this page |
How to ¶
To... | Do this |
---|---|
単一ノードの名前を変更する |
ネットワークエディタ内で、(ノード本体の隣にある)ノードの名前をクリックします。 または、ノードを選択してF2を押します。 |
Tip
Houdiniは、シーン内のどの既存のノード参照も自動的に更新します。ノードの名前を変更することでエクスプレッションが壊れるんじゃないかという心配は不要です。
すべてのノード名に対する検索と置換 ¶
To... | Do this |
---|---|
すべてのノード名に対してテキスト/パターンを一度に検索と置換をする |
そのコントロール下のテーブルは、 Rename をクリックまたはEnterを押した時に変更される予定の名前が表示されます。 |
複数のネットワーク内にあるノードの名前を一度に変更する |
In パスフィールドにスペース区切りでディレクトリパスのパターンを入力すると、複数ネットワーク内のノードの名前を変更することができます。 |
Tip
名前以外の基準を使って名前を変更させるノードを合致させたい場合、まず最初にFindダイアログを使って、その変更したい名前のノードを選択してから、 Edit ▸ Rename Nodes を選択して Find in Selected を有効にすると、それらのノードに対してのみ名前を変更することができます。
パターン(上級) ¶
-
検索と置換の文字列にはglobパターンを使用することができます。ここで使用する特殊文字は、標準のHoudiniパターンと同じで、さらに、シーケンス番号を意味した
#
を使用することができます。*
任意の文字列に一致します。
#
1つ以上の桁に一致します。例えば、
1
、0005
、50607
。?
任意の1文字に一致します。
[chars]
大括弧の中の文字のどれかに一致します。例えば、
[abc]
は、a
、b
、c
のどれかに一致します。[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 |
---|---|---|
接頭辞を除去する |
|
|
接頭辞を追加する |
|
|
接尾辞を除去する |
|
|
接尾辞を追加する |
|
|
接頭辞を置換する |
|
|
接尾辞を置換する |
|
|
頭から2個のアンダースコアを含んだ文字列まですべて除去します |
|
|
まだ |
|
|
|
|
|
スクリプト ¶
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を使うことで、それらの成功した名前変更をアンドゥすることができます。