Inheritance |
|
メソッド ¶
planes()
→ tuple of strings
ノードの画像シーケンス内の平面の名前のタプルを返します。
ノードを処理するのにクックできない、または開けなかった場合は、hou.OperationFailedを引き起こします。
components(plane)
→ tuple
of str
ノードの画像シーケンス内の指定した平面のコンポーネント名のタプルを返します。
plane
引数の値は、必ず平面の名前でなければなりません。
plane
がNoneまたは空っぽの場合はValueErrorを引き起こします。
ノードを処理するのにクックできない、または開けなかった場合は、hou.OperationFailedを引き起こします。
指定した平面が存在しなかった場合は、hou.OperationFailedを引き起こします。
xRes()
現行フレームでのノードの画像のX解像度を返します。
ノードを処理するのにクックできない、または開けなかった場合は、hou.OperationFailedを引き起こします。
yRes()
現行フレームでのノードの画像のY解像度を返します。
ノードを処理するのにクックできない、または開けなかった場合は、hou.OperationFailedを引き起こします。
imageBounds(plane="C")
→ tuple
of int
指定した平面のXとYの境界を(xmin, ymin, xmax, ymax)の形式で返します。
plane
引数の値は平面の名前です。
デフォルトでは、カラー平面の画像境界が返されます。
画像境界は画像解像度と同じではないことに注意してください。 例えば、Font COPの画像境界は、表示した文字を囲んだ境界矩形であり、解像度はノードの画像サイズです。
返される画像境界は、現行フレームでの境界であることに注意してください。
plane
がNoneまたは空っぽの場合はValueErrorを引き起こします。
ノードを処理するのにクックできない、または開けなかった場合は、hou.OperationFailedを引き起こします。
指定した平面が存在しなかった場合は、hou.OperationFailedを引き起こします。
depth(plane)
→ hou.imageDepth列挙値
指定した画像平面内の1ピクセルの1コンポーネントを表現するのに使用されたデータフォーマットを返します。
例えば、"C"
(color)平面の深度がhou.imageDepth.Int8の場合は、赤、緑、青のコンポーネントそれぞれが(符号なし)8ビットintegerで保存され、
1バイトを占有します。
例えば、hou.imageDepth.Float32の場合は、赤、緑、青のコンポーネントそれぞれが32ビットfloatで保存され、4バイトを占有します
(3つのコンポーネントすべてを合わせると12バイト)。
maskInputIndex()
→ int
このノードのマスク入力の入力インデックスを返します。 このノードタイプがマスク入力を持っていない場合は-1を返します。
allPixels(plane="C", component=None, interleaved=True, time=-1.0)
→ tuple
of float
特定の画像平面でのすべてのピクセル値を含んだfloatのタプルを返します。 画像の底辺の走査線のピクセルが、その結果の画像の1番目のピクセルで、それに続いて下から2番目の走査線が続きます。 例えば、カラー平面(“C”)内の浮動小数点値の範囲は、通常では0.0から1.0です。
plane
返される画像平面の名前。すべての画像には、“C” (color)と“A” (alpha)の平面があります。 ディープラスタ画像では、“Pz” (深度), “N” (法線)などの他の平面を含めることができます。
component
平面の特定のサブコンポーネント。
例えば、“C”平面に関しては、“r”, “g”, “b”のサブコンポーネントのどれかを指定することができます。
すべてのコンポーネントを指定するなら、None
を指定します。
interleaved
平面の色々なコンポーネントをその結果の平面内に交互に配置するかどうか。
例えば、平面が“C”の場合、その交互に配置された結果はrgbrgbrgb...
のように並び、Interleavedを無効にした結果はrrr...ggg...bbb...
のようになります。
このパラメータは、特定のコンポーネントを指定した時には何の効果もありません。
time
COPノードを処理する時刻。この値がマイナスであれば、Houdiniは現在の時間を使用します。
クックしているPython COPからallPixels
をコールした場合には、この引数は適用されないことに注意してください。
その場合、allPixels
は、現在クックしている時間で評価されます。
このメソッドは、allPixelsAsString
が行なうようなdepth
パラメータを受け入れません。
これらの値は、画像平面の実際の深度に関係なく浮動小数点データに変換されます。
time
引数の値が0.0以上に設定されていて、クックしているPython COPからallPixels
をコールした場合、hou.OperationFailedを引き起こします。
allPixelsAsString(plane="C", component=None, interleaved=True, time=-1.0, depth=None)
→ str
for Python 2, bytes
for Python 3
すべてのボクセルのすべての値を含んだfloatのバイナリ文字列表現を返します。
このメソッドは、hou.Cop2Node.allPixelsよりも高速で、array
モジュールを使用することで、その文字列をPythonシーケンスに変換することができます。
このメソッドはバイナリfloatデータを返すので、R,G,Bコンポーネント毎に1バイトではなく4バイト必要になることに注意してください。
返されるバイナリ文字列は、Python3だとbytes
オブジェクト、Python2だとstr
オブジェクトです。
詳細は、HOMバイナリデータを参照してください。
depthがhou.imageDepth.Float32であれば、このメソッドは以下の実装で高速化することができます:
import array def allPixelsAsString(self): return array.array("f", self.allPixels()).tostring()
depth
がNone
で、このメソッドをPython COPを実装しているコードからコールして入力平面を取得する場合は、
その深度は平面自体の深度と同じになります。
depth
がNone
で、このメソッドをPython COP外からコールする場合は、その深度はhou.imageDepth.Float32
になります。
それ以外の場合で、depth
がhou.imageDepth列挙値であれば、その結果は指定した深度に変換されます。
詳細は、hou.Cop2Node.allPixelsを参照してください。 hou.Volume.setVoxelSliceFromStringも参照してください。
time
引数の値が0.0以上に設定されていて、クックしているPython COPからallPixelsAsString
をコールした場合、hou.OperationFailedを引き起こします。
setPixelsOfCookingPlane(values, component=None, interleaved=True, flip_vertically=False)
現在実行中のPython COPでクックされる平面のピクセルを設定します。
values
floatのシーケンス。これは、一番下からの走査線の内容で並んでいます。
component
がNone
なら、floatシーケンスの長さは、画像内のピクセル数とコンポーネントの数を乗算したものになります。
それ以外は、画像内のピクセル数になります。
component
クックされている平面内の1コンポーネントの名前またはNone
のどちらか。
コンポーネント名を指定すれば、values
にはそのコンポーネントの値のみが含まれます。
指定しなかった場合は、平面内のすべてのピクセルのすべてのコンポーネントの値が含まれます。
interleaved
component
がNone
で、interleavedがTrue
なら、values
には、1番目のピクセルの1番目のコンポーネントが、
次に1番目のピクセルの2番目のコンポーネントが、というように1番目のピクセルの最後のコンポーネントまで、
それから2番目のピクセルの1番目のコンポーネントというように値が含まれます。
interleavedがFalse
なら、values
にはすべてのピクセルの1番目のコンポーネントの値すべてを、その後に2番目のコンポーネントの値すべてを、
というように値が含まれます。
例えば、平面が“C”でinterleavedがTrue
なら、それらの値は、rgbrgbrgb...
のように並びます。
interleavedがFalse
なら、rrr...ggg...bbb...
のように並びます。
component
がNone
でないなら、このパラメータは無視されます。
flip_vertically
このパラメータのデフォルト値はFalse
なので、values
配列内の1番目の走査線は、底辺の走査線とみなされます。
flip_vertically
がTrue
なら、それらの入力値は、方向が逆になり上辺の走査線から開始されます。
このメソッドをPython COP内のcook
関数外からコールすると、hou.OperationFailedを引き起こします。
hou.Cop2Node.allPixelsとhou.Cop2Node.setPixelsOfCookingPlaneFromStringも参照してください。 サンプルは、HOMクックブックとPython COPのドキュメントも参照してください。
setPixelsOfCookingPlaneFromString(values, component=None, interleaved=True, depth=None, flip_vertically=False)
現在実行中のPython COPでクックされる平面のピクセルを設定します。
このメソッドは、hou.Cop2Node.setPixelsOfCookingPlaneと同様ですが、
values
には、floatシーケンスの代わりにバイナリ文字列表現のデータが含まれます。
その結果として、このメソッドの方が高速です。
values
バイナリ文字列には、Python3だとbytes
オブジェクト、Python2だとstr
オブジェクトを指定してください。
詳細は、HOMバイナリデータを参照してください。
depth
パラメータには、バイナリ文字列内の値を解釈する方法を指定します。
このパラメータは、hou.imageDepth列挙値です。
depth
がNoneの場合、その深度がクックされる平面の深度と見なされます。
明示的にdepth
を指定することで、COPで記録されている実際の深度に関係なく、任意の深度のデータを用意することができます。
このメソッドは文字列だけでなくもっと多くのタイプを受け入れることができます。
つまり、バッファインターフェースをサポートしているPythonオブジェクトを受け入れることができます。
特に、array
とnumpy
のPythonモジュールからの配列がサポートされているので、最初にそれらの配列から文字列を構築する必要がありません。
詳細は、hou.Cop2Node.setPixelsOfCookingPlaneとhou.Cop2Node.allPixelsAsStringを参照してください。
saveImage(file_name, frame_range=())
ノードのクックした画像シーケンスをディスクに保存します。
複数の画像に対しては、シーケンスが複数のファイルに書き出せるように、file_name
引数に$Fを入れてください。
オプションのframe_range
引数を指定すれば、画像シーケンス内のフレームのサブセットだけを書き出すことができます。
frame_range
は必ず2-tupleまたは3-tupleでなければなりません。そのタプルの1番目のエレメントが開始フレーム、2番目のエレメントが終了フレーム、3番目のエレメントがフレーム増分値です。
frame_range
を指定しなかった場合、画像シーケンス内のすべてのフレームがディスクに保存されます。
frame_range
のフレーム増分値が0なら、ValueErrorを引き起こします。
frame_range
のサイズが0, 2または3でない場合は、hou.InvalidSizeを引き起こします。
ノードを処理するのにクックできない、または開けなかった場合は、hou.OperationFailedを引き起こします。
画像をディスクに保存できなかった場合は、hou.OperationFailedを引き起こします。
getPixelByUV(plane, u, v, component=None, interpolate=True)
→ tuple
of float
ノードの画像内の単一ピクセルの平面値を返します。
その平面はplane
引数で定義され、必ず平面の名前に設定しなければなりません。
そのピクセルは(u
, v
)座標で定義し、u
とv
の値の範囲は、0.0から1.0です。
オプションのcomponent
引数を指定すると、その特定のコンポーネントの値が返されます。
その引数を指定しなかった場合は、平面のコンポーネント値すべてが返されます。
component
の値は、コンポーネントの名前(つまり、“r”, “g”, “b”など)にしてください。
(u
, v
)座標がピクセルに対して正確に指すことができなかった場合は、その戻り値は、周辺ピクセルの値を線形ブレンドして計算されます。
これは、interpolate
引数をFalseに設定することで無効にすることができます。
その場合、即座に(u
, v
)の左下に配置されたピクセルの値が返されます。
戻り値は、現行フレームでのノードの画像に対する値であることに注意してください。
u
またはv
のどれかが0.0-1.0の範囲外であれば、ValueErrorを引き起こします。
plane
がNoneまたは空っぽの場合はValueErrorを引き起こします。
ノードを処理するのにクックできない、または開けなかった場合は、hou.OperationFailedを引き起こします。
指定した平面が存在しなかった場合は、hou.OperationFailedを引き起こします。
指定したコンポーネントが平面内に存在しなかった場合は、hou.OperationFailedを引き起こします。
getPixelHSVByUV(u, v, interpolate=True)
→ tuple
of float
ノードの画像内の単一ピクセルの色相、彩度、明度を含んだ3-tupleを返します。
そのピクセルは、(u
, v
)座標で定義します。u
とv
の値の範囲は、0.0から1.0です。
(u
, v
)座標がピクセルに対して正確に指すことができなかった場合は、その戻り値は、周辺ピクセルの値を線形ブレンドして計算されます。
これは、interpolate
引数をFalseに設定することで無効にすることができます。
その場合、即座に(u
, v
)の左下に配置されたピクセルの値が返されます。
戻り値の色相、彩度、明度の値は、現行フレームでのノードの画像に対する値であることに注意してください。
u
またはv
のどれかが0.0-1.0の範囲外であれば、ValueErrorを引き起こします。
ノードを処理するのにクックできない、または開けなかった場合は、hou.OperationFailedを引き起こします。
getPixelLuminanceByUV(u, v, interpolate=True)
→ float
ノードの画像内の単一ピクセルの輝度値を返します。
そのピクセルは、(u
, v
)座標で定義します。u
とv
の値の範囲は、0.0から1.0です。
(u
, v
)座標がピクセルに対して正確に指すことができなかった場合は、その輝度は、周辺ピクセルの輝度値を線形ブレンドして計算されます。
これは、interpolate
引数をFalseに設定することで無効にすることができます。
その場合、即座に(u
, v
)の左下に配置されたピクセルの輝度が返されます。
戻り値の輝度値は、現行フレームでのノードの画像に対する値であることに注意してください。
u
またはv
のどれかが0.0-1.0の範囲外であれば、ValueErrorを引き起こします。
ノードを処理するのにクックできない、または開けなかった場合は、hou.OperationFailedを引き起こします。
isSingleImage()
→ bool
ノードが単一画像であればTrueを返します。ノードが画像シーケンスであればFalseを返します。
sequenceStartFrame()
→ float
ノードの画像シーケンスの開始フレームを返します。
ノードを処理するのにクックできない、または開けなかった場合は、hou.OperationFailedを引き起こします。
sequenceEndFrame()
→ float
ノードの画像シーケンスの最終フレームを返します。
ノードを処理するのにクックできない、または開けなかった場合は、hou.OperationFailedを引き起こします。
sequenceFrameLength()
→ float
ノードの画像シーケンスのフレーム長を返します。
ノードを処理するのにクックできない、または開けなかった場合は、hou.OperationFailedを引き起こします。
setDisplayFlag(on)
ノードのディスプレイフラグをオン/オフします。ディスプレイフラグがオンの時、ノードの画像が画像ビューアに表示されます。
on
引数の値は必ずTrueまたはFalseにしてください。
ノードが書き込み不可であれば、hou.PermissionErrorを引き起こします。
isDisplayFlagSet()
→ bool
ノードのディスプレイフラグがオンならTrueを返します。そうでない場合はFalseを返します。
setRenderFlag(on)
ノードのレンダーフラグをオン/オフします。
レンダーフラグは、コンポジットネットワーク内のどのノードを/hom/hou/Mplay.htmlまたはディスクにレンダリングするか制御します。
on
引数の値は必ずTrueまたはFalseにしてください。
ノードが書き込み不可であれば、hou.PermissionErrorを引き起こします。
isRenderFlagSet()
→ bool
ノードのレンダーフラグがオンならTrueを返します。そうでない場合はFalseを返します。
setTemplateFlag(on)
ノードのテンプレートフラグをオン/オフします。
on
引数の値は必ずTrueまたはFalseにしてください。
ノードが書き込み不可であれば、hou.PermissionErrorを引き起こします。
isTemplateFlagSet()
→ bool
ノードのテンプレートフラグがオンであればTrueを返します。そうでない場合はFalseを返します。
setCompressFlag(on)
ノードのCompressフラグをオン/オフします。
CompressフラグがTrueであれば、このノードはNetwork Viewにプレビュー画像を表示しません。
CompressフラグがFalseであれば、Network Viewにプレビュー画像が表示されます。
on
引数の値は必ずTrueまたはFalseにしてください。
ノードが書き込み不可であれば、hou.PermissionErrorを引き起こします。
isCompressFlagSet()
→ bool
ノードのCompressフラグがオンであればTrueを返します。そうでない場合はFalseを返します。 Compressフラグは、Network Viewでこのノードにプレビュー画像を表示するかどうかを制御します。
bypass(on)
ノードのバイパスフラグをオン/オフします。バイパスフラグがオンの時、そのノードはシーンに何の影響も与えません。
on
引数の値は必ずTrueまたはFalseにしてください。
ノードが書き込み不可であれば、hou.PermissionErrorを引き起こします。
isBypassed()
→ bool
ノードのバイパスフラグがオンならTrueを返します。そうでない場合はFalseを返します。
hasMetaData(metadata_name)
→ bool
metadata_name
という名前のメタデータが存在すればTrueを返します。そうでない場合はFalseを返します。
getMetaDataInt(metadata_name, index=0)
→ int
数値のメタデータを単一整数として返します。
ベクトルの場合は、マトリックスや配列として返します。
index
には、取得するコンポーネントを指定します。
浮動小数点のメタデータは、切り捨てられます。
getMetaDataFloat(metadata_name, index=0)
→ double
数値のメタデータを単一の倍精度値として返します。
ベクトルの場合は、マトリックスや配列として返します。
index
には、取得するコンポーネントを指定します
getMetaDataString(metadata_name)
→ str
metadata_name
から文字列メタデータを返します。
getMetaDataIntArray(metadata_name)
→ tuple of int
数値のメタデータを整数の配列として返します。浮動小数点のメタデータは、切り捨てられます。
getMetaDataFloatArray(metadata_name)
→ tuple of double
数値のメタデータを倍精度値の配列として返します。
Methods from hou.NetworkItem ¶
networkItemType()
→ hou.networkItemType
このオブジェクトで表現されたネットワークアイテムのタイプを示した列挙値を返します。
この値は、isinstance
ビルトインPython関数でそれに一致したクラスを使用することと等価です(例えば、hou.networkItemType.Connectionはhou.NodeConnectionと等価です)。
Methods from hou.NetworkMovableItem ¶
name()
→ str
このノードの名前を返します。hou.NetworkMovableItem.pathも参照してください。
setName(name, unique_name=False)
このノードの名前を設定します。その新しい名前に英数字、.
、-
、_
以外の文字が含まれている場合、hou.OperationFailedを引き起こします。
ノードの名前を変更できなかった場合(例えば、他のノードで同じ名前が既に使用されていたり、そのノードがルートノードまたはトップレベルマネージャ(例えば、/obj
)だったり、そのノードがロックアセット内にある場合)は、hou.OperationFailedを引き起こします。
unique_name
パラメータをTrueに設定すると、指定した名前が既存ノードの名前と被らないように変更させることができます。
digitsInName()
→ int
ノードの名前の最後の桁の値を返します。 桁がなければ0を返します。
例えば、geo102
ノードは102
、light12to34
ノードは34
を返します。
path()
→ str
ネットワーク内のこのノードのフルパス(つまり、/
から始まります)を返します。
relativePathTo(base_node)
→ str
他のノードオブジェクトを基準として、このノードの相対パスを返します。
>>> box1 = hou.node("/obj/box_object1/box1") >>> sphere1 = hou.node("/obj/sphere_object1/sphere1") >>> box1.relativePathTo(sphere1) '../../sphere_object1/sphere1' >>> hou.node("/obj").relativePathTo(box1) 'box_object1/box1' >>> box1.relativePathTo(box1) '.'
parent()
→ hou.Node
このアイテムを含んだノードを返します。
そのアイテムがルートノード(つまり、/
)であれば、このメソッドはNoneを返すことに注意してください。
>>> hou.node("/obj/box_object1").parent() <hou.Node at /obj> >>> print hou.node("/").parent() None
parentNetworkBox()
→ hou.NetworkBox or None
このアイテムを含んだ親のネットワークボックスを返します。それがネットワークボックスに含まれていなければNoneを返します。
isPicked()
→ bool
hou.NetworkMovableItem.isSelectedをコールする事と等価です。
setSelected(on, clear_all_selected=False, show_asset_if_selected=False)
このアイテムを選択または選択解除します。オプションで、このネットワーク内で選択されているアイテム以外すべてを選択解除することができます。
show_asset_if_selected
がTrueで、このアイテムがNode
の場合、このペインは、代わりに選択したアイテムのトップレベルのアセットを表示します。
setPicked(on)
すべてのオプションのパラメータのデフォルト値でhou.NetworkMovableItem.setSelectedをコールする事と等価です。
setColor(color)
指定したhou.Colorで、ネットワークエディタ内のこのアイテムのタイルのカラーを設定します。
sessionId()
指定したHoudiniセッション内でこのアイテムを固有に識別するための整数値を返します。
このIDは、単一Houdiniプロセス内でのみ固有であることが保証されます。
このIDは、アイテムの保存、復元、参照をするのが簡単になるので便利です。
また、このIDは特定のアイテムサブクラスに対しても固有です。
そのため、NetworkBox
と同じセッションIDを持つNode
が存在することがあります。
セッションIDからノードを取得するにはhou.nodeBySessionId()を、セッションIDからネットワークボックスを取得するにはhou.networkBoxBySessionId()を、 もっと汎用的にセッションIDとアイテムサブクラスを示した列挙値を組み合わせてそのタイプのアイテムを取得するにはhou.itemBySessionId()を参照してください。
position()
→ hou.Vector2
ネットワークエディタグラフ内のこのアイテムのタイルの位置をVector2
として返します。
move()
とsetPosition()
も参照してください。
setPosition(vector2)
ネットワークエディタグラフ内のこのアイテムのタイルの位置を設定します。 アイテムの位置を動かせなかった場合は、hou.InvalidInputを引き起こします。
move(vector2)
ネットワークエディタグラフ内のこのアイテムのタイルを、指定したhou.Vector2の分だけ動かします。
アイテムを絶対位置で動かすには、setPosition()
を使用します。
アイテムの現行グラフ位置を取得するには、position()
を使用します。
指定した位置にアイテムを動かせなかった場合は、hou.InvalidInputを引き起こします。
shiftPosition(vector2)
hou.NetworkMovableItem.moveをコールする事と等価です。
size()
→ hou.Vector2
ネットワークエディタグラフ内のこのアイテムのタイルのサイズをVector2
として返します。
Methods from hou.Node ¶
node(node_path)
→ hou.Node or None
指定したパスのノードを返します。ノードが見つからなければNoneを返します。
相対パス(つまり、/
で始まらないパス)を指定した場合、このノードを基準に検索が実行されます。
例えば、変数n
内のノードの親ノードを取得するには、n.node("..")
を使用します。
geo5
という名前の子ノードを取得するには、n.node("geo5")
を使用します。
light3
という名前の兄弟ノードを取得するには、n.node("../light3")
を使用します。
戻り値は、Nodeのサブクラスのインスタンスであることに注意してください。 例えば、見つかったノードがオブジェクトノードであれば、戻り値は、hou.ObjNodeインスタンスになります。
パスが絶対パス(つまり、/
で始まるパス)なら、このメソッドは、hou.node(node_path)
のショートカットです。
相対パスなら、hou.node(self.path() + "/" + node_path)
のショートカットです。
hou.node()も参照してください。
nodes(node_path_tuple)
→ tuple
of hou.Node or None
これは、node()と同様ですが、複数のパスを受け取り、複数のNodeオブジェクトを返します。これは以下と等価です:
nodes = [self.node(path) for path in paths]
item(item_path)
→ hou.NetworkMovableItem or None
指定したパスのネットワークアイテムを返します。そのアイテムが存在しなかった場合はNoneを返します。
相対パス(つまり、/
で始まらないパス)を指定すると、このノードを基準に検索が実行されます。
そのパスが絶対パス(つまり、/
で始まる)の場合、このメソッドは、hou.item(node_path)
のショートカットです。
それ以外の場合、hou.item(self.path() + "/" + item_path)
のショートカットです。
hou.item()も参照してください。
戻り値がNetworkMovableItemのサブクラスのインスタンスである場合があることに注意してください。 例えば、見つかったアイテムがオブジェクトノードであれば、その戻り値はhou.ObjNodeインスタンスです。 そのアイテムがネットワークボックスであれば、その戻り値はhou.NetworkBoxインスタンスです。
items(item_path_tuple)
→ tuple
of hou.NetworkMovableItem or None
これは、item()と同様ですが、複数のパスを受け取り、複数のNetworkMovableItemオブジェクトを返します。これは以下と等価です:
items = [self.item(path) for path in paths]
isNetwork()
→ bool
このノードがネットワークの場合、つまり、子ノードを含むことができるノードの場合はTrue
を返します。
それ以外の場合はFalse
を返します。
これは、hou.Node.createNodeなどのいくつかの他のメソッドをコールすると、そのメソッドはhou.OperationFailedを引き起こすことを意味します。
isEditable()
→ bool
このノードがHDAでない、且つ、HDA内部にない場合、このメソッドはTrueを返します。
このノードがHDAノードだった場合、そのノードがロック解除されていればTrueを返し、ロックされていればFalseを返します(これは、not node.matchesCurrentDefinition()
と等価です)。
このノードがロックされたHDAノード内部にある場合、このメソッドは、このノードがそのロックされたHDA内の編集可能サブネットまたはそのサブネット内部にある場合はTrueを返します。 それ以外はFalseを返します。
このメソッドは、このノードの子に特定のタイプの変更を加えることができるかどうかを反映します。
ノード間のワイヤー接続やフラグの設定といった変更は、子ノードへの編集であり、親ノードまたは周辺ノードの動作にも影響を与えます。
例えば、ノードにディスプレイフラグを有効にできるかどうかを判断するには、node.parent().isEditable()
をテストすることになります。
パタメータ値の変更など、ノード自体の単なる内部的なノードの変更に関しては、node.isEditableInsideLockedHDA()
をテストすれば良いです。
children()
→ tuple
of hou.Node
このノードの子であるノードのリストを返します。 ファイルシステムと同じように、ノードの子はフォルダ/ディレクトリのような構成になっています。
子ノードの数を調べるには、len(node.children())
を使用します。
その結果の子の順番は、Houdiniでのユーザ定義の順番と同じです。 この順番を確認するには、Network Viewペインをリストモードに切り替え、そのリスト順を user defined に設定します。 ノードの順番を変更するには、そのリスト内でノードをドラッグアンドドロップします。
def pc(node): '''特定のノードの子の名前をプリントします。 この関数は、Pythonシェルでインタラクティヴに動作させる時に役に立ちます。''' for child in node.children(): print child.name() def ls(): '''現行ノード下のノードの名前をプリントします。''' pc(hou.pwd())
以下のエクスプレッションは特定のノードタイプの子のリストを評価します:
[c for c in node.children() if c.type() == node_type]
allItems()
→ tuple
of hou.NetworkMovableItem
このノードのすべての子を含んだタプルを返します。
children
とは違い、このメソッドはhou.NetworkBox, hou.SubnetIndirectInput, hou.StickyNote, hou.NetworkDotのオブジェクトも返します。
allSubChildren(top_down=True, recurse_in_locked_nodes=True, sync_delayed_definition=False)
→ tuple of hou.Node
このノードのサブチルドレンすべてを再帰的に返します。
例えば、hou.node("/").allSubChildren()
は、HIPファイル内のノードすべてを返します。
top_down
Trueの場合、この関数は、上から下に検索して、返されたタプル内のノードをその子の前に配置します。 Falseの場合、下から上に検索して、子を親の前に配置します。
recurse_in_locked_nodes
Trueの場合、この関数は、ロックされた子ノード(isEditable()
メソッドがFalse
を返す子ノード)の中を再帰検索して、
戻り値のタプルの中に、そのロックされた子ノードの子を含めます。
Falseの場合、この関数は、ロックされた子ノードの中を再帰検索しないので、戻り値のタプルの中には、そのロックされた子ノードの子は含まれません(もちろん、ロックされた子ノードはそのタプルに含まれます)。
例えば、recurse_in_locked_nodesがTrue
で、hou.node("/obj/geo1")
の中にPlatonic Solidsノード(ロックされたノード)があった場合、
hou.node("/obj").allSubChildren()
が返すタプルには、Platonic Solidsノードとその子ノードが含まれます。
recurse_in_locked_nodesがFalse
の場合、その戻り値のタプルにはPlatonic Solidsノードが含まれますが、その子ノードは含まれません。
sync_delayed_definition
場合によってはこのノードが評価されるまでノードの内容はロードしたくないです。
すべてのノードが無駄に展開されないようにするために、デフォルトでは、ノードの内容は未展開のままにされて返されません。
sync_delayed_definitionをTrue
に設定すると、すべての子ノードが再帰的に同期されて、ネットワーク全体が完全にインスタンス化され、
同期されたすべてのノードが返されます。
返されるのはタプルであって、ジェネレータではないことに注意してください。 つまり、戻り値を通じてループしている間にノードを削除したり作成しても安全であることを意味します。
以下の関数は、指定したノード内の特定のタイプの子すべてを削除します:
def removeSubChildrenOfType(node, node_type): '''特定のタイプの子すべてを再帰的に削除します。''' for child in node.allSubChildren(): if child.type() == node_type: child.destroy()
このコードは、例えば、/obj下にあるVisibility SOPすべてを削除します:
>>> removeSubChildrenOfType(hou.node("/obj"), hou.sopNodeTypeCategory().nodeTypes()['visibility'])
allSubItems(top_down=True, recurse_in_locked_nodes=True, sync_delayed_definition=False)
→ tuple of hou.NetworkMovableItem
このノード内のすべてのサブアイテム(ノード、ネットワークボックス、ステッキーノートなど)を再帰的に返します。
例えば、hou.node("/").allSubItems()
は、hipファイル内のすべてのノードネットワークアイテムを返します。
このメソッドのパラメータの詳細は、hou.Node.allSubChildrenを参照してください。
allNodes()
→ generator of hou.Node
このノード内に含まれたすべてのノード(このノードを含む)のシーケンスを再帰的に返します。 このメソッドは、以下の点でhou.Node.allSubChildrenと異なります:
-
戻りのシーケンスには、このノードが含まれます。
-
上から下または下から上の走査順を保証していません。
-
このメソッドはジェネレータであり、タプルを返さないので、その戻り値によってループさせてノードを作成または削除するのは危険です。
以下は、/obj下のすべてのノードのパスを出力した例です:
root_node = hou.node("/obj") for node in root_node.allNodes(): print node.path()
glob(pattern, ignore_case=False)
→ tuple of hou.Node
パターンに合致した子ノード名のタプルを返します。
パターンには、スペース区切りで複数のピースを含めることができます。
パターンピース内のアスタリスク(*
)は、どの文字にも合致します。
デフォルトでは、Houdiniは、各パターンピースで既に合致したノードを追加します。
しかし、そのパターンピースがキャレット(^
)で始まっていれば、Houdiniは、その結果からそのピースの合致を排除します。
デフォルトのパターンマッチは、大文字小文字を区別します。
大文字小文字を区別せずにパターンマッチングを行なうには、ignore_case
をTrueに設定します。
この設定は、ノード名のマッチングの時にだけ大文字小文字の区別をしない事に注意してください。
グループ、ネットワークボックス、バンドル名のマッチングでは、大文字小文字の区別がされます。
このメソッドは、空っぽのパターンを指定した場合に空っぽのタプルを返します。
>>> obj = hou.node("/obj") >>> obj.createNode("geo", "geo1") <hou.ObjNode of type geo at /obj/geo1> >>> obj.createNode("geo", "geo2") <hou.ObjNode of type geo at /obj/geo2> >>> obj.createNode("geo", "grid") <hou.ObjNode of type geo at /obj/grid> >>> obj.createNode("geo", "garbage") <hou.ObjNode of type geo at /obj/garbage> >>> obj.createNode("geo", "box") <hou.ObjNode of type geo at /obj/box> >>> def names(nodes): ... return [node.name() for node in nodes] >>> names(obj.glob("g*")) ['geo1', 'geo2', 'grid', 'garbage'] >>> names(obj.glob("ge* ga*")) ['geo1', 'geo2', 'garbage'] >>> names(obj.glob("g* ^ga*")) ['geo1', 'geo2', 'grid']
hou.Node.recursiveGlobも参照してください。
recursiveGlob(pattern, filter=hou.nodeTypeFilter.NoFilter, include_subnets=True)
→ tuple of hou.Node
hou.Node.globと同様に、パターンに合致した名前の子ノードのタプルを返します。 違うのは、その合致した子ノードからさらに再帰的にその子ノードすべてが追加されます。 さらに、その結果はノードタイプでフィルタリングすることができます。
Houdiniは、パターンに対して子ノードをマッチングしてから、その合致した子ノードのサブ子ノードを再帰的に追加し、 そしてフィルターを適用します。
pattern
子ノード名は、この文字列パターンに対してマッチングされます。
パターン構文に関する情報は、hou.Node.globとhou.NodeBundleを参照してください。
子ノードがパターンに合致、且つ、include_subnets
がTrue
の場合、そのサブ子ノードすべてがパターンに関係なく(フィルタリングに基づいて)結果に追加されることに注意してください。
filter
合致したノードを特定のタイプに制限するためのhou.nodeTypeFilter列挙値 (例: object nodes, geometry object nodes, surface shader SHOPsなど)。
パターンとフィルターの挙動は、Houdiniのノードバンドルの挙動と非常に似ています。 詳細は、hou.NodeBundleを参照してください。
パターンが無効な場合は、hou.OperationFailedを引き起こします。
createNode(node_type_name, node_name=None, run_init_scripts=True, load_contents=True, exact_type_name=False, force_valid_node_name=False)
→ hou.Node
node_type_name
タイプのノードをこのノードの子として新しく作成します。
node_name
新しいノードの名前。指定しなかった場合、Houdiniはノードタイプ名に番号を追加します。 その番号は、固有のノード名になるまで番号を上げます。 名前を指定し、ノードがその名前で既に存在する場合、Houdiniは番号を追加して固有の名前を作成します。
run_init_scripts
Trueの場合、ノードタイプに関連した初期化スクリプトが新しいノードに対して実行されます。
load_contents
Trueの場合、サブネットの内容がカスタムサブネットオペレータに対して読み込まれます。
exact_type_name
Trueの場合、ノードのタイプ名がnode_type_name
で指定した通りのままになります。
そうでない場合、指定したnode_type_name
に合致する優先度の高いオペレータタイプを使用することができます。
例えば、“hda”を指定すると新しいバージョンの“hda::2.0”に合致したり、または“namespaceA::hda”と“namespaceB::hda”のオペレータが2つ利用可能な場合なら、
“namespaceB”が優先され、作成されるノードのタイプは“namespaceB::hda”になります。
force_valid_node_name
Trueの場合、node_name
が無効であっても有効な名前で新しいノードを作成します。
例えば、node_name
がfoo bar
だった場合、その新しいノード名はfoo_bar
になります。
force_valid_node_name
がFalseの場合、且つ、node_name
が無効だった場合、hou.OperationFailed例外が引き起こされます。
指定したノード名が無効、且つ、force_valid_node_name
がFalseの場合は、hou.OperationFailedを引き起こします。
このノードに子を含めることができなかった場合は、hou.OperationFailedを引き起こします。
このノードがロックされたアセット内にあった場合は、hou.PermissionErrorを引き起こします。
>>> obj = hou.node("/obj") # Houdiniにノードタイプ名に基づいた名前を選択させます。 >>> obj.createNode("geo") <hou.ObjNode of type geo at /obj/geo1> # Houdiniに固有の名前を選択させます。 >>> obj.createNode("geo") <hou.ObjNode of type geo at /obj/geo2> # ノードに特定の名前を指定します。 >>> obj.createNode("geo", "foo") <hou.ObjNode of type geo at /obj/foo> # Houdiniに私達が提案した名前から固有の名前を作成させます。 # また、ジオメトリオブジェクトに初期スクリプトを実行させなければ、中身が空っぽになります。 >>> obj.createNode("geo", "geo1", run_init_scripts=False) <hou.ObjNode of type geo at /obj/geo3> >>> obj.node("geo1").children() (<hou.SopNode of type file at /obj/geo1/file1>,) >>> obj.node("geo3").children() ()
destroy(disable_safety_checks=False)
このノードを削除します。
Nodeインスタンスを削除した後に、それに対してメソッドをコールすると、Houdiniはhou.ObjectWasDeletedを引き起こします。
ロックされたアセット内のノードを削除しようとした場合は、hou.OperationFailedを引き起こします。
disable_safety_checks
をTrue
にすると安全性チェックが無効になるので、ノードをクック中にこのメソッドがコールされるとHoudiniがクラッシュしてしまう場合があります。
copyItems(items, channel_reference_originals = False, relative_references = True, connect_outputs_to_multi_inputs = True)
→ tuple
of hou.NetworkMovableItem
指定したアイテムすべてのコピーをこのネットワーク内に作成します。これらのアイテムは、このネットワークの子である必要はありませんが、すべてのアイテムが同じ親ネットワーク内に含まれている必要があります。
channel_reference_originals
がTrueの場合、新しいノードすべてのパラメータが元のノードのチャンネル参照に設定されます。
コピーしたノードがサブネットワークであれば、トップレベルのノードのみが元のサブネットワークのチャンネル参照を構築します。
そのサブネットワーク内の子ノードは、元の子ノードの単純コピーになります。
relative_references
パラメータは、チャンネル参照がソースノードの相対パスまたは絶対パスのどちらを使用するのかを制御します。
connect_outputs_to_multi_inputs
がTrueで、コピーされるアイテムの出力が複数の入力ノードに接続されている場合(例えば、Merge)、そのコピーされた新しいアイテムの出力にもその複数の入力ノードが接続されます。
通常では、コピーされるノードには、そのコピーされるセットの外側のノードへの出力はありません。
新しいネットワークアイテムすべてのtuple
を返します。
このノードに子を含めることができなかった場合はhou.OperationFailedを引き起こします。 このノードがロックされたアセット内にあった場合はhou.PermissionErrorを引き起こします。
deleteItems(items, disable_safety_checks=False)
指定したhou.NetworkMovableItemオブジェクトのタプル内のすべてのアイテムを削除します。
これは、それらのアイテムをループさせて個々にdestroy()
をコールするよりも非常に効率的です。
また、これは他のオブジェクトも削除しないと削除することができないオブジェクトが存在する場合でも安全に処理します。
指定した1つ以上のアイテムがこのノードの子でなかった場合は、hou.OperationFailedを引き起こします。 このノードがロックされていたり、ロックされたデジタルアセット内にあった場合は、hou.PermissionErrorを引き起こします。
disable_safety_checks
をTrue
にすると安全性チェックが無効になるので、ノードをクック中にこのメソッドがコールされるとHoudiniがクラッシュしてしまう場合があります。
canCreateDigitalAsset()
→ bool
hou.Node.createDigitalAssetが成功できれば、True
を返します。
isCurrent()
→ bool
ノードが、ネットワーク内で最後に選択したノードであるかどうかを示すブールを返します。
各ネットワーク(つまり、子を含んだノード)自体には、選択したノードのリストが記録されており、最後に選択したノードが特別な意味を持っています。 例えば、ピン留めしていないパラメータペインで表示されるノードがそれです。
Houdiniですべてのネットワーク内の選択したノードすべてのタプルを取得するには、hou.selectedNodes()も参照してください。 このリストの最後のノードもHoudiniでは特別な意味をもち、グローバルの現行ノードに相当します。
setCurrent(on, clear_all_selected=False)
このノードを最後に選択したノードとして設定または未設定にします。
各ネットワーク(つまり、子を含んだノード)自体には、選択したノードのリストが記録されており、最後に選択したノードが特別な意味を持っています。 例えば、ピン留めしていないパラメータペインで表示されるノードがそれです。
on
がTrueの場合、このノードが最後に選択したノードになります。
Falseで、このノードが最後に選択したノードだった場合、そのノードが非選択になり、最後から2番目に選択したノードが最後に選択したノードになります。
clear_all_selected
がtrueの場合、Houdiniは、その処理を実行する前に、このネットワーク内のすべてのノードを非選択にします。
hou.Node.setSelectedとhou.selectedNodes()も参照してください。
selectedChildren(include_hidden=False, include_hidden_support_nodes=False)
→ tuple
of hou.Node
選択されたこのノードの子を含んだタプルを返します。 最後に選択したノードが特別な意味を持ち、そのノードはhou.Node.isCurrentを使って取得することもできることを覚えておいてください。
以下のサンプルは、/obj
内の選択したオブジェクトすべての名前をプリントします:
for n in hou.node("/obj").selectedChildren(): print n.name()
選択した子ノードの合計を調べるには、len(node.selectedChildren())
を使用します。
selectedItems(include_hidden=False, include_hidden_support_nodes=False)
→ tuple
of hou.NetworkMovableItem
選択されているこのノードの子を含んだタプルを返します。
selectedChildren
とは違い、このメソッドは、選択されたhou.NetworkBox, hou.SubnetIndirectInput, hou.StickyNote, hou.NetworkDotのオブジェクトも返します。
以下のサンプルは、/obj
内の選択したアイテムすべての位置をプリントします:
for n in hou.node("/obj").selectedItems(): print n.position()
numItems(item_type=None, selected_only=False, include_hidden=False)
→ int
選択されていて且つitem_type
で指定したタイプのノードの子の数を返します。
item_type
None
にすると、選択されているすべてのタイプのアイテムの数が返されます。
hou.networkItemType値を指定すると、選択されているそのタイプのアイテムの数が返されます。
selected_only
True
にすると、選択されているアイテムのみが数えられます。
type()
→ hou.NodeType
このノードに対してhou.NodeTypeオブジェクトを返します。
例えば、すべてのカメラノードインスタンスは、同じノードタイプを共有します。
childTypeCategory()
→ hou.NodeTypeCategory
このノードの子に相当するhou.NodeTypeCategoryを返します。 例えば、このノードがジオメトリオブジェクトの場合、その子はSOPです。 オブジェクトサブネットの場合、その子はオブジェクトです。
inputs()
→ tuple
of hou.Node
このノードの入力に接続されたノードのタプルを返します。 入力がhou.SubnetIndirectInputに接続されている場合、それに該当する親サブネットの入力に接続されたノードが返されます。 言い換えれば、間接入力の存在を隠すということです。つまり、その結果のノードは、すべてが呼び出し側のノードの兄弟であるとは限りません。
特定の入力が接続されていない(または、それが間接入力に接続されていても、それに該当するサブネットの親入力が接続されていない)場合は、タプルのその箇所にNone
値が配置されます。
input(inputidx)
→ hou.Node
このノードの指定された入力に接続されているノードを返します。 入力がhou.SubnetIndirectInputに接続されている場合、それに該当する親サブネットの入力に接続されたノードが返されます。 言い換えれば、間接入力の存在を隠すということです。つまり、その結果のノードは、すべてが呼び出し側のノードの兄弟であるとは限りません。
その入力が接続されていない(または、それが間接入力に接続されていても、それに該当するサブネットの親入力が接続されていない)場合は、None
値が返されます。
inputFollowingOutputs(inputidx)
→ hou.Node
このノードの指定された入力に接続されているノードを返します。 入力がhou.SubnetIndirectInputに接続されている場合、それに該当する親サブネットの入力に接続されたノードが返されます。 言い換えれば、間接入力の存在を隠すということです。つまり、その結果のノードは、すべてが呼び出し側のノードの兄弟であるとは限りません。
さらに、その入力がSOPsの非プライマリ出力に接続されている場合、返されるノードは、サブネットそのものではなく、SOPネットワーク内のノードになります。 このメソッドを使用することで、このノードの入力に呼応する1番目の出力を持ったノードを取得したい時に、コードが複数出力を考慮しなくて済みます。
その入力が接続されていない(または、それが間接入力に接続されていても、それに該当するサブネットの親入力が接続されていない)場合は、None
値が返されます。
outputs()
→ tuple
of hou.Node
このノードの出力に接続されたノードのタプルを返します。
このメソッドは、[connection.outputNode() for connection in self.outputConnections()]
のショートカットです。
inputConnections()
→ tuple
of hou.NodeConnection
このノードのトップに繋がっている接続のhou.NodeConnectionオブジェクトのタプルを返します。 このタプルの長さは、このノードに入ってくる接続の数と同じになります。 このノードに何も繋がっていなかった場合は、空っぽのタプルが返されます。
接続されたノード自体のリストを取得するには、hou.Node.inputsを使用します。 (接続の有無に関係なく)接続可能なコネクタのリストすべてを取得するには、hou.Node.inputConnectorsを使用します。
>>> cookie = hou.node("/obj").createNode("geo").createNode("cookie") >>> cookie.setInput(1, cookie.parent().createNode("box")) >>> cookie.inputConnections() (<hou.NodeConnection from grid1 output 0 to cookie input 1>,) >>> cookie.inputConnectors() ((), (<hou.NodeConnection from grid1 output 0 to cookie input 1>,))
hou.Node.inputConnectorsも参照してください。
outputConnections()
→ tuple
of hou.NodeConnection
このノードの下から繋がっている接続のNodeConnectionオブジェクトのタプルを返します。 このノードの出力に何も繋がっていなかった場合は、空っぽのタプルが返されます。
接続されたノード自体のリストを取得するには、hou.Node.outputsを使用します。
このメソッドは、reduce(lambda a, b: a+b, self.outputConnectors(), ())
のショートカットです。
ほとんどのノードは出力コネクタを1つしか持たないので、このメソッドは通常では、self.outputConnectors()[0]
と等価です。
>>> box = hou.node("/obj").createNode("geo").createNode("box") >>> box.parent().createNode("xform").setFirstInput(box) >>> box.parent().createNode("subdivide").setFirstInput(box) >>> box.outputConnections() (<hou.NodeConnection from box1 output 0 to xform1 output 0>, <hou.NodeConnection from box1 output 0 to subdivide1 input 0>)
hou.node.outputConnectorsも参照してください。
inputConnectors()
→ tuple
of tuple
of hou.NodeConnection
hou.NodeConnectionオブジェクトのタプルのタプルを返します。 その結果のタプルの長さは、このノードに接続可能な入力の最大数と同じです。 なにかそのコネクタに接続されていれば、各サブタプルは必ず1個のノード接続を含みます。 何も接続されていなければ、それは空っぽのタプルです。
hou.NodeConnectionとhou.Node.inputConnectionsも参照してください。
outputConnectors()
→ tuple
of tuple
of hou.NodeConnection
hou.NodeConnectionオブジェクトのタプルのタプルを返します。 その結果のタプルの長さは、このノードの出力コネクタの数と同じです。 各サブタプルは、そのコネクタから出ているコネクションすべてを含み、そのコネクタに何も接続されていなければ、それは空っぽのタプルです。
>>> split = hou.node("/obj").createNode("dopnet").createNode("split") >>> split.parent().createNode("rbdsolver").setFirstInput(split) >>> split.parent().createNode("gravity").setFirstInput(split, 1) >>> split.parent().createNode("merge").setFirstInput(split, 1) >>> split.outputConnectors() ((<hou.NodeConnection from split1 output 0 to rbdsolver1 input 0>,), (<hou.NodeConnection from split1 output 1 to gravity2 input 0>, <hou.NodeConnection from split1 output 1 to merge1 input 0>), (), ())
hou.NodeConnectionとhou.Node.outputConnectionsも参照してください。
indirectInputs()
→ tuple
of hou.SubnetIndirectInput
サブネットのhou.SubnetIndirectInputオブジェクトを返します。
このノードがサブネットワークでない場合は、hou.InvalidNodeTypeを引き起こします。
subnetOutputs()
→ tuple
of hou.Node
サブネットワークの子出力ノードを返します。
SOPsなどの特定のネットワークには、通常のディスプレイノードまたはレンダーノードをオーバーライドして複数の出力を可能にするための特別なOutputノードがあります。 何かしらのOutputノードが存在すれば、これは、それらのノードのリストを返します。 何もOutputノードが存在しなければ、クックのターゲットがディスプレイノードなのか出力ドライバなのかに応じて、ディスプレイノードまたはレンダーノードのどちらかが返されます。 サブネットに何も子がなければ、空っぽのリストが返されます。
inputAncestors(include_ref_inputs=True, follow_subnets=False, only_used_inputs=False)
→ tuple
of hou.Node
このノードの入力ノードすべてのタプルを返します。include_ref_inputsがFalseの場合、参照入力を辿りません。
follow_subnetsがTrueの場合、サブネットワークノードを単一ノードとして扱わず、そのディスプレイノードから始まる子ノードも辿ります。
only_used_inputs
がTrueの場合、最後のクックに関係したノードのみを辿ります。
inputs()
メソッドも参照してください。
inputIndex(input_name)
指定した名前のノード入力のインデックスを取得します。
入力名を使用するノードカテゴリに関しては、指定した名前の入力のインデックスを返します。 VOPノードに関しては、その名前が、それに該当する入力を持ったノードパラメータ名にもなります。
outputIndex(output_name)
指定した名前のノード出力のインデックスを取得します。
入力名を使用するノードカテゴリに関しては、指定した名前の出力のインデックスを返します。
setInput(input_index, item_to_become_input, output_index=0)
item_to_become_input
がNoneでない場合、他のノードの出力コネクタをこのノードの入力コネクタに接続します。
それ以外の場合、入力コネクタに接続されたすべてのノードの接続を解除します。
input_index
このノードの入力コネクタのインデックス。
item_to_become_input
None
の場合、このメソッドは、入力コネクタからのすべてのノードを接続解除します。
hou.Nodeまたはhou.SubnetIndirectInputの場合、このメソッドは、その出力をこのノードの入力コネクタに接続します。
output_index
他のノードの出力コネクタのインデックス。
output_index
が無効の場合は、hou.InvalidInputを引き起こします。
item_to_become_input
がこのノードと同じネットワーク内にない場合は、hou.OperationFailedを引き起こします。
ノードがロックされたアセット内にある場合は、hou.PermissionErrorを引き起こします。
setNamedInput(input_name, item_to_become_input, output_name_or_index)
input_nameで指定されたこのノード上の入力を、output_nameまたはoutput_indexで指定したitem_to_become_input上の出力に接続します。
setFirstInput(item_to_become_input, output_index=0)
self.setInput(0, item_to_become_input)
のショートカット。
詳細は、hou.Node.setInputを参照してください。
setNextInput(item_to_become_input, output_index=0, unordered_only=False)
他のノードからの出力コネクタを、このノードの1番目の非接続入力コネクタまたは複数入力コネクタに接続します。
ノードにOrdered InputsとUnordered Inputs(複数入力コネクタ)がある場合、unordered_only
パラメータを使用することで強制的に入力を、Ordered Inputではなく、Unordered Inputs(複数入力コネクタ)に接続することができます。
このメソッドは、ほぼ以下と等価です:
for input_index, connectors in enumerate(self.inputConnectors()): if len(connectors) == 0: self.setInput(input_index, item_to_become_input, output_index) raise hou.InvalidInput("All inputs are connected")
すべての入力が接続されていれば、hou.InvalidInputを引き起こします。 詳細は、hou.Node.setInputを参照してください。
insertInput(input_index, item_to_become_input, output_index=0)
入力ワイヤーを挿入します。つまり、input_indexの後の入力コネクタ毎に、その入力コネクタの内容を次のコネクタにシフトさせて、 hou.Node.setInputをコールします。パラメータの意味については、hou.Node.setInputを参照してください。
numOrderedInputs()
→ int
いくつかのノードでは、特有の意味を持つ専用の入力をいくつか持っており、その後に任意の数の追加入力を持っています。
この追加入力では隙間は許可されていません(これらの入力のことをUnordered Inputsと呼びます)。
これは、Multiple Solver DOPなどのDOPノードがそうです。
この関数は、そのUnordered Inputsの前の専用(またはOrdered)の入力の数を返します。
このノードのhou.Node.typeオブジェクトに対してhou.NodeType.hasUnorderedInputs関数がTrue
を返す場合は、この関数はゼロ以外の値を返すだけです。
createInputNode(input_index, node_type_name, node_name=None, run_init_scripts=True, load_contents=True, bool exact_type_name=False)
新しくノードを作成し、そのノードをこのノードの入力の1つに接続します。その新しいノードを返します。
input_index
このノードの入力コネクタのインデックス。
node_type_name
作成するノードのタイプの名前。詳細は、createNodeメソッドを参照してください。
node_name
詳細は、createNodeメソッドを参照してください。
run_init_scripts
詳細は、createNodeメソッドを参照してください。
load_contents
詳細は、createNodeメソッドを参照してください。
exact_type_name
詳細は、createNodeメソッドを参照してください。
createOutputNodeメソッドも参照してください。
createOutputNode(node_type_name, node_name=None, run_init_scripts=True, load_contents=True, bool exact_type_name=False)
新しくノードを作成し、その1番目の入力のこのノードの(1番目の)出力に接続します。その新しいノードを返します。
パラメータの詳細は、createNodeメソッドを参照してください。
createInputNodeメソッドも参照してください。
inputNames()
→ tuple of str
このノードに対して入力名すべてのタプルを返します。不可視の入力コネクタの名前も含まれます。
inputLabels()
→ tuple of str
このノードの入力ラベルすべてのタプルを返します。非表示の入力コネクタのラベルも含まれます。
outputNames()
→ tuple of str
このノードに対して出力名すべてのタプルを返します。
outputLabels()
→ tuple of str
このノードの出力ラベルすべてのタプルを返します。
editableInputStrings(input_index)
→ dict
of str
to str
指定した入力インデックスに関連のある文字列キー/値のペアの辞書を返します。 これらの文字列の目的は、あるノードタイプを他のノードタイプに変換することです。
このメソッドは、そのノードタイプがこの機能を利用していなければ例外を引き起こします。 そのノードタイプが、編集可能な入力データに対応しているかどうか判断するには、hasEditableInputDataを使用します。
editableInputString(input_index, key)
→ str
指定した入力インデックスとキーに関連のある文字列を返します。 この文字列の目的は、あるノードタイプを他のノードタイプに可変させることです。
このメソッドは、そのノードタイプがこの機能を使用していない場合に例外を引き起こします。 hasEditableInputDataを使用することで、ノードタイプが編集可能入力データに対応しているかどうかを判断することができます。
setEditableInputString(input_index, key, value)
指定した入力インデックスとキーに関連のある文字列を設定します。 この文字列の目的は、あるノードタイプを他のノードタイプに可変させることです。
このメソッドは、そのノードタイプがこの機能を使用していない場合に例外を引き起こします。 hasEditableInputDataを使用することで、ノードタイプが編集可能入力データに対応しているかどうかを判断することができます。
isSubNetwork()
→ bool
ノードがサブネットワークならTrue、そうでないならFalseを返します。
collapseIntoSubnet(child_nodes, subnet_name=None, subnet_type=None)
→ hou.Node
このノードの子ノードのシーケンスを指定すると、それらの子ノードをサブネットワークに折りたたみます。 つまり、このノードのネットワーク内にサブネットが作成され、このネットワークの指定した子をそのサブネット内に移動させます。
child_nodes
新しいサブネットに入るこのノードの子ノード。
subnet_name
新しいサブネットノードの名前。Houdiniに自動的に名前を選択させる場合は、Noneにします。
subnet_type
新しいサブネットノードのタイプ。自動的にHoudiniにプライマリサブネットワークタイプを選択させたいのであればNoneにします。 これが推奨です。
child_nodes
内のノードがこのネットワークの子でない場合やchild_nodes
が空っぽのシーケンスの場合は、hou.OperationFailedを引き起こします。
このサンプルの関数は、単一ノードを受け取り、それをサブネットに置換し、そのノードをサブネットに移動させます..
def collapseSingleNodeIntoSubnet(node, subnet_name=None): node.parent().collapseIntoSubnet((node,), subnet_name=None)
extractAndDelete()
→ tuple
of hou.NetworkMovableItem
このサブネットノードの子を移動させて、このノードの兄弟にし、このノードを削除します。このメソッドは、collapseIntoSubnet()
と逆のメソッドです。
抽出されたすべてのアイテムを含んだタプルを返します。
このノードがサブネットワークでない場合は、hou.InvalidNodeTypeを引き起こします。
comment()
→ str
ノードのコメント文字列を返します。
setComment(comment)
このノードに関連したコメントを設定します。
appendComment()
も参照してください。
appendComment(comment)
指定したテキストを、このノードに関連したコメントに追加します。
isDisplayDescriptiveNameFlagSet()
→ bool
ネットワークエディタ内でノードが説明的名前を表示するかどうかを示すブールを返します。
setDisplayDescriptiveNameFlag(on)
ネットワークディター内でこのノードが説明的名前を表示するかどうか設定します。
creator()
→ Node
このノードから、異なるタイプの最初の親を返します。 単純なネットワークでは、これはparent()と同じですが、その親が同じノードタイプの場合(例えば、どちらもSOPだった場合)、異なるタイプが見つかるまで処理が繰り返されます。 これは、コンテナノードを検索するのに役立ち、例えば、入れ子状になったSOPネットワークについて気にすることなく、SOPが格納されているObjectを検索することができます。 とはいえ、SOPの親が必ずしもObjectであるとは限らないことに注意してください!
moveToGoodPosition(relative_to_inputs=True, move_inputs=True, move_outputs=True, move_unconnected=True)
→ hou.Vector2
ノードをその入力や出力の近くで上手く間隔を空けて動かし、そのノードの新しい位置を返します。
layoutChildren(items=(), horizontal_spacing=-1.0, vertical_spacing=-1.0)
このノードのすべてまたは一部の子ノードをネットワークエディタ内で自動的に配置します。
items
配置する子hou.NetworkMovableItemオブジェクトのシーケンス。 このシーケンスには、ノード、ドット、サブネット入力を含めることができます。 このシーケンスが空っぽの場合、このメソッドは、このノードのすべての子アイテムの位置を変更します。
horizontal_spacing
タイルの幅と高さの比率は、共通入力を持つノード間の間隔に影響します。 このパラメータが-1の場合、Houdiniはデフォルトの間隔を使用します。
vertical_spacing
タイルの幅と高さの比率は、ノードとその出力ノード間の間隔に影響します。 このパラメータが-1の場合、Houdiniはデフォルトの間隔を使用します。
isHidden()
ノードがネットワークエディタ内で非表示かどうか返します。 Houdiniは、“exposed”という用語を使用して、非表示でないノードを参照することもできます。
可視ノードを不可視ノードに接続した場合、ネットワークエディタは、その可視ノードから不可視ノードまでのワイヤーを破線で表示します。
hou.Node.hideも参照してください。
hide(on)
ネットワークエディタ内にノードを非表示または表示します。不可視ノードに関する詳細は、hou.Node.isHiddenを参照してください。
errors()
→ tuple
of str
このノードの最後のクックからのエラーのテキストを返します。エラーがなければ空っぽのタプルが返されます。
warnings()
→ tuple
of str
このノードの最後のクックからの警告のテキストを返します。警告がなければ空っぽのタプルが返されます。
messages()
→ tuple
of str
このノードの最後のクックからメッセージのテキストを返します。メッセージがなければ空っぽのタプルが返されます。
iterNetworkBoxes()
→ generator of hou.NetworkBox
このノード内のすべてのネットワークボックスを巡回するジェネレータを返します。
findNetworkBox(name)
→ hou.NetworkBox
このノード内の指定した名前のネットワークボックスを返します。または指定した名前のネットワークボックスが存在しなかった場合はNone
が返されます。
findNetworkBoxes(pattern)
→ tuple
of hou.NetworkBox
このノード内のパターンに合致した名前のネットワークボックスのリストを返します。
createNetworkBox(name=None)
→ hou.NetworkBox
このネットワーク内にネットワークボックスを作成します。このノードがネットワークでない場合は、hou.OperationFailedを引き起こします。
name
を指定しなかった場合は、Houdiniは、そのネットワークボックスにデフォルトの名前を付けます。
ネットワークボックス名はネットワークエディタペイン内に表示されません。 その代わり、hou.NetworkBox.setCommentメソッドによって“コメント”を指定することができます。 このコメントは、ネットワークボックスのタイトルバーに表示されます。
copyNetworkBox(network_box_to_copy, new_name=None, channel_reference_original=False)
→ hou.NetworkBox
ネットワークボックスをコピーし、そのコピーを返します。
new_name
を指定した場合、そのネットワークボックスがnew_nameという名前の新しいネットワークボックスにコピーされます(既にその名前のネットワークボックスが存在すれば別の名前が生成されます)。
channel_reference_original
がTrue
の場合、そのコピーで作成されたすべてのオペレータは、元のオペレータを参照するように設定されたアニメーション可能なパラメータを持ちます。
このノードがネットワークでない場合や、ノードの子タイプがネットワークボックスのノードタイプに合致しなかった場合は、hou.OperationFailedを引き起こします。
iterStickyNotes()
→ generator of hou.StickyNote
このノード内のすべてのステッキーノートを巡回するジェネレータを返します。
findStickyNote(name)
→ hou.StickyNote
このノード内の指定した名前のステッキーノートを返します。指定した名前のステッキーノートが存在しなかった場合は、None
を返します。
findStickyNotes(pattern)
→ tuple
of hou.StickyNote
このノード内のパターンに合致した名前のステッキーノートのリストを返します。
createStickyNote(name=None)
→ hou.StickyNote
このネットワーク内にステッキーノートを作成します。このノードがネットワークでない場合は、hou.OperationFailedを引き起こします。
name
を指定しなかった場合、Houdiniは、そのノートをデフォルトの名前にします。
copyStickyNote(network_box_to_copy, new_name=None)
→ hou.StickyNote
ステッキーノートをコピーして、そのコピーを返します。
new_name
を指定した場合、そのステッキーノートがnew_nameという名前の新しいステッキーノートにコピーされます(既にその名前のステッキーノートが存在すれば別の名前が生成されます)。
このノードがネットワークでない場合や、ノードの子タイプがステッキーノートのノードタイプに合致しなかった場合は、hou.OperationFailedを引き起こします。
createNetworkDot()
→ hou.NetworkDot
このネットワーク内にネットワークドットを作成します。このノードがネットワークでない場合は、hou.OperationFailedを引き起こします。
copyItemsToClipboard(items)
子アイテムのシーケンス(ノード、ネットワークボックス、ステッキーノートなど)を指定すると、このネットワークまたは他のネットワーク内にそれらをペーストできるように、 それらのアイテムがクリップボードに保存されます。
items
このノードの子であるhou.NetworkMovableItemのシーケンス。
これらのノードまたはネットワークボックスがこのノードの子でない場合は、hou.OperationFailedを引き起こします。 このノードの内容を読み込む権限がない場合は、hou.PermissionErrorを引き起こします。
pasteItemsFromClipboard(position = None)
hou.Node.copyItemsToClipboardを使って保存されたファイルの内容を、このノードの内容に読み込みます。
position
パラメータを2つのfloat値のタプル(またはhou.Vector2のような同等のもの)として指定すると、ペーストしたアイテムが、その位置を中心に配置されるように移動されます。
このノードがネットワークでない場合やクリップボードからアイテムを読み込む時にエラーが発生した場合は、hou.OperationFailedを引き起こします。 このノードがロックされたデジタルアセットインスタンスであれば、hou.PermissionErrorを引き起こします。
__eq__(node)
→ bool
Node
オブジェクト間に==
を実装します。
例えば、hou.root() == hou.node(“/”)はTrue
を返します。
同じHoudiniノードに対して複数のPython Node
オブジェクトが存在できます。
hou.node()
の2つの同一コールは、異なるPython Node
オブジェクトを返し、それぞれ同じHoudiniノードを意味します。
==
(別名__eq__
)を使用してそれらのノードを比較すると、True
を返し、
is
(オブジェクト同一性テスト)を使用してそれらのノードを比較するとFalse
を返します。
__ne__(node)
→ bool
Node
オブジェクト間に!=
を実装します。__eq__()
を参照してください。
setUserData(name, value)
このノードインスタンス上に名前付き文字列を追加/設定します。
name
ユーザ定義データに対する固有名(キー)。異なる名前を使用することで、複数のユーザ定義データをノードに追加することができます。
value
格納する文字列。
この名前/値のペアがHIPファイルに格納され、それがopscriptとhou.Node.asCodeからの出力に含まれます。
以下のサンプルは、ユーザ定義データを設定、アクセス、削除する方法について説明しています:
>>> n = hou.node("/obj").createNode("geo") >>> n.setUserData("my data", "my data value") >>> n.userData("my data") 'my data value' >>> n.userDataDict() {'my data': 'my data value'} >>> n.destroyUserData("my data") >>> n.userDataDict() {} >>> print n.userData("my data") None
詳細とサンプルは、ノード毎のユーザ定義データを参照してください。
Tip
ユーザデータキーの頭にnodeinfo_
を付けると、(その接頭辞なしで)そのキーと値がNode Infoポップアップウィンドウのカスタムフィールドとして表示されます。
userDataDict()
→ dict
of str
to str
このノードに対するユーザ定義の名前/文字列のペアすべてを含んだ辞書を返します。
詳細は、hou.Node.setUserDataを参照してください。
userData(name)
→ str
or None
この名前のユーザ定義データを返します。この名前のデータが存在しなかった場合は、None
が返されます。
詳細は、hou.Node.setUserDataを参照してください。
このメソッドは以下のように実装されています:
def userData(self, name): return self.userDataDict().get(name)
destroyUserData(name, must_exist=True)
この名前のユーザ定義データを削除します。
詳細は、hou.Node.setUserDataを参照してください。
この名前のユーザデータが存在しない且つmust_existがTrueの場合は、hou.OperationFailedを引き起こします。
isFlagReadable(flag)
→ bool
指定したフラグが読み込み可ならTrue、そうでないならFalseを返します。
flag
は、hou.nodeFlag値でなければなりません。
isFlagWritable(flag)
→ bool
指定したフラグが書き込み可ならTrueを、そうでないならFalseを返します。
flag
は、hou.nodeFlag値でなければなりません。
setGenericFlag(flag, value)
bool
、value
に基づいて、指定したフラグの値を設定します。
flag
は、hou.nodeFlag値でなければなりません。
Methods from hou.OpNode ¶
createOrMoveVisualizer(output_index)
このノードの特定の出力のデータを可視化するためのノードを作成します。
現行ネットワーク内に既にビジュアライザノードが存在する場合には、そのビジュアライザノードが、ここで指定したoutput_index
に移動して接続されます。
このメソッドは、SOPとVOPのノードに対してのみ実行されます。
他のノードタイプに対しては、このメソッドをコールしても何も実行されません。
copyTo(destination_node)
→ hou.Node
このノードをノード階層内の新しい場所にコピーします。destination_node
の中に新しいノードが配置されます。
このメソッドは、その新しいノードを返します。
destination_node
に新しいノードを配置することができなかった場合はhou.OperationFailedを引き起こします。
ロックされたアセットの中にdestination_node
があった場合はhou.PermissionErrorを引き起こします。
parm(parm_path)
→ hou.Parm or None
指定したパスのパラメータを返します。そのパラメータが存在しなかった場合はNone
を返します。
globParms(pattern, ignore_case=False, search_label=False, single_pattern=False)
→ tuple of hou.Parm
パターンに一致したパラメータのタプルを返します。
パターンには、スペース区切りで複数のピースを含めることができます。
パターンピース内のアスタリスク(*
)は、どの文字にも合致します。
デフォルトでは、Houdiniは、各パターンピースで既に合致したパラメータを追加します。
しかし、そのパターンピースがキャレット(^
)で始まっていれば、Houdiniは、その結果からそのピースの合致を排除します。
デフォルトのパターンマッチは、大文字小文字を区別します。
大文字小文字を区別せずにパターンマッチングを行なうには、ignore_case
をTrueに設定します。
この設定は、ノード名のマッチングの時にだけ大文字小文字の区別をしない事に注意してください。
グループ、ネットワークボックス、バンドル名のマッチングでは、大文字小文字の区別がされます。
デフォルトでは、パターンに合致した名前のパラメータのみが返されます。search_label
をTrueに設定すれば、パターンに合致したラベルのパラメータも返されます。
single_pattern
がTrueの場合、パターンをスペースで区切っても、そのパターンは1パターンとして扱われます。
このメソッドは、空っぽのパターンを指定した場合に空っぽのタプルを返します。
evalParm(parm_path)
→ int
, float
, or str
指定したパラメータを評価し、その結果を返します。
allParms()
→ generator of hou.Parm
このノード内に含まれたすべてのノード(このノードを含む)のパラメータすべてのシーケンスを再帰的に返します。
このメソッドはジェネレータであり、タプルを返しません。
以下は、/obj下のすべてのノードのパラメータパスを出力した例です:
root_node = hou.node("/obj") for parm in root_node.allParms(): print parm.path()
setParms(parm_dict)
Parm名と値をマッピングした辞書を指定すると、このノード上のそれに相当する各Parmを、その辞書で指定された値に設定します。
以下のサンプルは、一度にtx
とsy
のパラメータを設定します:
>>> node = hou.node("/obj").createNode("geo") >>> node.setParms({"tx": 1, "sy": 3})
Parm名はパラメータとパラメータタプルのどちらにも試されるので、ベース名も使用することができます:
>>> node = hou.node("/obj").createNode("geo") >>> node.setParms({"t": (1, 2, 3), "s": (3, 3, 3)})
パラメータ名のどれかが無効の場合、hou.OperationFailedを引き起こします。
setParmExpressionsメソッドも参照してください。
setParmsPending(parm_dict)
Parm名と値をマッピングした辞書を指定すると、このノード上のそれに相当する各Parmの保留値を設定します。 パラメータとパラメータタプルのどちらにも対応しています。
パラメータ名のどれかが有効でなかった場合は、hou.OperationFailedを引き起こします。
setPendingメソッドも参照してください。
setParmExpressions(parm_dict, language=None, replace_expressions=True)
Parm名とエクスプレッション文字列をマッピングした辞書を指定すると、このノード上のそれに相当する各Parmを、その辞書で指定されたエクスプレッション文字列に設定します。
language
とreplace_expressions
のParmに関しては、hou.Parm.setExpressionを参照してください。
以下のサンプルのエクスプレッションは、一度にtx
とsy
のパラメータを設定します:
>>> node = hou.node("/obj").createNode("geo") >>> node.setParmExpressions({"tx": 'ch("ty")', "sy": "sin($F)"})
パラメータ名のどれかが無効の場合、hou.OperationFailedを引き起こします。
setParmsメソッドも参照してください。
parmTuple(parm_path)
→ hou.ParmTuple or None
指定したパスでのパラメータタプルを返し、それがなければNone
を返します。
このメソッドはparm()
と同様ですが、hou.Parmの代わりにhou.ParmTupleを返します。
evalParmTuple(parm_path)
→ tuple
of int
, float
, or str
指定したパラメータタプルを評価し、その結果を返します。
parmTuples()
→ tuple
of hou.ParmTuple
このノード上のパラメータタプルすべてのリストを返します。
このメソッドはparms()
と同様ですが、hou.Parmの代わりにhou.ParmTupleを返します。
parmsInFolder(folder_names)
→ tuple
of hou.Parm
このノード上のフォルダ内のパラメータのリストを返します。 フォルダと(あれば)そのサブフォルダ内のパラメータすべてを返します。
folder_names
フォルダ名文字列のシーケンス。例えば、RenderフォルダのShadingフォルダ内のパラメータのリストを取得するには、("Render", "Shading")
を使用します。
このフォルダ名は、内部パラメータではなくパラメータダイアログで使用されるラベルを意味します。
このシーケンスが空っぽの場合、このメソッドは、parms()
と同様にノード上のパラメータすべてを返します。
folder_names
で指定したフォルダが存在しなかった場合は、hou.OperationFailedを引き起こします。
例えば、ノードのRenderフォルダにShadingサブフォルダが含まれていると仮定します。 以下のコードの行は、そのRenderフォルダ内のパラメータを返します:
# "Render"の後のカンマは、その"Render"が括弧で閉じた単一文字列としてではなく、 # タプル/シーケンスの中に"Render"が含まれていることをPythonに伝えている # ことに注意してください。 >>> node.parmsInFolder(("Render", ))
以下のコードの行は、Shadingサブフォルダ内のパラメータを返します。
>>> node.parmsInFolder(("Render", "Shading"))
hou.Parm.containingFoldersとhou.Parm.containingFolderSetParmTuplesも参照してください。
Note
このメソッドは、フォルダパラメータに似た挙動をするマルチパラメータに対して動作しません。 マルチパラメータ内のパラメータのリストを取得したいのであれば、hou.Parm.multiParmInstancesをコールしてください。
parmTuplesInFolder(folder_names)
→ tuple of hou.ParmTuple
このノード上のフォルダ内のパラメータタプルのリストを返します。
このメソッドは、parmsInFolder()
と同様ですが、hou.Parmの代わりにhou.ParmTupleのリストを返します。
引数に関する情報は、上記のparmsInFolder()
を参照してください。
hou.Parm.containingFoldersとhou.Parm.containingFolderSetParmTuplesも参照してください。
expressionLanguage()
→ hou.exprLanguage列挙値
ノードのデフォルトのエクスプレッション言語を返します。
エクスプレッションをまだ含んでいないパラメータにエクスプレッションを入力すると、ノードのエクスプレッション言語を使用して、そのエクスプレッションの評価方法が決められます。 GUIのパラメータダイアログ内でノードのエクスプレッション言語を変更することができます。
ノードのエクスプレッション言語を変更しても、既にエクスプレッションを含んだパラメータ(つまり、キーフレーム突きのパラメータ)の言語は変わりません。
パラメータに既にエクスプレッションが入っていて、GUIでそのエクスプレッションを変更しても、ノードのエクスプレッション言語の値に関係なくエクスプレッション言語が変わらないことに注意してください。
Pythonからパラメータ内の既存エクスプレッションの言語を変更するには、parm.setExpression(parm.expression(), language)
のようにhou.Parm.setExpressionを使用してください。
setExpressionLanguage(language)
ノードのデフォルトエクスプレッション言語を設定します。
詳細は、expressionLanguage()
を参照してください。
parmAliases(recurse=False)
→ dict of hou.Parm to str
ノードのパラメータ上のパラメータエイリアスの辞書を返します。 辞書内のキーは、エイリアスを持つパラメータで、その値はエイリアス名です。
recurse
このノードと その子 のパラメータエイリアスを返します。
clearParmAliases()
ノードのパラメータからエイリアス名すべてを削除します。
spareParms()
→ tuple of hou.Parm
このノードのSpareパラメータ(ユーザ定義パラメータ)のリストを返します。
removeSpareParms()
このノードからすべてのSpareパラメータを削除します。
parmTemplateGroup()
→ hou.ParmTemplateGroup
このノードの現在のパラメータレイアウトに相当するparmテンプレートのグループを返します。
現行パラメータグループを取得したり、それを修正したり、それを使ってhou.Node.setParmTemplateGroupをコールすることで、 このノードのパラメータレイアウトの編集(Spareパラメータの追加削除、ビルトインパラメータの並べ替えや非表示など)をすることができます。
以下のサンプルは、ジオメトリオブジェクトを作成し、そこにMy Parms
フォルダを追加し、そのフォルダにMy Parm
floatパラメータを追加します。
パラメータは、作成されたジオメトリオブジェクトにのみ追加されます。つまり他のジオメトリオブジェクトは影響を受けません。
>>> node = hou.node("/obj").createNode("geo") >>> group = node.parmTemplateGroup() >>> folder = hou.FolderParmTemplate("folder", "My Parms") >>> folder.addParmTemplate(hou.FloatParmTemplate("myparm", "My Parm", 1)) >>> group.append(folder) >>> node.setParmTemplateGroup(group)
詳細とサンプルは、hou.ParmTemplateGroupとsetParmTemplateGroupメソッドを参照してください。
setParmTemplateGroup(parm_template_group, rename_conflicting_parms=False)
このノードのSpareパラメータを変更します。
parm_template_group
新しいパラメータレイアウトを含んだhou.ParmTemplateGroupオブジェクト。
rename_conflicting_parms
True
の場合、同じパラメータタプル名を持つグループ内のパラメータの名前が自動的に変更されます。
False
で、同じ名前のパラメータが存在すれば、このメソッドはhou.OperationFailedを引き起こします。
各ノードタイプは、必ず存在するパラメータのセットを持っていて、特定のタイプでなければならないことに注意してください。 パラメータテンプレートグループにノードタイプで必要なパラメータがなかった場合、そのパラメータが下に追加され、不可視に設定されます。 同様に、パラメータテンプレートグループが、必要なパラメータのタイプ、範囲、ラベル、他のプロパティを修正しようと試みる場合、そのパラメータの可視設定以外の変更すべてが無視されます。
このメソッドは、このクラスの他のパラメータ関連メソッド(addSpareParmTuple, removeSpareParmTuple, replaceSpareParmTuple, addSpareParmFolder, removeSpareParmFolder)よりも優先度が高いです。 その理由は、簡単にパラメータを制御することができるからです。
デジタルアセットのパラメータインターフェースを変更するには、hou.HDADefinition.setParmTemplateGroupを参照してください。
addSpareParmTuple(parm_template, in_folder=(), create_missing_folders=False)
→ hou.ParmTuple
Spareパラメータタプルをノードのパラメータの最後に追加します。
in_folder
が空っぽのシーケンスでない場合は、このメソッドは、それらのパラメータを特定のフォルダのパラメータの最後に追加します。
parm_template
パラメータタプルのタイプ、デフォルト値、範囲などを指定したhou.ParmTemplateサブクラスインスタンス。
in_folder
パラメータを保持するフォルダを指定したフォルダ名のシーケンス。
このパラメータが空っぽのシーケンス(例えば()
)の場合、Houdiniはフォルダ内にパラメータを格納しません。
例えば、("Misc", "Controls")
の場合、Houdiniは“Misc”フォルダ内の“Controls”フォルダ内にパラメータを格納します。
例えば、("Misc",)
の場合、Houdiniは“Misc”フォルダ内にパラメータを格納します。
create_missing_folders
Trueでin_folder
で指定したフォルダの位置が存在しなかった場合、このメソッドは、その見つからなかったフォルダを作成します。
このメソッドは、parm_template
に対してhou.FolderParmTemplateを渡すことで単一フォルダを追加することができることを覚えておいてください。
removeSpareParmTuple()
とaddSpareParmFolder()
のメソッドも参照してください。
このメソッドは廃止され、代わりにsetParmTemplateGroup
を使用してください。
removeSpareParmTuple(parm_tuple)
指定したSpareパラメータタプルを削除します。
addSpareParmTuple()
も参照してください。
このメソッドは廃止され、代わりにsetParmTemplateGroup
を使用してください。
addControlParmFolder(folder_name=None, parm_name=None)
コントロールパラメータフォルダをトップレベルの最前面フォルダとして追加します。
これは、カスタマイズしたコントロールパラメータの可視性を良くするために使用します。
同じ名前のフォルダが既に存在していれば、新しいフォルダは作成されません。
folder_name
がNoneの場合、そのフォルダ名前は'Controls'に設定されます。
parm_name
がNoneの場合、そのパラメータ名は'folder'に設定されます。
現行フォルダが存在しない場合、既存パラメータはグループ化されて'Parameters'という名前の新しいフォルダに格納され、新しいコントロールパラメータフォルダの後に配置されます。
addSpareParmFolder(folder_name, in_folder=(), parm_name=None, create_missing_folders=False)
フォルダをSpareパラメータに追加します。
セット内のフォルダすべてが1個のパラメータに相当することを覚えておいてください。
これがセットに入る最初のフォルダの場合、parm_name
がパラメータ名として使用されます。
そうでない場合、parm_name
は無視され、セット内の最初のフォルダのパラメータ名が使用されます。
これがセット内の最初のフォルダでparm_name
がNoneの場合、デフォルトが’sparefolder0'です。
parm_name
が既に使用されていれば、固有の名前が自動的に生成されます。
create_missing_folders
がTrueの場合、このメソッドは、in_folder内に存在しないフォルダを作成します。
そのため、このメソッドを使用すれば、SpareフォルダとSpareパラメータを同時に追加することができます。
addSpareParmTuple
メソッドにhou.FolderParmTemplateを渡すことで、フォルダを追加することができるので、このメソッドは廃止されました
また、addSpareParmTuple
も廃止され、代わりにsetParmTemplateGroup
を使用してください。
removeSpareParmFolder
とaddSpareParmTuple
のメソッドも参照してください。
このメソッドは廃止され、代わりにsetParmTemplateGroup
を使用してください。
removeSpareParmFolder(folder)
Spareパラメータから空っぽのフォルダを削除します。
folder
はフォルダ名のシーケンスです。
そのため、Outputフォルダを削除するには、"Output"
の代わりに("Output",)
を使用してください。
addSpareParmFolder()
, hou.ParmTemplateGroup.remove, hou.ParmTemplateGroup.findFolderも参照してください。
replaceSpareParmTuple(parm_tuple_name, parm_template)
既存のSpareパラメータタプルを新しいタプルに置換します。古いパラメータタプルが削除され、新しいパラメータタプルがそこに追加されます。
parm_tuple_name
置換するSpareパラメータタプルの名前。 この名前のパラメータタプルが存在しなかった場合や、その名前がSpareパラメータでない場合は、hou.OperationFailedを引き起こします。
parm_template
新しいパラメータタプルを記述したhou.ParmTemplate。
新しいパラメータタプルは、古いパラメータタプルと同じ名前であっても、そうでなくても構いません。 同じ名前のパラメータタプルを用意することで、既存のSpareパラメータタプルを修正することができます。
非Spareパラメータタプルを置換することができないことに注意してください。 とはいえ、hou.ParmTuple.hideを使用すれば、非Spareパラメータの可視性を変更することができます。
デジタルアセットのすべてのインスタンスのパラメータを変更するには、hou.HDADefinition.replaceParmTupleを使用します。
このメソッドは廃止され、代わりにsetParmTemplateGroup
を使用してください。
localVariables()
このノードのパラメータエクスプレッション内で$
接頭辞を使って参照可能なローカル変数のリストを返します。
localAttributes()
このノードのパラメータエクスプレッション内で@
接頭辞を使って参照可能なローカル変数のリストを返します。
このリストには、このノード内でアトリビュートとして定義されているローカル変数と、このノードが最後にクックされた時に利用可能だったコンテキストオプションが含まれます。
saveParmClip(file_name, start=None, end=None, sample_rate=0, scoped_only=False)
このノードのパラメータに関連のあるアニメーションを、file_nameで指定したClipファイルに保存します。 file_nameの拡張子によって、保存されるファイルのフォーマットが決まります。
以下の拡張子のどれかを使用することができます:
-
.clip
: アニメーションをプレーンテキスト(ASCII)のclipファイルとして保存します。 -
.bclip
: アニメーションをbclip(バイナリclip)ファイルとして保存します。 -
.bclip.sc
: アニメーションをBlosc圧縮のbclipファイルとして保存します。
Clipファイルに使用するサンプルレートを指定するには、sample_rateにゼロ以外のプラスの値を設定します。 例えば、現行フレームレートが24(hou.fps())で、sample_rateを12に設定すると、そのsample_rateが現行フレームレートの半分なので、そのアニメーションが2フレームおきにサンプリングされます。
startがNone
でない場合は、その指定したフレーム(この番号を含む)からアニメーションの保存を開始します。
None
の場合、グローバルの開始フレーム(この番号を含む)からアニメーションが保存されます。
同様にendがNone
でない場合は、その指定したフレーム(この番号を含む)でアニメーションの保存を終了します。
None
の場合、グローバルの終了フレーム(この番号を含む)までアニメーションが保存されます。
グローバルの開始/終了フレームは、Global Animation Optionsウィンドウで指定します。
scoped_onlyがTrue
の場合、スコープされたパラメータに関連のあるアニメーションのみが保存されます。
スコープされたパラメータがなかった場合、自動スコープのパラメータに関連のあるアニメーションが保存されます。
scoped_onlyがFalse
の場合、このノードのパラメータに関連のあるアニメーションが保存されます。
このノードのパラメータに何もアニメーションがなければ、hou.OperationFailed例外を引き起こします。
scoped_onlyがTrue
の場合、スコープされたパラメータに何もアニメーションがない、または、(このノードにスコープされたパラメータがない場合では)自動スコープのパラメータにアニメーションがなければ、この例外が引き起こされます。
アニメーションをファイルに保存した際にエラーが起きれば、hou.OperationFailed例外を引き起こします。
start >= end
の場合はhou.InvalidInput例外を引き起こします。
startのみを指定する場合には、必ずグローバルの終了フレーム未満の値を指定してください。
endのみを指定する場合には、必ずグローバルの開始フレームより大きい値を指定してください。
loadParmClip(file_name, sample_rate=0, start=None)
file_nameで指定したClipファイルを、このノードのパラメータのアニメーションとして読み込みます。 対応しているClipファイルフォーマットのリストは、hou.Node.saveParmClipを参照してください。
このノードのパラメータの名前に合致しないClipファイルのトラックは無視されます。
sample_rateには、ゼロ以外のプラスの値を設定します。そこで指定した値がアニメーションを読み込む時に使用されます。 例えば、現行フレームレートが24(hou.fps())で、sample_rateを12に設定すると、そのsample_rateが現行フレームレートの半分なので、そのアニメーションが2フレームおきにキーフレーム付きで読み込まれます。
startには、読み込んだアニメーションを開始させるフレームを指定します。 デフォルトでは、Clipファイルで指定されたフレームからアニメーションが開始します。
Warning
読み込んだアニメーションの範囲内にあるこのノードのパラメータの既存のキーフレームは、その読み込んだデータで上書きされます。
ファイルからアニメーションデータを読み込んだ際にエラーが起きれば、この関数は、hou.OperationFailed例外を引き起こします。
parmClipData(start=None, end=None, binary=True, use_blosc_compression=True, sample_rate=0, scoped_only=False)
→ str
for Python 2, bytes
for Python 3
このノードのパラメータのClipデータを返します。 このメソッドはhou.Node.saveParmClipと同様ですが、アニメーションをClipファイルに保存するのではなくて、Clipデータ(ファイルの内容)を返します。
start, end, sample_rate, scoped_onlyは、hou.Node.saveParmClipと同じ挙動です。
binaryがTrue
の場合はバイナリClipデータを返し、False
の場合はプレーンテキスト(ASCII)Clipデータを返します。
use_blosc_compressionがTrue
の場合はBlosc圧縮のバイナリClipデータを返します。
これはプレーンテキスト(ASCII)Clipデータには使用することができません。
返されるクリップデータは、Python3だとbytes
オブジェクト、Python2だとstr
オブジェクトです。
詳細は、HOMバイナリデータを参照してください。
このタプルのパラメータに何もアニメーションがなければhou.OperationFailed例外を引き起こします。
start >= end
の場合はhou.InvalidInput例外を引き起こします。
startのみを指定する場合には、必ずグローバルの終了フレーム未満の値を指定してください。
endのみを指定する場合には、必ずグローバルの開始フレームより大きい値を指定してください。
binary = False
且つuse_blosc_compression = True
の場合はhou.InvalidInput例外を引き起こします。
setParmClipData(data, binary=True, blosc_compressed=True, sample_rate=0, start=1)
dataで指定したClipを、このノードのパラメータのアニメーションとして読み込みます。 このメソッドはhou.Node.loadParmClipと同様ですが、Clipファイルの代わりにClipデータからアニメーションを読み込みます。
このクリップデータは、Python3だとbytes
オブジェクト、Python2だとstr
オブジェクトでなければなりません。
詳細は、HOMバイナリデータを参照してください。
sample_rateとstartはhou.Node.loadParmClipと同じ挙動です。
binaryとblosc_compressedには入力データのタイプを指定します。
binaryがTrue
の場合、指定するデータはバイナリClipデータです。
False
の場合、指定するデータはプレーンテキスト(ASCII)Clipデータです。
blosc_compressedがTrue
の場合、指定するデータはBlosc圧縮バイナリデータです。
これはプレーンテキスト(ASCII)Clipデータには使用することができません。
指定したデータが無効であれば、hou.OperationFailed例外を引き起こします。
binary = False
且つblosc_compressed = True
の場合はhou.InvalidInput例外を引き起こします。
references(include_children = True)
→ tuple
of hou.Node
パラメータエクスプレッション、nameによるノード参照、他のノードで生成されたデータに依存したエクスプレッションのどれかによって、 このノードが参照しているノードのタプルを返します。この返されるタプルは、あるノードが他のノードに影響を与えるすべての方法(入力の接続を除く)を反映しています。
この結果は、ノードの最後のクックによって異なる可能性があることに注意してください。まず最初にノードに対してcook()をコールすることを推奨します。
dependents(include_children = True)
→ tuple
of hou.Node
パラメータエクスプレッション、nameによるノード参照、他のノードで生成されたデータに依存したエクスプレッションのどれかによって、 このノードを参照しているノードのタプルを返します。この返されるタプルは、あるノードが他のノードに影響を与えるすべての方法(入力の接続を除く)を反映しています。
この結果は、ノードの最後のクックによって異なる可能性があることに注意してください。
fileReferences(recurse = True, project_dir_variable = "HIP", include_all_refs = True)
→ tuple
of hou.Parm and str
tuples
このノードからの(テクスチャ、ジオメトリファイル、アセットライブラリなどの)外部ファイル参照を表現したタプルのシーケンスを返します。
recurse
がTrueの場合、このノードのすべての子ノードに適用されます。
recurse
オペレータ階層全体に再帰的に適用します。
project_dir_variable
環境変数の名前を指定することができます。アセットのパスがその変数のパスから始まっていれば、この関数は、そのアセットのパスを環境変数に置換してパスを返します。
include_all_refs
これがTrueの場合、この関数は、すべてのファイル参照を返します。 これがFalseの場合、この関数は、選択されたファイル参照のみを返します。
hou.fileReferences()も参照してください。
createDigitalAsset(name=None, hda_file_name=None, description=None, min_num_inputs=0, max_num_inputs=0, compress_contents=False, comment=None, version=None, save_as_embedded=False, ignore_external_references=False, change_node_type=True, create_backup=True, install_path=None)
→ Node
このノードからデジタルアセットを作成します。通常では、このメソッドはサブネットノードに対してコールします。
name
新しく定義するデジタルアセットのノードタイプの名前。
hda_file_name
Houdiniがデジタルアセットを保存する先のHDAファイルの名前。
None
の場合、Houdiniは$HOME/houdiniX.Y/hda/OPcustom.otl
を使用します。
description
Tabメニューで表示させる名前。Noneの場合は、Houdiniは説明用の名前を使用します。
min_num_inputs
デジタルアセットのインスタンスの接続に必要な最小入力数。 詳細は、hou.HDADefinition.minNumInputsを参照してください。
max_num_inputs
入力コネクションに対してデジタルアセットのインスタンスで利用可能な入力コネクタの数。 詳細は、hou.HDADefinition.minNumInputsを参照してください。
compress_contents
このデジタルアセットの内容をHDAファイル内に圧縮するかどうか。 詳細は、hou.HDAOptions.compressContentsを参照してください。
comment
ユーザ定義のコメント文字列。詳細は、hou.HDADefinition.commentを参照してください。
version
ユーザ定義のバージョン文字列。詳細は、hou.HDADefinition.versionを参照してください。
save_as_embedded
デジタルアセットの定義をHDAファイルではなくHIPファイルに保存するかどうか。
このパラメータがTrueの時、Houdiniはhda_file_name
パラメータを無視します。
このパラメータをTrueに設定する事は、このパラメータをFalseに設定してhda_file_name
パラメータを“Embedded”に設定する事と同じです。
ignore_external_references
Trueの場合、Houdiniは、このデジタルアセットの内容が、そのアセット外側のノードを参照していても警告を発しません。
change_node_type
通常では、Houdiniはデジタルアセットを作成したノードを新しいデジタルアセットタイプに変更します。 このフラグをFalseに設定することで、そのノードをそのままにします。
create_backup
既存のHDAファイルを変更する前にバックアップを作成します。
install_path
新しいHDAのインストール先。 指定しなかった場合、“Current HIP File”または“Scanned Asset Library Directories”のどちらかにインストールされます。
createCompiledDigitalAsset(name=None, hda_file_name=None, description=None)
このノードから、コンパイルしたデジタルアセットを作成します。 通常では、このメソッドはVOPネットワークノード(例えば、Material Shader Builder SHOP, Surface Shader Builder SHOP, VEX Surface SHOP Type VOPNET)に対してコールします。 デジタルアセットはコンテンツセクションを持ちません。つまり、内部にVOPネットワークを持ちませんが、代わりに、シェーダコードを用意するには、保存したVEXコードセクションに依存します。
コンパイルしたHDAを作成した後、そのVEXコードセクションが今まで手動で変更していれば、それに該当するVEXオブジェクトコードセクションは、hou.HDADefinition.compileCodeSectionを使用して再コンパイルすることができます。
name
新しくデジタルアセットを定義するノードタイプの名前。
hda_file_name
Houdiniがデジタルアセットを保存する先のHDAファイルの名前。
None
の場合、Houdiniは$HOME/houdiniX.Y/hda/OPcustom.otl
を使用します。
description
Tabメニューで表示させる名前。Noneの場合は、Houdiniは説明用の名前を使用します。
changeNodeType(new_node_type, keep_name=True, keep_parms=True, keep_network_contents=True, force_change_on_node_type_match=False)
→ hou.Node
ノードを(同じコンテキスト内で)新しいタイプに変更します。
new_node_type
は、変更したいタイプの内部文字列名です。
Keep_name
, keep_parms
, keep_network_contents
は、ノードのタイプが変わった後に、
それぞれノードを同じ名前、同じパラメータ値、同じ内容に保持することを意味します。
force_change_on_node_type_match
は、ノードのタイプが既に指定したタイプの時でも、その変更を実行するべきかどうかを指示します。
allowEditingOfContents(propagate=False)
デジタルアセットの内容を編集できるように、そのデジタルアセットのロックを解除します。
この関数を使用するには、必ずHDAを修正する権限がなければなりません。
matchCurrentDefinition()
このノードがロック解除されたデジタルアセットの場合、そのデジタルアセットの内容を、その定義に保存されている内容に戻してロックします。 パラメータ値は変更されません。
このノードがロックされていたり、デジタルアセットでない場合は、このメソッドは何の効果もありません。
hou.Node.matchesCurrentDefinitionとhou.Node.isLockedも参照してください。
matchesCurrentDefinition()
→ bool
ノードの内容がそのタイプ定義にロックされているかどうか返します。
syncDelayedDefinition()
このノードがデジタルアセットで、その内容が現在Delay-Sync(遅延同期)状態である場合、その内容が同期されます。 既に同期されていたり、同期可能なアセットでない場合は、何も起きません。
isDelayedDefinition()
→ bool
このノードがデジタルアセットで、その内容が現在Delay-Sync(遅延同期)状態である場合、Trueを返します。 それ以外の場合、Falseを返し、同期できないノードが含まれていることを意味します。
isLockedHDA()
→ bool
このノードがデジタルアセットのインスタンスの場合、それがロックされているかどうか返します。 それ以外の場合はFalseを返します。
ロック解除されたデジタルアセットとデジタルアセットのインスタンスではないノードとを区別するには、ノードのタイプが定義を持っているかチェックします:
def isUnlockedAsset(node): return not node.isLockedHDA() and node.type().definition() is not None
ロック解除されたデジタルアセットインスタンスすべてを保存してロックする方法のサンプルは、hou.HDADefinition.updateFromNodeを参照してください。
isInsideLockedHDA()
→ bool
このノードはロック解除されたデジタルアセットの内にあるかどうか返します。このノードがロックされたHDA内になければ、そのノードをHDA定義から除外することができます。
isEditableInsideLockedHDA()
→ bool
ロックされたHDAノード内にノードが含まれている場合で、そのロックされたHDA内で編集可能としてマークされていなければFalseを返します。 編集可能としてマークされていればTrueを返します。 特に、この関数はロックされたHDA内にノードが含まれていなければ(または、そもそもHDA内に含まれていなければ)Trueを返します。
isMaterialManager()
→ bool
ノードにマテリアルが含まれていればTrueを返します。
hdaModule()
→ hou.HDAModule
このメソッドは、self.type().hdaModule()
のショートカットで、Pythonパラメータとボタンコールバックでのエクスプレッションの長さを短くすることができます。
詳細は、hou.NodeType.hdaModuleを参照してください。
hm
メソッドとhou.phm()も参照してください。
hm()
→ hou.HDAModule
このメソッドは、self.hdaModule()
のショートカットです。
hou.phm()も参照してください。
hdaViewerStateModule()
→ hou.HDAViewerStateModule
このメソッドは、大元のNode
に関係のあるhou.HDAViewerStateModuleのインスタンスを作成します。
hou.NodeType.hdaViewerStateModuleも参照してください。
hdaViewerHandleModule()
→ hou.HDAViewerHandleModule
このメソッドは、大元のNode
に関連付けられているhou.HDAViewerHandleModuleのインスタンスを作成します。
hou.NodeType.hdaViewerHandleModuleも参照してください。
syncNodeVersionIfNeeded(from_version)
指定したバージョンのHDA定義から現行バージョンのHDA定義へノードを同期化します。 hou.HDADefinition.versionも参照してください。
outputForViewFlag()
→ int
表示目的で使用されるノードの出力を示した整数を返します。
setOutputForViewFlag(output)
このノードの表示目的で使用する出力を設定します。
creationTime()
→ datetime.datetime
ノードが作成された時の日付と時間を返します。
modificationTime()
→ datetime.datetime
ノードが最後に修正された時の日付と時間を返します。
creatorState()
→ str
これは、作成に使用されたビューポートツールの名前を返します。 この名前はデフォルトでは設定されず、通常では空っぽの文字列です。
setCreatorState(state)
これは、このノードを作成したツールの名前を設定します。ノードタイプ名とは違う名前でこれをコールする場合、setBuiltExplicitly(False)
もコールしてください。
isBuiltExplicitly()
→ bool
このノードが明示的に構築されたかどうか返します(デフォルトはTrue)。 ほとんどのノードは明示的に構築されていますが、いくつかのノードはHoudiniで暗黙的に作成されています。 例えば、複数のSOPからジオメトリを選択して、オペレーションを実行した場合、Houdiniは、そのオペレーションを実行する前に暗黙的にmerge SOPを配置します。 SOPでジオメトリを再選択した時、Houdiniは暗黙的に作成されたSOPを自動的に削除します。
setBuiltExplicitly(built_explicitly)
このノードが明示的に構築されたかどうか設定します(デフォルト値はTrue)。 Falseに設定すると、このノードが色々なメニューとNetwork Viewペインのリストモードで表示されなくなります。 このフラグは、通常では、パラメータを変更しそうにない中間ユーティリティノードのために使用されます。
isTimeDependent()
→ bool
ノードが時間依存かどうか返します。時間依存ノードは、フレームが変わる度に再評価されます。
cook(force=False, frame_range=())
ノードを再クックするように頼んだり、強制させます。
frame_range
オブジェクトをクックするフレーム。これは、開始フレーム、終了フレーム、増分の順番で指定した2または3つの整数のタプルです。
2つのタプル(start, end)
を指定すると、増分は1
になります。
needsToCook(time=hou.time())
→ bool
ノードを再クックする必要があるかどうか尋ねます。
cookCount()
→ int
現行セッションで、このノードがクックされた回数を返します。
updateParmStates()
例えば、ノード内の各パラメータに対して非表示や無効化といったUI状態を更新します。
UI状態は、評価を必要とする条件文(つまり、Disable When)として表現することができます。 通常のGUIのHoudiniでは、ノードが選択された時にParameter Paneがその評価を実行して、それらのノードパラメータをペイン内でどのように表示させるのか決定します。 しかし、CUIのHoudiniまたはParameter Paneがそのノードをまだ読み込んでいない時は、その評価は発生せず、UI状態はデフォルトのままになり、 hou.Parm.isDisabledやhou.Parm.isHiddenなどのメソッドが正しい値を返さなくなります。 そのような場合には、hou.Node.updateParmStatesをコールすることを推奨します。
infoTree(verbose=False, debug=False, output_index=0, force_cook=False)
→ hou.NodeInfoTree
ノードとその直近のクックデータに関する情報を含んだツリー構造体を返します。 このツリーの内容は、ノードタイプやクックデータの性質によって大きく変わります。 このデータのツリーは、ノード情報ウィンドウの内容を生成するために使用します。
verbose
verbose
をTrue
に設定すると、さらに追加情報が生成されます。
特に計算が重いデータや膨大な情報量を生成するデータは、このオプションが有効な時にのみそれが生成される傾向があります。
debug
debug
をTrue
に設定すると、いくつかの場合で、一般的にHoudiniの内部処理をデバッグする時に非常に役立つ追加情報が表示されます。
例えば、ジオメトリアトリビュートは“データのID”を表示します。これはHDKで書かれたSOPのエラーを追跡する時に役立ちます。
output_index
情報を返すノードの出力を指定します。
force_cook
True
の場合、情報ツリーを構築する前に必ず出力をクックするようにします。
ノードが既にエラーになっている場合、これはノードの再クックを試すことに注意してください。
cookPathNodes()
→ tuple
of hou.Node
このノードが属しているネットワークの最後のクックで使用された(サブネット内のノードを含む)ノードのリストを返します。
canGenerateCookCode(check_parent=False, check_auto_shader=True)
→ bool
ノードが、コンパイルされたクックコードを生成することができればTrue、できなければFalseを返します。
check_parent
がTrueなら、その先祖の階層内の親もコードを生成することができるかテストされます。
ノードがクックコードを明示的に生成することができなくても、Auto-Shaderでラップすることができれば、暗黙的にそのようなコードが用意できる場合があります。
例えば、Anti-Aliased NoiseなどのビルディングブロックVOPsは完全なクックコードを生成します。
これらのVOPsには、フルクック機能に寄与するコードフラグメントが備わっています。
しかし、場合によっては、そのような機能で自動的にラップされてクックコードとして動作することがあります。
check_auto_shader
がTrueなら、暗黙的なクックコードがノードに備わっているのかテストされます。
cookCodeGeneratorNode(check_parent=False)
→ hou.Node
コンパイルされたクックコードを生成することができるノード自体またはこのノードを含んだネットワークノードを返します。 例えば、VOPノードに対するジェネレータノードは、SHOPノードだったり、それを含んだSOPノードがそれです。
このノードがコードを生成できなかったり、コードを生成するノード内にそのノードが含まれていない場合はNoneを返します。
cookCodeLanguage()
→ str
生成されるクックコードの言語(つまり、VEX, RSL)を返します。
このノードが、コンパイルされたコードを生成できなかった場合は、hou.OperationFailedを引き起こします。
supportsMultiCookCodeContexts()
→ bool
このノードが複数コンテキスト(つまり、サーフェスコンテキスト、ディスプレイスメントコンテキストなど)に対して、コンパイルされたクックコードを生成できればTrue、できなければFalseを返します。
このノードが、コンパイルされたコードを生成できなかった場合は、hou.OperationFailedを引き起こします。
saveCompiledCookCodeToFile(file_name, context_name=None)
コンパイルしたVEXコードを(これをサポートしているノードに対して)ディスクファイルに保存します。 引数の説明は、hou.Node.saveCookCodeToFileを参照してください。
saveCookCodeToFile(file_name, skip_header=False, context_name=None)
VEX/RSLソースコードを(これをサポートしているノードに対して)ディスクファイルに保存します。
file_name
生成されたコードの保存先のファイルパス。
skip_header
True
の場合、このメソッドは、ファイル名、コードが生成されたノードパス、タイムスタンプを含んだファイルの頭にヘッダーコメントを書き込みません。
context_name
コード用のシェーダコンテキストの名前を含んだ文字列。 このオプションは、Material Shader Builderなどのノードに適用され、複数のコンテキストタイプ用にコードを生成することができます。
例えば、Materialネットワークは、サーフェスとディスプレイスメントの両方のシェーダを含めることができるので、生成するシェーダコードのタイプを指定しなければなりません:
node("/shop/vopmaterial1").saveCookCodeToFile("myfile.vfl", context_name="surface")
単一コンテキストノードに対しては、この引数は無視されます。
VEXマテリアルに対して可能な値は、surface
, displacement
, light
, shadow
, fog
, image3d
, photon
, cvex
です。
RSLマテリアルに対して可能な値は、surface
, displacement
, light
, volume
, imager
です。
addNodeGroup(name=None)
→ hou.NodeGroup
ノードグループをノードに追加し、その新しいグループを返します。
指定した名前のグループが既に存在した場合、この関数は、新しいグループを追加せずに既存のグループを返します。 グループの名前がNoneまたは空っぽの文字列の場合、固有のデフォルト名が自動的に選択されます。
この関数は、ネットワークであるノードに対してのみコールすることができます。ネットワークでないノードに対してコールした場合、hou.OperationFailedを引き起こします。
ノードグループを削除するには、hou.NodeGroup.destroyを使用します。
nodeGroup(name)
→ hou.NodeGroup
指定した名前のノードで格納されているノードグループを返します。そのグループが存在しなかった場合は、None
を返します。
runInitScripts()
このノードのタイプに関連した初期化スクリプトを実行します。
deleteScript()
→ str
このノードが削除された時に実行されるスクリプトを返します。
setDeleteScript(script_text, language=hou.scriptLanguage.Python)
このノードが削除された時に実行されるスクリプトを設定します。
motionEffectsNetworkPath()
→ str
クリップを保存する場所を意味するノードパスを返します。この場所は存在してもしなくても構いません。 そのようなネットワークを見つけたり作成するには、hou.Node.findOrCreateMotionEffectsNetworkを使用します。
findOrCreateMotionEffectsNetwork(create=True)
→ hou.chopNetNodeTypeCategory()
Motion Effectsの格納に適したCHOPネットワークノードを返します。デフォルトでは、そのノードが存在しなかった場合は、そのノードが作成されます。
hou.Parm.storeAsClipとhou.Node.motionEffectsNetworkPathも参照してください。
stampValue(parm_name, default_value)
コピースタンプの浮動小数点または文字列の値を返します。 このノードは必ず下流のスタンプオペレータ(例えば、Copy SOP, Cache SOP, LSystem SOP, Copy CHOP)でなければなりません。
parm_name
スタンプ変数の名前。
default_value
Houdiniが現在スタンプを実行していない場合やparm_name
が有効な変数名でない場合にこの関数が返す値。
この値は、floatまたはstringです。
Pythonパラメータに以下のエクスプレッションを置くことができます:
node("../copy1").stampValue("sides", 5)
saveItemsToFile(items, file_name, save_hda_fallbacks = False)
子アイテム(ノード、ネットワークボックス、スティッキーノートなど)のシーケンスを指定して、それらのアイテムを含んだファイルを保存します。 hou.Node.loadItemsFromFileを使用することで、このファイルを読み込むことができます。
items
このノードの子であるhou.NetworkMovableItemのシーケンス。
file_name
内容の書き出し先のファイル名。このファイル名に拡張子を使用することができます。
save_hda_fallbacks
単純化されたHDA定義をその子ノードと一緒にファイルに保存するならTrue
に設定します。
これによって、その生成されたファイルに使用されているアセットがまだHoudiniセッションに読み込まれていなくても、そのファイルをどのHoudiniセッションでも安全に読み込むことができるようになります。
その生成されたファイルの使い方によっては、この情報が不要であることが多く、その結果、ファイルが無駄に大きくなります。
ファイルが書き出せなかった場合は、hou.OperationFailedを引き起こします。 このノードの内容を読み込む許可がなかった場合は、hou.PermissionErrorを引き起こします。
saveChildrenToFile(nodes, network_boxes, file_name)
ノードのリストとネットワークボックスのリストを単一シーケンスに組み合わせて、hou.Node.saveItemsToFileをコールします。
このメソッドは、上位互換のために用意されています。
新しいコードでは、直接saveItemsToFile
をコールしてください。
nodes
このノードの子であるhou.Nodeのシーケンス。
network_boxes
このノードに格納されるhou.NetworkBoxのシーケンス。 ネットワークボックスの内容は自動的に保存されないので、それらのネットワークボックスをノードのリストに置くのはあなた次第であることに注意してください。
loadItemsFromFile(file_name, ignore_load_warnings=False)
(hou.Node.saveItemsToFileで保存された)ファイルの内容をこのノードの内容へ読み込みます。
ファイルが存在しない、または正しいタイプのファイルでなかった場合は、hou.OperationFailedを引き起こします。
このノードがロックされたデジタルアセットのインスタンスだった場合は、hou.PermissionErrorを引き起こします。
警告ありで読み込みに成功して、ignore_load_warnings
がFalse
だった場合は、hou.LoadWarningを引き起こします。
loadChildrenFromFile(file_name, ignore_load_warnings=False)
hou.Node.loadItemsFromFileをコールします。これは、上位互換のために用意されています。
新しいコードでは、直接loadItemsFromFile
をコールしてください。
asCode(brief=False, recurse=False, save_channels_only=False, save_creation_commands=True, save_keys_in_frames=False, save_outgoing_wires=False, save_parm_values_only=False, save_spare_parms=True, save_box_membership=True, function_name=None)
→ str
ノードの再作成に必要なPythonコードをプリントします。
brief
パラメータの値がデフォルトでない場合は、値を設定しません。 recurseまたはsave_box_contentsのどれかがTrueの時、ノードの内容に適用します。
recurse
再帰的に全体のオペレータ階層に適用します。
save_box_contents
ノードの内容をスクリプト化します。
save_channels_only
出力チャンネルのみ。 recurseまたはsave_box_contentsがTrueの時、ノードの内容に適用します。
save_creation_commands
ノードに対して作成スクリプトを生成します。Falseに設定すると、生成されるスクリプトは、ネットワークボックスが既に存在しているものとみなします。 Trueに設定すると、スクリプトは、ネットワークボックスを作成することによって開始します。
save_keys_in_frames
出力チャンネルとサンプルのキー時間(秒ではなくフレーム)。 recurseまたはsave_box_contentsがTrueの時、ノードの内容に適用します。
save_parm_values_only
パラメータを評価し、エクスプレッションの代わりにそれらの値を保存します。 recurseまたはsave_box_contentsがTrueの時、ノードの内容に適用します。
save_spare_parms
Spareパラメータも保存します。save_creation_commandsがTrueの時、Spareパラメータを作成するコマンドも出力されます。 recurseまたはsave_box_contentsがTrueの時、ノードの内容に適用します。
save_box_membership
ルートアイテムをその親のネットワークボックス(存在すれば)に追加するコードを出力します。
function_name
function_nameを指定すると、出力がPython関数でラップされます。
addEventCallback(event_types, callback)
特定のアクション、イベントが この特定のノードインスタンス で起きた時にHoudiniがコールするPythonコールバックを登録します。
コールバックは、現行セッションでのみ維持されます。例えば、これらのコールバックは.hip
ファイルに保存されません。
すべてのセッションでコールバックを維持させたい場合には、これらのコールバックを(ユーザが.hip
ファイルを開いた時に実行される)456.py
に追加します。
詳細は、Pythonスクリプトの追加先を参照してください。
event_types
Houdiniにcallback
関数をコールさせるイベントタイプを記述したhou.nodeEventType列挙値のシーケンス。
callback
コール可能なPythonオブジェクト(例えば、関数やバインドメソッド)。Houdiniは、event_types
に指定したイベントタイプのどれかが発生した時に、この関数をコールします。
Houdiniは、コールバックを発動したイベントに相当するhou.nodeEventType値を含んだevent_type
キーワード引数を使って、その関数をコールします。
Houdiniは、イベントタイプに応じて追加のキーワード引数を渡します。
例えば、ParmTupleChanged
イベントに対するコールバックでは、Houdiniは、変更のあったパラメータのhou.ParmTuple参照を含んだparm_tuple
キーワード引数を渡します。
各イベントタイプに渡される追加引数(があれば)に関しては、hou.nodeEventTypeを参照してください。
**kwargs
を引数リストに追加することで、すべてのキーワード引数を受け入れることができるので、異なるイベントに対して同じコールバックを使用することができたり、今後の変更に対応することができます:
def event_callback(event_type, **kwargs): ...
Note
2回以上まったく同じコールバック関数を追加しようとしても、Houdiniは、イベントの反応に対して1回だけしかその関数をコールしません。
しかし、そのコールバック関数を別のevent_types
に登録したい場合には、同じ関数を“追加”するのは役に立つことがあります。
event_types
リスト引数が空っぽの場合は、hou.OperationFailedを引き起こします。
以下の例では、特定のノードの名前が変更された時にコールされる関数をセットアップする方法を説明しています:
def name_changed(node, event_type, **kwargs): print("The geometry object is now named", node.name()) hou.node("/obj/geo1").addEventCallback((hou.nodeEventType.NameChanged, ), name_changed)
hou.Node.removeEventCallbackとhou.Node.removeAllEventCallbacksも参照してください。
removeEventCallback(event_types, callback)
以前にこのノードに追加したコールバックとhou.nodeEventType列挙値のシーケンスを指定すると、コールバックに対してイベントタイプのセットからそれらのイベントタイプを削除します。 残りのイベントタイプのセットが空っぽの場合、コールバックは、このノードから完全に削除されます。
コールバックが以前に追加されていなかった場合、hou.OperationFailedを引き起こします。
詳細は、hou.Node.addEventCallbackを参照してください。
addParmCallback(callback, parm_names)
この特定のノードインスタンス 上のparm_names
のパラメータが変更される度にHoudiniがコールするPythonコールバックを登録します。
いくつかのパラメータのみを考慮する場合、または、このノードにパラメータがたくさんある場合、hou.Node.addEventCallbackを使って追加されたコールバック内でパラメータ名をフィルタリングするよりもこのメソッドの方が高速です。
callback
コール可能なPythonオブジェクト(例えば、関数やバインドメソッド)。Houdiniは、event_types
に指定したイベントタイプのどれかが発生した時に、この関数をコールします。
parm_names
パラメータ名の全リスト。
詳細は、hou.Node.addEventCallbackを参照してください。
removeAllEventCallbacks()
このノードからすべてのイベントタイプに対するイベントコールバックすべてを削除します。
詳細は、hou.Node.addEventCallbackを参照してください。
Warning
removeAllEventCallbacks
は注意して使用してください。
特にViewerステートがそうで、ステートに入った時に静かに機能が停止してしまいます。
eventCallbacks()
→ tuple
of (tuple
of hou.nodeEventType, callback)
hou.Node.addEventCallbackコールを持つこのノードによって登録されたすべてPythonコールバックのタプルを返します。
setCachedUserData(name, value)
このノードインスタンス上に名前付き値を追加/設定します。
setUserData
とは違い、このメソッドを使用した値セットは、HIPファイルと一緒に保存されません。
name
ユーザ定義データに対する固有名(キー)。 異なる名前を使用することで、複数のユーザ定義データをノードに追加することができます。
value
格納する値。setUserData
とは違い、この値はPythonオブジェクトを指定することができます。
この名前/値のペアは、HIPファイルと一緒に保存されません。 クック間で一時的な値を保存するPythonで実装されたノードは、その後のクックに対してそれらを再計算しないようにするのに役に立ちます。
以下のサンプルは、キャッシュされたユーザ定義データを設定、アクセス、削除する方法について説明しています:
>>> n = hou.node("/obj").createNode("geo") >>> n.setCachedUserData("my data", [1, 2, {"a": "b", "c": "d"}]) >>> n.cachedUserData("my data") [1, 2, {'a': 'b', 'c': 'd'}] >>> n.cachedUserDataDict() {'my data': [1, 2, {'a': 'b', 'c': 'd'}]} >>> n.destroyCachedUserData("my data") >>> n.cachedUserDataDict() {} >>> print n.cachedUserData("my data") None
詳細とサンプルは、ノード毎のユーザ定義データを参照してください。
cachedUserDataDict()
→ dict
of str
to any python object`
このノードに対してユーザ定義の名前/文字列のペアすべてを含んだ辞書を返します。
詳細は、hou.Node.setCachedUserDataを参照してください。
cachedUserData(name)
→ any python obect or None
この名前のユーザ定義のキャッシュデータを返します。この名前のデータが存在しなかった場合は、None
を返します。
詳細は、hou.Node.setCachedUserDataを参照してください。
このメソッドは、以下のように実装されています:
def cachedUserData(self, name): return self.cachedUserDataDict().get(name)
None
はキーに対して有効な値なので、キーが有効なのかチェックする最も信頼できる方法は、それがcachedUserDataDict
の結果の中にあるかどうかチェックすることです:
>>> n = hou.node("/obj").createNode("geo") >>> n.cachedUserDataDict() {} >>> print n.cachedUserData("foo") None >>> "foo" in n.cachedUserDataDict() False >>> n.setCachedUserData("foo", None) >>> n.cachedUserDataDict() {'foo': None} >>> print n.cachedUserData("foo") None >>> "foo" in n.cachedUserDataDict() True
destroyCachedUserData(name, must_exist=True)
この名前のユーザ定義のキャッシュデータを削除します。
詳細は、hou.Node.setCachedUserDataを参照してください。
この名前のユーザデータが存在しない且つmust_existがTrueの場合は、hou.OperationFailedを引き起こします。
clearCachedUserDataDict()
すべてのユーザ定義キャッシュデータを削除します。
詳細は、hou.Node.setCachedUserDataを参照してください。
dataBlockKeys(blocktype)
→ tuple
of str
blocktype
パラメータで指定したデータタイプのこのノードに格納されているすべてのデータブロックの名前を返します。
データブロックには特定のノードに取り付けるのに役立つ追加データを含めることができるという点ではユーザデータと同様です。 データブロックがユーザデータと異なる点は、データブロックは大規模なデータのブロックを効率的に制御できるように設計されています。 さらにデータブロックにはバイナリデータを格納することができ、各ブロックに関連のあるデータタイプを持たせることができます。
dataBlockType(key)
→ str
key
パラメータで指定したブロックのデータタイプを返します。
指定したキーがこのノードのデータブロックと関係がなかった場合は、hou.ValueErrorを引き起こします。
dataBlock(key)
→ str
for Python 2, bytes
for Python 3
指定したキーに格納されているデータブロックをバイナリ文字列として返します。 このメソッドは、指定したデータブロックがPythonオブジェクトで表現可能なタイプである場合にのみ動作します。 そうでない場合は、Noneが返されます。
返されるバイナリ文字列は、Python3ではbytes
オブジェクト、Python2ではstr
オブジェクトです。
詳細は、HOMバイナリデータを参照してください。
指定したキーがこのノードのデータブロックと関係がなかった場合は、hou.ValueErrorを引き起こします。
setDataBlock(key, block, block_type=None)
指定したキー名のノードに対して、指定したデータブロックを格納し、指定したデータタイプでそれをマークします。
blockに空っぽの文字列を渡すと、指定したキーを持ったデータブロックが削除されます。
removeDataBlock()
メソッドを使用してデータブロックを削除することもできます。
blocktype文字列引数は、C++/HDKプラグインがデータブロックを解釈してそのデータブロックをC++オブジェクトに変換するのに必要です。 Pythonを使用してデータブロックの取得や設定をしている場合、このblocktypeは空っぽのままにしてください。
removeDataBlock(key)
指定したキーを持った既存のデータブロックをノードから削除します。 このキーを持ったデータブロックがなければ、このメソッドは何もしません。
simulation()
→ hou.DopSimulation
このDOPネットワークノードによって定義されたシミュレーションを返します。これは、DOPネットワークでない場合には例外を引き起こします。
findNodesThatProcessedObject(dop_object)
→ tuple
of hou.DopNode
hou.DopObjectを指定すると、そのオブジェクトを処理したDOPノードのタプルが返されます。 これは、DOPネットワークでない場合には例外を引き起こします。
selectNextVisibleWorkItem()
ワークアイテムが選択されている場合、次の可視ワークアイテムを選択します。
selectPreviousVisibleWorkItem()
ワークアイテムが選択されている場合、前の可視ワークアイテムを選択します。
deselectWorkItem()
このノードが現在選択されているワークアイテムを含んだTOPネットワークの中に存在するか、または、そのTOPネットワークを含んでいる場合に、アクティブなワークアイテムの選択を解除します。
setCurrentTOPPage(page_index)
TOPノードがすべてのワークアイテムを表示できない場合に表示させるワークアイテムサブセット(ページ)を設定します。