Inheritance |
|
各オブジェクトには、その位置(または“移動”)、回転、スケールを包含した“トランスフォーメーション”(または“トランスフォーム”)があります。
サブネットオブジェクトに関しては、サブネットのトランスフォームは、そのサブネット内のオブジェクトに適用されます。
オブジェクトは、そのパラメータで定義されたトランスフォームとオブジェクトの“rest”や“zero”の位置(通常ではすべて0)を定義した通常では非表示になっているpretransformに加えて、
親オブジェクトのトランスフォームを追加で持つことができます。
オブジェクトのワールド空間での最終的な位置/回転/スケールは、(object's transform) * (pretransform) * (parent transform)
で定義されます。
Tip
hou.ObjNode.setWorldTransformメソッドによる親/プリトランスフォームの値に関係なく、オブジェクトの位置/回転/スケールを特定のワールド空間値に設定することができます。
Note
Houdiniはオブジェクトに対してシアー(傾斜)パラメータをサポートしていません。オブジェクトのパラメータをシアー(傾斜)を含んだトランスフォームに設定しようとすると、Houdiniは自動的にそのシアー(傾斜)を削除します。
メソッド ¶
トランスフォーム ¶
origin()
→ hou.Vector3
ワールド空間でのオブジェクトの原点位置を返します。
obj.origin()
は、obj.Vector3(0, 0, 0) * obj.worldTransform()
と等価です。
# obj1の原点からobj2の原点までのワールド空間ベクトルを計算するには、 # 以下のように記述することができます: obj2.origin() - obj1.origin() # 2つのオブジェクトの原点間のワールド空間での距離を計算するには、単に、このベクトルの長さを取得すればいいだけです: (obj2.origin() - obj1.origin()).length() # 回転やスケールがなければ、vtorigin() HScriptエクスプレッション関数は、 # obj2.origin() - obj1.origin()と同じ結果を返します。 # 回転やスケールがあれば、そうなりません。vtorigin()と同じPythonは以下のように定義します: def vtorigin(obj1, obj2): return (obj2.worldTransform() * obj1.worldTransform().inverted()).extractTranslates()
hou.ObjNode.worldTransformとhou.ObjNode.getTransformToNodeのメソッドも参照してください。
localTransform()
→ hou.Matrix4
このオブジェクトのジオメトリをその入力の空間に変換するマトリックスを返します。
ローカルトランスフォームマトリックスは、以下の累積したトランスフォームを含みます:
-
ノードのプリトランスフォーム
-
ノードのトランスフォームパラメータで定義されたトランスフォーム
-
ノードのLook AtとPathのパラメータによるトランスフォーム調整
ノードのプリトランスフォームと無関係のローカルトランスフォームマトリックスは、以下のコードで取得することができます:
def localTransformIgnorePreTransform(self): return (self.localTransform() * self.preTransform().inverted())
hou.ObjNode.localTransformAtTimeとhou.ObjNode.worldTransformも参照してください。
localTransformAtTime(time)
→ hou.Matrix4
指定した時間で、このオブジェクトのジオメトリをその入力の空間に変換するマトリックスを返します。
オブジェクトのローカルトランスフォームにアニメーションが付いていれば、このメソッドは、指定した時間でのトランスフォームを取得する方法を備えています。
詳細は、hou.ObjNode.localTransformを参照してください。
worldTransform()
→ hou.Matrix4
このオブジェクトのジオメトリをワールド空間に変換するマトリックスを返します。
ワールドトランスフォームマトリックスは、以下の累積したトランスフォームを含みます:
-
ノードのプリトランスフォーム
-
ノードのパラメータで定義されたトランスフォーム
-
親ノードまたは包含ネットワークのトランスフォーム
このメソッドは、以下のようにほぼ実装することができます:
def worldTransform(self): return (self.localTransform() * self.parentAndSubnetTransform())
hou.ObjNode.setWorldTransformとhou.ObjNode.worldTransformAtTimeも参照してください。
worldTransformAtTime(time)
→ hou.Matrix4
指定した時間で、このオブジェクトのジオメトリをワールド空間に変換するマトリックスを返します。
オブジェクトのワールドトランスフォームにアニメーションが付いていれば、このメソッドは、指定した時間でのトランスフォームを取得する方法を備えています。
詳細は、hou.ObjNode.worldTransformを参照してください。
setWorldTransform(matrix, fail_on_locked_parms=False)
目的のワールドトランスフォーメーションになるように、このオブジェクトのパラメータを調整します。
このメソッドは、このオブジェクトの移動、回転、スケールの値を調整して、最終的に目的のワールドトランスフォームにします。 これは、包含ネットワークのトランスフォーム、親のトランスフォーム、プリトランスフォームを考慮します。
fail_on_locked_parms
がTrue
で、オブジェクトの移動、回転、スケールのパラメータのどれかがロックされていれば、このメソッドはhou.OperationFailedを引き起こします。
False
でそれらのパラメータのどれかがロックされていれば、このメソッドは、それらの値を変更しますが、それらの値をロックしたままにします。
Suppose:
-
W
は目的の新しいワールドトランスフォーム, -
W'
は既存のワールドトランスフォーム, -
L
はノードのパラメータで定義された目的のトランスフォーム, -
L'
は既存のparmトランスフォーム, -
P
はオブジェクトのプリトランスフォーム, -
O
は包含サブネットのトランスフォームと組み合わせられた親トランスフォーム
そして、W = L * P * O
で、P = W * O^ * R^
です。そのため、このメソッドは以下のように実装されています:
def setWorldTransform(self): self.setParmTransform( matrix * self.parentAndSubnetTransform().inverted() * self.preTransform().inverted(), fail_on_locked_parms)
別の方法では、以下のようにW'とL'からLを導き出すことができます:
-
W' = L' * P * O
-
なので
P * O = L^' * W'
-
そして
(P * O)^ = W^' * L'
そして -
W = L * P * O
-
なので
L = W * (P * O)^
-
つまり
L = W * W'^ * L'
このようにして、このメソッドは、現行ワールドトランスフォームとparmトランスフォームを使用して以下のように実装することもできます:
def setWorldTransform(self): self.setParmTransform( matrix * self.worldTransform().inverted() * self.parmTransform(), fail_on_locked_parms)
注意してほしいのは、parmトランスフォームはシアー(傾斜)を含むことができないので、その結果のワールドトランスフォームは、目的のトランスフォームに一致しないことがあります。
r
をトランスフォームからシアーを削除する関数とすると、その新しいワールドトランスフォームは、実際にはL * P * O = r(W * O^ * P^) * P * O
になります。
hou.ObjNode.worldTransformとhou.ObjNode.setParmTransformも参照してください。
parmTransform()
→ hou.Matrix4
このノード上のパラメータで定義されたトランスフォームを返します。
このメソッドは、ほぼ以下のように実装されています:
def parmTransform(self): pivot_transform = hou.hmath.buildTransform({ "translate":self.evalParmTuple("p"), "rotate":self.evalParmTuple("pr")}, transform_order="srt", rotate_order="xyz") return ( pivot_transform.inverted() * hou.hmath.buildTransform({ "translate": self.evalParmTuple("t"), "rotate": self.evalParmTuple("r"), "scale": [self.evalParm("scale") * s for s in self.evalParmTuple("s")], "shear": (0.0, 0.0, 0.0)}, transform_order=self.parm("xOrd").evalAsString(), rotate_order=self.parm("rOrd").evalAsString()) * pivot_transform)
このトランスフォームとワールド空間トランスフォームとの関係は、クラスのドキュメントを参照してください。 hou.ObjNode.worldTransformも参照してください。
Note
Pythonオブジェクトに関しては、Pythonコードはparmトランスフォームも設定し、必ずしも可視パラメータを持つとは限りません。 オブジェクトのローカルトランスフォーム(つまり、親トランスフォームのないトランスフォーム)を取得するには、hou.ObjNode.localTransformを使用してください。
setParmTransform(matrix, fail_on_locked_parms=False)
このオブジェクトのパラメータで制御されるトランスフォームを設定します。
このメソッドは、このオブジェクトの移動、回転、スケールの値を調整して、目的のパラメータ、ローカル、トランスフォームにします。 これは、既存のピボット位置、トランスフォーム順、回転順を考慮し、それらをそのままにします。 さらに、最小限の回転を生成する回転値を設定するために既存の向きも考慮されます。
現在のところ、オブジェクトはシアー(傾斜)パラメータを持たないので、マトリックス内のシアー(傾斜)は破棄されます。
fail_on_locked_parms
がTrue
で、オブジェクトの移動、回転、スケールのどれかがロックされていれば、このメソッドはhou.OperationFailedを引き起こします。
False
で、それらのパラメータのどれかがロックされていれば、このメソッドがそれらの値を変更しますが、それらの値をロックしたままにします。
hou.ObjNode.parmTransformとhou.ObjNode.setWorldTransformも参照してください。
このメソッドは、ほぼ以下のように実装することができ、ロックされたパラメータを無視します:
def setParmTransform(self, matrix): parm_values = matrix.explode( transform_order=self.parm('xOrd').evalAsString(), rotate_order=self.parm('rOrd').evalAsString(), pivot=hou.Vector3(self.evalParmTuple('p'))) for parm_name, key in ('t', 'translate'), ('r', 'rotate'), ('s', 'scale'): self.parmTuple(parm_name).set(parm_values[key])
hou.Matrix4.explodeも参照してください。
parmPivotTransform()
→ hou.Matrix4
このノードのパラメータで定義されているピボットトランスフォームを返します。
このメソッドは、ほぼ以下のように実装することができます:
def parmPivotTransform(self): pivot_transform = hou.hmath.buildTranslate(self.evalParmTuple("p")) return ( hou.hmath.buildTransform({ "translate": self.evalParmTuple("p"), "rotate": self.evalParmTuple("pr")}, transform_order="srt", rotate_order="xyz")
hou.ObjNode.parmTransformも参照してください。
setParmPivotTransform(matrix, fail_on_locked_parms=False)
このオブジェクトのパラメータで制御されるピボットトランスフォームを設定します。
このメソッドは、このオブジェクトのピボット位置とピボット回転を調整して、目的のトランスフォームを設定します。 これは、このオブジェクトのワールドトランスフォームで引き起こされる変更を補正しません。
fail_on_locked_parms
がTrue
で、このオブジェクトのピボット位置またはピボット回転のパラメータがロックされていれば、
このメソッドはhou.OperationFailedを引き起こします。
fail_on_locked_parms
がFalse
で、それらのパラメータがロックされていれば、このメソッドは値を変更するものの、それらの値はロックされたままになります。
hou.ObjNode.parmPivotTransformとhou.ObjNode.setParmTransformも参照してください。
このメソッドは、ほぼ以下のように実装することができ、ロックされたパラメータは無視されます:
def setParmPivotTransform(self, matrix): parm_values = matrix.explode( transform_order=self.parm('xOrd').evalAsString(), rotate_order=self.parm('rOrd').evalAsString(), pivot=hou.Vector3()) for parm_name, key in ('p', 'translate'), ('pr', 'rotate'): self.parmTuple(parm_name).set(parm_values[key])
hou.Matrix4.explodeも参照してください。
parentAndSubnetTransform()
→ hou.Matrix4
包含サブネットオブジェクトのワールド空間トランスフォーム(あれば)と組み合わせられた、入力ノードのワールド空間トランスフォーム(接続されている入力があれば)を返します。 詳細は、クラスのドキュメントを参照してください。
このメソッドは、ほぼ以下のように実装されています:
def parentAndSubnetTransform(self): if len(self.inputConnectors()[0]) != 0: return self.inputs()[0].worldTransform() containing_subnet = self.parent() if containing_subnet.type().category() == hou.objNodeTypeCategory(): return containing_subnet.worldTransform() return hou.hmath.identityMatrix()
Pre-transform ¶
preTransform()
→ hou.Matrix4
このオブジェクトのプリトランスフォームを返します。
プリトランスフォームは、入力と包含オブジェクトのトランスフォームの前、そして、パラメータトランスフォームの後にトランスフォームを適用することができます。 詳細は、クラスのドキュメントを参照してください。
パラメータトランスフォームと違い、プリトランスフォームは、ノード上のどのパラメータを使用しても保存されません。 代わりに、Houdiniは、そのプリトランスフォームをマトリックスとして保存します。 直接的にマトリックスになっているので、プリトランスフォームにシアー(傾斜)を含めることができます。
setPreTransform(matrix)
このオブジェクトのプリトランスフォームを設定します。詳細は、hou.ObjNode.preTransformを参照してください。
moveParmRotateIntoPreTransform()
このオブジェクトの回転値を0に設定し、オブジェクトのワールドトランスフォームが変わらないようにプリトランスフォームを調整します。
仮定:
-
W
がワールドトランスフォーム, -
L
が回転成分のないパラメータトランスフォーム, -
L'
が既存のparmトランスフォーム, -
P
が目的の新しいプリトランスフォーム, -
P'
が現在のプリトランスフォーム, -
O
が包含サブネットのトランスフォームと組み合わせられた親トランスフォーム
そして
-
W = L * P * O
とW = L' * P' * O
-
L * P = L' * P'
-
P = L^ * L' * P'
なので、このメソッドは以下のように実装されています:
def moveParmRotateIntoPreTransform(self): old_parm_transform = self.parmTransform() self.parmTuple("r").set((0.0, 0.0, 0.0)) self.setPreTransform( self.parmTransform() * old_parm_transform * self.preTransform())
hou.ObjNode.preTransformとクラスのドキュメントも参照してください。
moveParmScaleIntoPreTransform()
このオブジェクトのスケール値を1に設定し、ワールドトランスフォームが変わらないようにプリトランスフォームを調整します。
詳細は、hou.ObjNode.moveParmRotateIntoPreTransformを参照してください。
moveParmTranslateIntoPreTransform()
このオブジェクトの移動値を0に設定し、ワールドトランスフォームが変わらないようにプリトランスフォームを調整します。
詳細は、hou.ObjNode.moveParmRotateIntoPreTransformを参照してください。
moveParmTransformIntoPreTransform()
このオブジェクトのparmトランスフォームを単位行列に設定し、ワールドトランスフォームが変わらないようにプリトランスフォームを調整します。
このメソッドは、ほぼ以下のように実装されています:
def moveParmTransformIntoPreTransform(self): self.setPreTransform(self.parmTransform() * self.preTransform()) self.setParmTransform(hou.hmath.identityTransform())
hou.ObjNode.moveParmRotateIntoPreTransform, hou.ObjNode.moveParmScaleIntoPreTransform, hou.ObjNode.moveParmTranslateIntoPreTransformも参照してください。 hou.ObjNode.movePreTransformIntoParmTransformも参照してください。
movePreTransformIntoParmTransform()
このオブジェクトのプリトランスフォームを単位行列に設定し、ワールドトランスフォームが変わらないようにparmトランスフォームを調整します。
このメソッドは、ほぼ以下のように実装されています:
def movePreTransformIntoParmTransform(self): self.setParmTransform(self.parmTransform() * self.preTransform()) self.setPreTransform(hou.hmath.identityTransform())
他のノードを基準としたトランスフォーム ¶
getTransformToNode(obj_node)
→ hou.Matrix4
このノードが他のノードと整列するようにトランスフォームするマトリックスを返します。
以下の不変条件はTrueです: node1.worldTransform() *
node1.getTransformToNode(node2) == node2.worldTransform()
.
このメソッドは以下のように実装されています:
def getTransformToNode(self, obj_node): self.worldTransform().inverted() * obj_node.worldTransform()
node1(ObjNodeオブジェクト)とnode2(他のObjNodeオブジェクト)を整列するには、getTransformToNode()
を使用する必要はありません。
単に以下のように記述すればいいだけです:
node1.setWorldTransform(node2.worldTransform())
hou.ObjNode.origin(), hou.ObjNode.worldTransform(), hou.ObjNode.setWorldTransform()も参照してください。
getTransformFromPointToPoint(pos3, other_node, other_pos3)
→ hou.Matrix4
ポイントpos3 (このオブジェクトノードのトランスフォーム空間)をポイントother_pos3 (他のオブジェクトノードのトランスフォーム空間)に 回転させるトランスフォームマトリックスを返します。
obj1.getTransformFromPointToPoint(pos1, obj2, pos2)
これは以下と等価です…
(obj1.worldTransform().inverted() * hou.hmath.buildTranslate(-pos1) * hou.hmath.buildTranslate(pos2) * obj2.worldTransform())
hou.ObjNode.getTransformToNodeとhou.ObjNode.worldTransformのメソッド、hou.hmathモジュール内の関数も参照してください。
buildLookatRotation(to_node, up_vector=None)
→ hou.Matrix4
このオブジェクトが指定したオブジェクトに向くように回転させるマトリックスを返します。
返されたhou.Matrix4オブジェクトは、ワールド空間の現行位置からマイナスZ軸がto_node
オブジェクトの原点に向くように、このオブジェクトをトランスフォームします。
up_vector
には、hou.Vector3オブジェクトまたはNoneのどちらかを指定することができます。
Noneの場合は、このメソッドは、hou.Vector3(0, 1, 0)のUpベクトルを使用します。
hou.Matrix4.extractRotatesを使えば、戻り値から回転値を抽出することができます。 hou.ObjNode.setWorldTransformを使えば、オブジェクトのトランスフォームを設定することができます。
# cam1オブジェクトがgeo1に向くようにそのオブジェクトのトランスフォームを設定します。 cam1 = hou.node("/obj/cam1") lookat_obj = hou.node("/obj/geo1") cam1.setWorldTransform(cam1.buildLookatRotation(lookat_obj))
hou.ObjNode.setWorldTransformも参照してください。
ジオメトリ ¶
combine(nodes)
指定したリストのhou.ObjNodeジオメトリからこのオブジェクトに結合します。 この操作の後は、古いオブジェクトが削除されます。
Houdini内にどのノードも存在しなければ、hou.ObjectWasDeletedを引き起こします。
どのノードもhou.ObjNodeのタイプでなければ、TypeError
を引き起こします。
これらの例外は、部分的な結果を回避するために、その結合処理を実行する前に引き起こされます。
displayNode()
→ hou.OpNode or None
このオブジェクトにSOPやDOPが含まれていれば、ディスプレイフラグがオンのノードが返されます。 そうでなければ、Noneを返します。
renderNode()
→ hou.OpNode or None
このオブジェクトにSOPやDOPが含まれていれば、レンダーフラグがオンのノードが返されます。 そうでなければ、Noneを返します。
フラグ ¶
isObjectDisplayed()
→ bool
このオブジェクトを表示されているかどうか返します。このメソッドは、ディスプレイフラグとdisplay
パラメータの両方を考慮します。
display
パラメータが有効であれば、tdisplay
パラメータが設定されるので、このパラメータはフラグを上書きします。
hou.ObjNode.isDisplayFlagSetも参照してください。これは現在のフラグの状態を返します。
isObjectDisplayedAtFrame(frame)
→ bool
指定したフレームでこのオブジェクトが表示されているかどうか返します。このメソッドは、ディスプレイフラグとdisplay
パラメータの両方を考慮します。
display
パラメータが有効であれば、tdisplay
パラメータが設定されるので、このパラメータはフラグを上書きします。
hou.ObjNode.isDisplayFlagSetも参照してください。これは現在のフラグの状態を返します。
isDisplayFlagSet()
→ bool
このオブジェクトのディスプレイフラグがオンになっているかどうか返します。
ディスプレイフラグとdisplay
パラメータの両方が、オブジェクトを実際に表示させるかどうか決めます。
オブジェクトが実際に表示されているかどうか判断するには、hou.ObjNode.isObjectDisplayedを使用します。
setDisplayFlag(on)
オブジェクトのディスプレイフラグをオン/オフします。 hou.ObjNode.isDisplayFlagSetも参照してください。
isSelectableInViewport()
→ bool
選択可能フラグが設定されているかどうか返します。 これが設定されていない時、このオブジェクトやそのジオメトリをビューポート内でインタラクティブに選択することができません。
setSelectableInViewport(on)
オブジェクトの選択可能フラグを設定します。 詳細は、hou.ObjNode.isSelectableInViewportを参照してください。
isShowingOrigin()
→ bool
このオブジェクトは、ビューポートでそのローカル原点の座標が表示されているかどうか返します。
ノードを右クリックすることで、この設定を変更することができます。
showOrigin(on)
このオブジェクトのローカル原点座標をビューポートに表示したり非表示にします。 hou.ObjNode.isShowingOriginも参照してください。
isUsingXray()
→ bool
このオブジェクトがX-Rayモードでジオメトリを表示しているかどうか返します。 HoudiniはX-Ray表示されたジオメトリをワイヤーフレームで表示し、他のサーフェスに隠れても可視にすることができます。
ノードを右クリックすることで、この設定を変更することができます。
useXray(on)
このオブジェクトのX-Rayモードをオン/オフします。 hou.ObjNode.isUsingXrayも参照してください。
シェーディング ¶
material(operation, parameter)
マテリアルパラメータのオブジェクトローカル上書きを管理します。これは、基本的には、オブジェクトのパラメータエディタの Material Override メニューと同じスクリプトです。 オブジェクト上にパラメータを作成して、オブジェクトのマテリアルにそれと同じ値を上書きすることができます。
operation
引数は、以下の文字列のどれかです:
"override"
オブジェクトにパラメータを作成して、 すべての マテリアルパラメータを上書きします。
"select"
オブジェクトパラメータを選択作成して、マテリアルパラメータを上書きします。
"remove"
すべての オブジェクトパラメータの上書きを削除します。
"rmdefault"
変更されていないオブジェクトパラメータ(つまり、現在デフォルト値に設定されているパラメータ)を削除します。
"sync"
オブジェクトパラメータの上書きを、マテリアル上のパラメータ定義と同期します。
"revert"
オブジェクト上のパラメータ上書きをマテリアル上の値に戻します。
"addlist"
(パラメータ名文字列のリストを含んだ2番目の引数の後。) オブジェクトパラメータを作成して、マテリアル上の名前付きパラメータを上書きします。
myobject = hou.node("/obj/obj1") # すべてのマテリアル上書きを追加します myobject.material("override") # すべてのマテリアル上書きを削除します myobject.material("remove") # "baseColor"と"roughness"のパラメータに対して特定の上書きを追加します myobject.material("addlist", ["baseColor", "roughness"])
Pythonオブジェクト ¶
setCookTransform(matrix)
クックしているPythonオブジェクトのパラメータトランスフォームを設定します。 クックの結果を設定するには、Pythonで実装されたオブジェクトからこのメソッドをコールします。
Pythonで実装されたオブジェクトは、パラメータトランスフォーム(つまり、hou.ObjNode.parmTransformの結果)を制御します。 ワールドトランスフォーム(つまり、hou.ObjNode.worldTransformの結果)は、さらに親ノードのトランスフォーム、プリトランスフォームなどから影響を受けます。
このメソッドは、Pythonで実装されていないオブジェクトに対してコールしたり、そのオブジェクトのPythonクックコード外からコールすると、hou.OperationFailedを引き起こします。
Transforms from Diskのサンプルを参照してください。
アニメーション ¶
saveParmClip(file_name, start=None, end=None, sample_rate=0, scoped_only=False)
このノードのパラメータに関連のあるアニメーションを、file_nameで指定したClipファイルに保存します。
このノードの拘束パラメータが無効であれば、このメソッドはhou.OpNode.saveParmClipスーパークラスメソッドと同じように動作します。
このノードの拘束パラメータが有効であれば、スーパークラスメソッドの動作に加えて、このメソッドは、すべてのトランスフォームパラメータ (Translate X, Y, Z, Rotate X, Y, Z, Scale X, Y, Z)の値を計算し、保存されるClipファイルにそれらの値を格納します。 これによって、保存したClipファイルを他のノードに読み込んで、他のノードで拘束パラメータをセットアップすることなく同じアニメーションを維持することができます。
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.ObjNode.saveParmClipと同様ですが、アニメーションをClipファイルに保存するのではなくて、Clipデータ(ファイルの内容)を返します。
start, end, sample_rate, scoped_onlyは、hou.ObjNode.saveParmClipと同じ挙動です。
binaryがTrue
の場合はバイナリClipデータを返し、False
の場合はプレーンテキスト(ASCII)Clipデータを返します。
use_blosc_compressionがTrue
の場合、指定するデータはBlosc圧縮バイナリデータです。
これはプレーンテキスト(ASCII)Clipデータには使用することができません。
返されるクリップデータは、Python3だとbytes
オブジェクト、Python2だとstr
オブジェクトです。
詳細は、HOMバイナリデータを参照してください。
binary = False
且つuse_blosc_compression = True
の場合はhou.InvalidInput例外を引き起こします。
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
If this node is not an HDA and not inside an HDA, this method returns True.
If this node is an HDA node, returns True if the node is unlocked,
False if it is locked (this is equivalent to
not node.matchesCurrentDefinition()
).
If this node is inside a locked HDA node, this method returns True if this node is or is inside an editable subnet within the locked HDA. Otherwise it returns False.
This method reflects the ability of certain types of modifications to be
made to the children of this node. These modifications, such as wiring
nodes together, or setting flags are edits to the child nodes which also
affect the behavior of the parent or surrounding nodes. For example, to
determine if a node can have its display flag turned on, you would test
node.parent().isEditable()
. For modifications to a node that are purely
internal to the node itself, such as modifying a parameter value, you
should test if 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
Recursively return all sub items (nodes, network boxes, sticky notes, etc.)
in this node. For example, hou.node("/").allSubItems()
will return all
the node network items in the hip file.
Refer to hou.Node.allSubChildren for more information on the method parameters.
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)
Creates a node for visualizing the data from a particular output of this
node. If a visualizer node already exists in the current network, it is
moved and connected to the specified output_index
. This method is only
implemented for SOP and VOP nodes. Other node types do nothing when
this method is called.
copyTo(destination_node)
→ hou.Node
Copy this node to a new place in the node hierarchy. The new node is placed inside the given destination node. This method returns the new node.
Raises hou.OperationFailed if the destination node cannot contain the new node. Raises hou.PermissionError if the destination node is inside a locked asset.
parm(parm_path)
→ hou.Parm or None
Return the parameter at the given path, or None
if the parameter
doesn’t exist.
globParms(pattern, ignore_case=False, search_label=False, single_pattern=False)
→ tuple of hou.Parm
Return a tuple of parameters matching the pattern.
The pattern may contain multiple pieces, separated by spaces. An asterisk
(*
) in a pattern piece will match any character. By default, Houdini
will add the parameters from each pattern piece to those already matched.
However, if the pattern piece begins with a caret (^
), Houdini will
remove the matches for that piece from the result.
By default the pattern match is case-sensitive. Set ignore_case
to
True for case-insensitive pattern matching. Note that case insensitivity
only applies when matching node and parameter names. It does not apply
when matching group, network box or bundle names.
By default, only parameters with names matching the pattern are returned. Set search_label
to True to also return parameters with labels matching the pattern.
If single_pattern
is True, the pattern will be treated as one pattern even if there are spaces in the pattern.
This method returns an empty tuple if you pass in an empty pattern.
evalParm(parm_path)
→ int
, float
, or str
Evaluates the specified parameter and returns the result.
parms()
→ tuple
of hou.Parm
Return a list of the parameters on this node.
parmsReferencingThis()
→ tuple
of hou.Parm
Return a list of the parameters that reference this node.
allParms()
→ generator of hou.Parm
Recursively return a sequence of all the parameters on all of the nodes contained in this node including this node.
This method is a generator and does not return a tuple.
Here is an example of printing out the parameter paths for all nodes under /obj:
root_node = hou.node("/obj") for parm in root_node.allParms(): print parm.path()
setParms(parm_dict)
Given a dictionary mapping parm names to values, set each of the corresponding parms on this node to the given value in the dictionary.
The following example sets the tx
and sy
parameters at once:
>>> node = hou.node("/obj").createNode("geo") >>> node.setParms({"tx": 1, "sy": 3})
The names are tried against both parameters and parmameter tuples, so the base name can also be used:
>>> node = hou.node("/obj").createNode("geo") >>> node.setParms({"t": (1, 2, 3), "s": (3, 3, 3)})
Raises hou.OperationFailed if any of the parameter names are not valid.
See also the setParmExpressions method.
setParmsPending(parm_dict)
Given a dictionary mapping parm names to values, sets the pending value of each of the corresponding parms on this node. Supports both parameters and parameter tuples.
Raises hou.OperationFailed if any of the parameter names are not valid.
See also the setPending method.
setParmExpressions(parm_dict, language=None, replace_expressions=True)
Given a dictionary mapping parm names to expression strings, set each of the corresponding parms on this node to the given expression string in the dictionary.
See hou.Parm.setExpression for a description of the language
and
replace_expressions
parms.
The following example expressions set the tx
and sy
parameters at once:
>>> node = hou.node("/obj").createNode("geo") >>> node.setParmExpressions({"tx": 'ch("ty")', "sy": "sin($F)"})
Raises hou.OperationFailed if any of the parameter names are not valid.
See also the setParms method.
parmTuple(parm_path)
→ hou.ParmTuple or None
Return the parm tuple at the given path, or None
if it doesn’t exist.
This method is similar to parm()
, except it returns a
hou.ParmTuple instead of a hou.Parm.
evalParmTuple(parm_path)
→ tuple
of int
, float
, or str
Evaluates the specified parameter tuple and returns the result.
parmTuples()
→ tuple
of hou.ParmTuple
Return a list of all parameter tuples on this node.
This method is similar to parms()
, except it returns a list of
hou.ParmTuple instead of hou.Parm.
parmsInFolder(folder_names)
→ tuple
of hou.Parm
Return a list of parameters in a folder on this node. Returns all parameters in the folder and its subfolders (if any).
folder_names
A sequence of folder name strings. For example, to get a list of the
parameters in the Shading folder of the Render folder, use
("Render", "Shading")
. Note that by folder name, we mean the label
used in the parameter dialog, not the internal parameter name.
If this sequence is empty, the method returns all parameters on the
node, the same as if you called parms()
.
Raises hou.OperationFailed if the folder specified by folder_names
does not exist.
For example, suppose a node had a Render folder that contained a Shading subfolder. Then this line of code would return the parameters in the Render folder:
# Note the trailing comma after "Render" to tell Python that "Render" is # contained in a tuple/sequence as opposed to just a single string with # parentheses around it. >>> node.parmsInFolder(("Render", ))
And this line of code would return the parameters in the Shading subfolder.
>>> node.parmsInFolder(("Render", "Shading"))
See also hou.Parm.containingFolders and hou.Parm.containingFolderSetParmTuples
Note that this method does not work for multi-parameters, which behave similar to folder parameters. To get a list of parameters in a multi-parameter, call hou.Parm.multiParmInstances.
parmTuplesInFolder(folder_names)
→ tuple of hou.ParmTuple
Return a list of the parameter tuples in a folder on this node.
This method is similar to parmsInFolder()
, except it returns a list of
hou.ParmTuple instead of hou.Parm. See parmsInFolder()
above for information about the arguments.
See also hou.Parm.containingFolders and hou.Parm.containingFolderSetParmTuples
expressionLanguage()
→ hou.exprLanguage enum value
Return the node’s default expression language.
When you enter an expression in a parameter that does not already contain an expression, the node’s expression language is used to determine how that expression should be evaluated. You can change a node’s expression language in the parameter dialog in the GUI.
Changing the node’s expression language will not change the language in parameters already containing expressions (i.e. parameters with keyframes).
Note that if a parameter already contains an expression and you change that
expression in the GUI, the expression language will not change, regardless
of the value of the node’s expression language. To change the language of an
existing expression in a parameter from Python, use
hou.Parm.setExpression, as in
parm.setExpression(parm.expression(), language)
.
setExpressionLanguage(language)
Set the node’s default expression language.
See expressionLanguage()
for more information.
parmAliases(recurse=False)
→ dict of hou.Parm to str
Return a dictionary of parameter aliases on the node’s parameters. The keys in the dictionary are the parameters that have aliases and the values are the alias names.
recurse
Return the parameter aliases for this node and its children.
clearParmAliases()
Removes all alias names from parameters on the node.
spareParms()
→ tuple of hou.Parm
Return a list of the spare (user-defined) parameters on this node.
removeSpareParms()
Removes all spare parameters from this node.
parmTemplateGroup()
→ hou.ParmTemplateGroup
Return the group of parm templates corresponding to the current parameter layout for this node.
You can edit the parameter layout for this node (add or remove spare parameters, reorder or hide built-in parameters, etc.) by getting the current parameter group, modifying it, and calling hou.Node.setParmTemplateGroup with it.
The following example creates a geometry object, adds a My Parms
folder
to it, and adds a My Parm
float parameter to it in that folder. The
parameters are added only to the geometry object created; other geometry
objects are unaffected.
>>> 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)
See hou.ParmTemplateGroup and the setParmTemplateGroup method for more information and examples.
setParmTemplateGroup(parm_template_group, rename_conflicting_parms=False)
Change the spare parameters for this node.
parm_template_group
A hou.ParmTemplateGroup object containing the new parameter layout.
rename_conflicting_parms
If True
, parameters in the group with the same parm tuple names will
be automatically renamed. If False
and there are parms with the same
name, this method raises hou.OperationFailed.
Note that each node type has a set of parameters which must exist and must be of certain types. If your parm template group does not contain the required parameters for the node type the will be added at the bottom and will be made invisible. Similarly, if your parm template group attempts to modify the type, range, label, or other property of a required parameter, all changes to that parameter other than visibility settings will be ignored.
This method is preferred over the other parameter-related methods in this class (addSpareParmTuple, removeSpareParmTuple, replaceSpareParmTuple, addSpareParmFolder, removeSpareParmFolder) because it lets you more easily make manipulate parameters.
See hou.HDADefinition.setParmTemplateGroup to change the parameter interface of a digital asset.
addSpareParmTuple(parm_template, in_folder=(), create_missing_folders=False)
→ hou.ParmTuple
Add a spare parameter tuple to the end of the parameters on the node. If
in_folder
is not an empty sequence, this method adds the parameters to
the end of the parameters in a particular folder.
parm_template
A hou.ParmTemplate subclass instance that specifies the type of parameter tuple, the default value, range, etc.
in_folder
A sequence of folder names specifying which folder will hold the
parameter. If this parameter is an empty sequence (e.g. ()
), Houdini
will not put the parameter inside a folder. If it is, for example,
("Misc", "Controls")
, Houdini puts it inside the “Controls” folder
that’s inside the “Misc” folder. If it is, for example, ("Misc",)
,
Houdini puts it inside the “Misc” folder.
create_missing_folders
If True, and the folder location specified by in_folder
does not
exist, this method creates the missing containing folders.
Note that this method can add a single folder by passing a
hou.FolderParmTemplate for parm_template
.
See also the removeSpareParmTuple()
and addSpareParmFolder()
methods.
This method is deprecated in favor of setParmTemplateGroup
.
removeSpareParmTuple(parm_tuple)
Removes the specified spare parameter tuple.
See also addSpareParmTuple()
.
This method is deprecated in favor of setParmTemplateGroup
.
addControlParmFolder(folder_name=None, parm_name=None)
Adds a control parameter folder as the front-most folder at the top-level.
This is used to increase visibility of customized control parameters. If a
folder of the same name already exists, no new folder will be created.
If folder_name
is None, it will be set as 'Controls'. If parm_name
is None,
it will be set as 'folder'.
If there are no current folders present, the existing parameters will be grouped together and stored into a new folder named 'Parameters' and placed after the new control parameter folder.
addSpareParmFolder(folder_name, in_folder=(), parm_name=None, create_missing_folders=False)
Adds a folder to the spare parameters.
Note that all the folders in a set correspond to one parameter. If this
is the first folder to go in the set, parm_name
will be used as the
parameter name. Otherwise, parm_name
will be ignored and the parameter
name of the first folder in the set is used.
If this is the first folder in the set and parm_name
is None, it will
default to 'sparefolder0'. If parm_name
is already in use, a unique name
will be automatically generated.
If create_missing_folders
is True, this method will create the folders in
in_folder that don’t exist. So, this method can be used to add spare folders
and a spare parameter at the same time.
Note that you can add folders by passing a hou.FolderParmTemplate
to the addSpareParmTuple
method, so this method is deprecated. Note
also that addSpareParmTuple
is deprecated in favor of
setParmTemplateGroup
.
See also the removeSpareParmFolder
and addSpareParmTuple
methods.
This method is deprecated in favor of setParmTemplateGroup
.
removeSpareParmFolder(folder)
Removes an empty folder from the spare parameters.
folder
is a sequence of folder names. So, to remove
the Output folder, use ("Output",)
instead of "Output"
.
See also addSpareParmFolder()
, hou.ParmTemplateGroup.remove, and
hou.ParmTemplateGroup.findFolder.
replaceSpareParmTuple(parm_tuple_name, parm_template)
Replace an existing spare parameter tuple with a new one. The old parameter tuple is removed and the new one is added in its place.
parm_tuple_name
The name of the spare parameter tuple to replace. Raises hou.OperationFailed if no parameter tuple exists with this name, or if it is the name of a non-spare parameter.
parm_template
A hou.ParmTemplate describing the new parameter tuple.
The new parameter tuple may or may not have the same name as the old one. By providing a parameter tuple with the same name, you can modify an existing spare parameter tuple.
Note that you cannot replace non-spare parameter tuples. However, you can change the visibility of non-spare parameters using hou.ParmTuple.hide.
To change a parameter for all instances of digital asset, use hou.HDADefinition.replaceParmTuple.
This method is deprecated in favor of setParmTemplateGroup
.
localVariables()
Return a list of local variables that can be referenced in parameter
expressions on this node using the $
prefix.
localAttributes()
Return a list of local variables that can be referenced in parameter
expressions on this node using the @
prefix. This includes local
variables defined in this node as attributes and any context options
that were available to this node the last time it was cooked.
loadParmClip(file_name, sample_rate=0, start=None)
Load animation for the parameters in this node from the clip file specified by file_name. See hou.Node.saveParmClip for the list of supported clip file formats.
Any tracks in the clip file that do not match the name of the parameters of this node will be ignored.
If sample_rate is set to a non-zero, non-negative value, the specified value will be used when loading the animation. For example, if the current frame rate is 24 (hou.fps()) and sample_rate is set to 12, the animation will be loaded with a keyframe at every second frame since sample_rate is half of the current frame rate.
start specifies the frame the loaded animation should start from. By default the animation starts at the frame specified in the clip file.
Warning
Any existing keyframes for the parameters of this node that are within the range of the loaded animation will be overwritten with the loaded data.
This function will raise a hou.OperationFailed exception if there is an error reading animation data from the file.
setParmClipData(data, binary=True, blosc_compressed=True, sample_rate=0, start=1)
Load animation for the parameters in this node from the given clip data. This method is similar to hou.Node.loadParmClip, except that it loads animation from the given clip data instead of a clip file.
The clip data must be a bytes
object in Python 3 and a str
object
in Python 2. See HOM binary data for more
information.
sample_rate and start behave the same as in hou.Node.loadParmClip.
binary and blosc_compressed specify the type of input data.
If binary is True
, the given data is binary clip data
otherwise it is plain text (ASCII) clip data.
If blosc_compressed is True
, the given data is blosc compressed
binary data. This cannot be used for plain text (ASCII) clip data.
Raises a hou.OperationFailed exception if the given data is invalid.
Raises a hou.InvalidInput exception if binary = False
and
blosc_compressed = True
.
references(include_children = True)
→ tuple
of hou.Node
Return a tuple of nodes that are referenced by this node, either through parameter expressions, referring to the node by name, or using expressions which rely on the data generated by another node. These reflect all the other ways (besides connecting to an input) in which one node may affect another.
Note that the result can differ depending last cook of the nodes. It’s recommended that you first call cook() on the node first.
dependents(include_children = True)
→ tuple
of hou.Node
Return a tuple of nodes that are reference this node, either through parameter expressions, referring to the node by name, or using expressions which rely on the data generated by this node. These reflect all the other ways (besides connecting to an input) in which one node may affect another.
Note that the result can differ depending last cook of the nodes.
fileReferences(recurse = True, project_dir_variable = "HIP", include_all_refs = True)
→ tuple
of hou.Parm and str
tuples
Returns a sequence of tuples representing references to external files (such as textures, geometry files, and asset libraries) from this node. Applies to all sub children of this node if recurse is set to true.
recurse
Recursively apply to the entire operator hierarchy.
project_dir_variable
You can specify the name of an environment variable. If an asset path starts with the variable, it will be replaced with a variable reference in the path string returned by this function.
include_all_refs
If this is True, then the function will return all the file references. If this is False, then the function will return only the selected file references.
See also 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
Create a digital asset from this node. You would typically call this method on subnet nodes.
name
The name of the node type that the new digital asset will define.
hda_file_name
The name of the hda file where Houdini will save the digital asset.
If None
Houdini will use $HOME/houdiniX.Y/hda/OPcustom.hda
.
description
The name that will appear in the tab menu. If None, Houdini will use the name for the description.
min_num_inputs
The minimum number of inputs that need to be wired into instances of the digital asset. See hou.HDADefinition.minNumInputs for more information.
max_num_inputs
The number of input connectors available on instances of the digital asset for input connections. See hou.HDADefinition.minNumInputs for more information.
compress_contents
Whether or not the contents of this digital asset are compressed inside the hda file. See hou.HDAOptions.compressContents for more information.
comment
A user-defined comment string. See hou.HDADefinition.comment for more information.
version
A user-defined version string. See hou.HDADefinition.version for more information.
save_as_embedded
Whether or not the digital asset’s definition will be saved with the
hip file instead of an hda file. When this parameter is True, Houdini
ignores the hda_file_name
parameter. Setting this parameter to True
is equivalent to setting this parameter to False and setting the
hda_file_name
parameter to “Embedded”.
ignore_external_references
If True, Houdini will not generate warnings if the contents of this digital asset reference nodes outside the asset.
change_node_type
Normally, Houdini will change the node creating the digital asset into the new digital asset type. Setting this flag to false will cause the node to remain unchanged.
create_backup
Create a backup before modifying an existing hda file.
install_path
Where to install the new hda. When not specified, it will install to either “Current HIP File” or “Scanned Asset Library Directories”.
createCompiledDigitalAsset(name=None, hda_file_name=None, description=None)
Create a compiled digital asset from this node. You would typically call this method on VOP network nodes, such as Material Shader Builder SHOP, Surface Shader Builder SHOP, or VEX Surface SHOP Type VOPNET. The digital asset does not have contents section, which means it does not have VOP network inside, but instead relies on the saved VEX code sections to provide the shader code.
After the creation of a compiled HDA, if its VEX code section is ever changed manually, the corresponding vex object code section can be recompiled using hou.HDADefinition.compileCodeSection.
name
The name of the node type that the new digital asset will define.
hda_file_name
The name of the hda file where Houdini will save the digital asset.
If None
Houdini will use $HOME/houdiniX.Y/hda/OPcustom.hda
.
description
The name that will appear in the tab menu. If None, Houdini will use the name for the description.
changeNodeType(new_node_type, keep_name=True, keep_parms=True, keep_network_contents=True, force_change_on_node_type_match=False)
→ hou.Node
Changes the node to a new type (within the same context). new_node_type
is the internal string name of the type you want to change to.
Keep_name
, keep_parms
, and keep_network_contents
indicate that the
node should keep the same name, parameter values, and contents,
respectively, after its type has changed. force_change_on_node_type_match
indicates whether to perform the change even when is already of the
specified type.
allowEditingOfContents(propagate=False)
Unlocks a digital asset so its contents can be edited.
To use this function, you must have permission to modify the HDA.
matchCurrentDefinition()
If this node is an unlocked digital asset, change its contents to match what is stored in the definition and lock it. The parameter values are unchanged.
If this node is locked or is not a digital asset, this method has no effect.
See also hou.Node.matchesCurrentDefinition and hou.Node.isLocked.
matchesCurrentDefinition()
→ bool
Return whether the contents of the node are locked to its type definition.
syncDelayedDefinition()
If this node is a digital assets whose contents are currently in a delay-sync condition, the contents will be synced. If it is already synced or not a syncable asset, no effect occurs.
isDelayedDefinition()
→ bool
If this node is a digital assets whose contents are currently in a delay-sync condition, returns true. Otherwise returns false, which will include nodes that are not syncable.
isLockedHDA()
→ bool
If this node is an instance of a digital asset, return whether or not it is locked. Otherwise, return False.
To differentiate between unlocked digital assets and nodes that are not instances of digital assets, check if the node’s type has a definition:
def isUnlockedAsset(node): return not node.isLockedHDA() and node.type().definition() is not None
See hou.HDADefinition.updateFromNode for an example of how to save and lock all unlocked digital asset instances.
isInsideLockedHDA()
→ bool
Return whether this node is inside a locked digital asset. If this node is not inside a locked HDA, the node may deviate from the HDA definition.
isEditableInsideLockedHDA()
→ bool
Return False if the node is contained inside a locked HDA node and, is not marked as editable within that locked HDA, and True otherwise. In particular this function will return True for a node that is not inside a locked HDA (or not inside an HDA at all).
isMaterialManager()
→ bool
Returns True if the node contains materials.
hdaModule()
→ hou.HDAModule
This method is a shortcut for self.type().hdaModule()
to reduce the length
of expressions in Python parameters and button callbacks. See
hou.NodeType.hdaModule for more information.
See also the hm
method and hou.phm().
hm()
→ hou.HDAModule
This method is a shortcut for self.hdaModule()
.
See also hou.phm().
hdaViewerStateModule()
→ hou.HDAViewerStateModule
This method creates an instance of hou.HDAViewerStateModule associated
to the underlying Node
.
See also hou.NodeType.hdaViewerStateModule.
hdaViewerHandleModule()
→ hou.HDAViewerHandleModule
This method creates an instance of hou.HDAViewerHandleModule associated
to the underlying Node
.
See also hou.NodeType.hdaViewerHandleModule.
syncNodeVersionIfNeeded(from_version)
Synchronize the node from the specified version to the current version of its HDA definition. See also hou.HDADefinition.version.
outputForViewFlag()
→ int
Return an integer to indicate which output of the node should be used for display purposes.
setOutputForViewFlag(output)
Sets which output should be used for display purposes on this node.
creationTime()
→ datetime.datetime
Return the date and time when the node was created.
modificationTime()
→ datetime.datetime
Return the date and time when the node was last modified.
creatorState()
→ str
This returns the name of the viewport tool that was used to be created. This name is not set by default and is usually the empty string.
setCreatorState(state)
This sets the name of the tool that created this node. If you call this
with a name that differs from the node type name, you should also call
setBuiltExplicitly(False)
.
isBuiltExplicitly()
→ bool
Return whether this node was built explicitly (defaults to True). Most nodes are built explicitly, but some are implicitly created by Houdini. For example, if you select geometry from multiple SOPs and then perform an operation, Houdini will put down an implicit merge SOP before performing that operation. When reselecting geometry in SOPs, Houdini will automatically delete any SOPs that were created implicitly.
setBuiltExplicitly(built_explicitly)
Set whether this node was built explicitly (default value is True). If set to False, this node will not show up in various menus and in the Network View pane’s list mode. This flag is typically used for intermediate utility nodes that one is unlikely to want to change its parameters.
isTimeDependent()
→ bool
Return whether the node is time dependent. A time dependent node is re-evaluated every time the frame changes.
cook(force=False, frame_range=())
Asks or forces the node to re-cook.
frame_range
The frames at which to cook the object. This should be a tuple of 2 or 3
ints giving the start frame, end frame, and optionally a frame
increment, in that order. If you supply a two-tuple (start, end)
, the
increment is 1
.
needsToCook(time=hou.time())
→ bool
Asks if the node needs to re-cook.
cookCount()
→ int
Returns the number of times this node has cooked in the current session.
updateParmStates()
Update the UI states, such as hidden and disabled, for each parameter in the node.
UI states can be expressed as conditionals (i.e. Disable When) which require evaluation. Typically in graphical Houdini the Parameter Pane performs the evaluation when the node is selected in order to determine how the node parameters should look in the pane. However in non-graphical Houdini or if the Parameter Pane has not yet loaded the node, then the evaluation does not occur and the UI states remain at their defaults causing methods such as hou.Parm.isDisabled and hou.Parm.isHidden to return incorrect values. In these cases, it is recommended that hou.Node.updateParmStates is called.
infoTree(verbose=False, debug=False, output_index=0, force_cook=False)
→ hou.NodeInfoTree
Returns a tree structure containing information about the node and its most recently cooked data. The contents of the tree vary widely depending on the node type, and the nature of its cooked data. This tree of data is used to generate the node information window contents.
verbose
Setting verbose
to True
will cause some additional information to
be generated. In particular data that is expensive to calculate, or
which will generate a large amount of information tends to be generated
only if this option is turned on.
debug
Setting debug
to True
will, in a few cases, cause additional
information to be displayed which generally will be most useful when
debugging the internal operation of Houdini. For example, geometry
attributes will display their “data ids”, which can be helpful when
tracking down errors in SOPs written with the HDK.
output_index
Specifies which of the node’s outputs to return information for.
force_cook
If True
, ensures that output has been cooked before building the info tree.
Note that if the node already has errors, this will attempt to recook the node.
cookPathNodes()
→ tuple
of hou.Node
Return a list of the nodes, including nodes in subnets, that were used in the last cook for the network this node belongs to.
canGenerateCookCode(check_parent=False, check_auto_shader=True)
→ bool
Return True if the node can generate compiled cook code and False otherwise.
If check_parent
is true, the parents in the ancestor hierarchy are tested
if any of them can generate code.
If the node cannot generate cook code explicitly, it might still be able
to provide such code implicitly, if it can be wrapped in auto-shader.
E.g., a building-block VOPs such as Anti-Aliased Noise don’t generate
a complete cook code; they provide code fragment that contributes to the
full cook function. But sometimes they can be automatically wrapped in such
a function, which which will act as cook code. If check_auto_shader
is true, the node will be tested if it provides implicit cook code.
cookCodeGeneratorNode(check_parent=False)
→ hou.Node
Return the node itself or a network node that contains this node and can generate compiled cook code. For example, the generator node for a VOP node could be the SHOP node or SOP node that contains it for example.
Return None if this node cannot generate code and is not contained in a code generating node either either.
cookCodeLanguage()
→ str
Return the language of the generated cook code (i.e. VEX, RSL).
Raises hou.OperationFailed if this node cannot generate compiled code.
supportsMultiCookCodeContexts()
→ bool
Return True if this node can generate compiled cook code for multiple contexts (i.e. surface context, displacement context, etc.) and False otherwise.
Raises hou.OperationFailed if this node cannot generate compiled code.
saveCompiledCookCodeToFile(file_name, context_name=None)
Saves compiled VEX code to a disk file (for nodes that support this). See hou.Node.saveCookCodeToFile for a description of the arguments.
saveCookCodeToFile(file_name, skip_header=False, context_name=None)
Saves VEX/RSL source code to a disk file (on nodes that support this).
file_name
The file path in which to save the generated code.
skip_header
If True
, the method does not write a header comment at the beginning
of the file containing the file name and node path from which the code
was generated and a time stamp.
context_name
A string containing name of the shader context for the code. This option applies to nodes such as the Material Shader Builder which can generate code for multiple context types.
For example, a Material network might contain both surface and displacement shaders, so you must specify which type of shader code to generate:
node("/shop/vopmaterial1").saveCookCodeToFile("myfile.vfl", context_name="surface")
On single-context nodes this argument is ignored.
For VEX materials, possible values are surface
, displacement
,
light
, shadow
, fog
, image3d
, photon
, or cvex
.
For RSL materials, possible values are surface
, displacement
,
light
, volume
, or imager
.
addNodeGroup(name=None)
→ hou.NodeGroup
Add a node group to the node and return the new group.
If a group of the given name already exists then this function simply returns the existing group without adding a new one. If the name of the group is None or an empty string, then a unique default name is automatically chosen.
This function can only be called on nodes that are networks. If it is called on a node that is not a network, then it raises hou.OperationFailed.
To remove a node group, use hou.NodeGroup.destroy.
nodeGroup(name)
→ hou.NodeGroup
Return a node group contained by the node with the given name, or None
if
the group does not exist.
nodeGroups()
→ tuple of hou.NodeGroup
Return the list of node groups in this node.
runInitScripts()
Runs the initialization script associated with this node’s type.
deleteScript()
→ str
Return the script that will run when this node is deleted.
setDeleteScript(script_text, language=hou.scriptLanguage.Python)
Sets the script that will run when this node is deleted.
motionEffectsNetworkPath()
→ str
Return a node path representing the location for storing clips. This location may or may not exist. To find or create such a network, use hou.Node.findOrCreateMotionEffectsNetwork.
findOrCreateMotionEffectsNetwork(create=True)
→ hou.chopNetNodeTypeCategory()
Return a CHOP network node suitable for storing Motion Effects. By default, if the node doesn’t exist, it will be created.
See also hou.Parm.storeAsClip and hou.Node.motionEffectsNetworkPath.
stampValue(parm_name, default_value)
Return a copy stamping floating point or string value. This node must be a downstream stamping operator, such as a Copy SOP, Cache SOP, LSystem SOP, or Copy CHOP.
parm_name
The name of the stamping variable.
default_value
The value that this function returns if Houdini is not currently
performing stamping, or if parm_name
is not a valid variable
name. This value may be a float or a string.
You might put the following expression in a Python parameter:
node("../copy1").stampValue("sides", 5)
saveItemsToFile(items, file_name, save_hda_fallbacks = False)
Given a sequence of child items (nodes, network boxes, sticky notes, etc), save a file containing those items. You can load this file using hou.Node.loadItemsFromFile.
items
A sequence of hou.NetworkMovableItems that are children of this node.
file_name
The name of the file to write the contents to. You can use any extension for this file name.
save_hda_fallbacks
Set to True
to save simplified definitions for HDAs into the file
along with the child nodes. Doing this allows the generated file to
be safely loaded into any houdini session, even if the assets used
in the file are not already loaded into the houdini session. Depending
on the use of the generated file, this information is often not
required and makes the files unnecessarily large.
Raises hou.OperationFailed if any of the nodes or network boxes are node children of this node, or if the file could not be written to. Raises hou.PermissionError if you do not have permission to read the contents of this node.
saveChildrenToFile(nodes, network_boxes, file_name)
Combines separate lists of nods and network boxes into a single sequence,
and calls hou.Node.saveItemsToFile. This method is provided for
backward compatibility. New code should call saveItemsToFile
directly.
nodes
A sequence of hou.Nodes that are children of this node.
network_boxes
A sequence of hou.NetworkBoxes that are contained in this node. Note that the contents of the network boxes are not automatically saved, so it is up to you to put them in the list of nodes.
loadItemsFromFile(file_name, ignore_load_warnings=False)
Load the contents of a file (saved with hou.Node.saveItemsToFile) into the contents of this node.
Raises hou.OperationFailed if the file does not exist or it is not
the correct type of file. Raises hou.PermissionError if this
node is a locked instance of a digital asset. Raises hou.LoadWarning
if the load succeeds but with warnings and ignore_load_warnings
is
False
.
loadChildrenFromFile(file_name, ignore_load_warnings=False)
Calls hou.Node.loadItemsFromFile. Provided for backward
compatibility. New code should call loadItemsFromFile
directly.
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
Prints the Python code necessary to recreate a node.
brief
Do not set values if they are the parameter’s default. Applies to the contents of the node if either recurse or save_box_contents is True.
recurse
Recursively apply to the entire operator hierarchy.
save_box_contents
Script the contents of the node.
save_channels_only
Only output channels. Applies to the contents of the node if either recurse or save_box_contents is True.
save_creation_commands
Generate a creation script for the node. If set to False, the generated script assumes that the network box already exists. When set to True, the script will begin by creating the network box.
save_keys_in_frames
Output channel and key times in samples (frames) instead of seconds. Applies to the contents of the node if either recurse or save_box_contents is True.
save_parm_values_only
Evaluate parameters, saving their values instead of the expressions. Applies to the contents of the node if either recurse or save_box_contents is True.
save_spare_parms
Save spare parameters as well. When save_creation_commands is True, commands for creating spare parameters will also be output. Applies to the contents of the node if either recurse or save_box_contents is True.
save_box_membership
Output code to add the root item to its parent network box, if any.
function_name
If a function_name is specified, the output will be wrapped in a Python function.
addEventCallback(event_types, callback)
Registers a Python callback that Houdini will call whenever a particular action, or event, occurs on this particular node instance.
Callbacks only persist for the current session. For example, they are not saved to the .hip
file. If you want persistent callbacks in every session, you can add them in code in 456.py
(runs when the user opens a .hip
file). See where to add Python scripting for more information.
event_types
A sequence of hou.nodeEventType enumeration values describing the event types that will cause Houdini to call the callback
function.
callback
A callable Python object, such as a function or bound method. Houdini will call this function whenever one of the event types in event_types
occurs.
Houdini calls the function with an event_type
keyword argument containing the hou.nodeEventType value corresponding to the event that triggered the callback.
Houdini will pass additional keyword arguments depending on the event type. For example, in a callback for the ParmTupleChanged
event, Houdini will pass a parm_tuple
keyword argument containing a hou.ParmTuple reference to the parameter that changed. See hou.nodeEventType for the extra arguments (if any) passed for each event type.
You can add **kwargs
to the argument list to accept all keyword arguments, to allow the same callback to be used for different events, or to be safe from future changes:
def event_callback(event_type, **kwargs): ...
Note
If you try to add the exact same callback function more than once, Houdini will still only call the function only once in response to an event. However, it may be useful to “add” the same function if you want to register it with different event_types
.
Raises hou.OperationFailed if the event_types
list argument is
empty.
The following example shows to set up a function that’s called whenever a certain node’s name changes:
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)
See also hou.Node.removeEventCallback and hou.Node.removeAllEventCallbacks.
removeEventCallback(event_types, callback)
Given a callback that was previously added on this node and a sequence of hou.nodeEventType enumerated values, remove those event types from the set of event types for the callback. If the remaining set of event types is empty, the callback will be removed entirely from this node.
Raises hou.OperationFailed if the callback had not been previously added.
See hou.Node.addEventCallback for more information.
addParmCallback(callback, parm_names)
Registers a Python callback that Houdini will call whenever a parameter in
parm_names
changes on this particular node instance. This is can be faster
than filtering the parameter names in a callback installed with
hou.Node.addEventCallback if you only care about some parameters or if
the node has many parameters.
callback
A callable Python object, such as a function or bound method. Houdini will call this function whenever one of the event types in event_types
occurs.
parm_names
All list of parameter names.
See hou.Node.addEventCallback for more information.
removeAllEventCallbacks()
Remove all event callbacks for all event types from this node.
See hou.Node.addEventCallback for more information.
Warning
removeAllEventCallbacks
should be used carefully, especially
with viewer states as it may cause functionality to silently
stop working when entering a state.
eventCallbacks()
→ tuple
of (tuple
of hou.nodeEventType, callback)
Return a tuple of all the Python callbacks that have been registered with this node with calls to hou.Node.addEventCallback.
setCachedUserData(name, value)
Add/set a named value on this node instance. Unlike setUserData
,
values set using this method are not saved with the hip file.
name
:
A unique name (key) for the user-defined data. By using different
names, you can attach multiple pieces of user-defined data to a node.
value
:
The value to store. Unlike setUserData
, this value may be any Python
object.
This name/value pair is not stored with the hip file. It is useful for nodes implemented in Python that want to save temporary values between cooks, to avoid recomputing them on subsequent cooks.
The following example illustrates how to set, access, and delete cached user-defined data:
>>> 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
See per-node user-defined data for more information and examples.
cachedUserDataDict()
→ dict
of str
to any python object`
Return a dictionary containing all the user-defined name/string pairs for this node.
See hou.Node.setCachedUserData for more information.
cachedUserData(name)
→ any python obect or None
Return the user-defined cached data with this name, or None
if no data
with this name exists.
See hou.Node.setCachedUserData for more information.
This method can be implemented as follows:
def cachedUserData(self, name): return self.cachedUserDataDict().get(name)
Note that None
is a valid value for a key, so the most reliable way to
check if a key is valid is to check if it is in the result of
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)
Remove the user-defined cached data with this name.
See hou.Node.setCachedUserData for more information.
Raises hou.OperationFailed if no user data with this name exists and must_exist is True.
clearCachedUserDataDict()
Remove all user-defined cached data.
See hou.Node.setCachedUserData for more information.
dataBlockKeys(blocktype)
→ tuple
of str
Return the names of all data blocks stored on this node that are of the
data type specified by the blocktype
parameter.
Data blocks are similar to user data in that they can contain any extra data that may be useful to attach to a specific node. They differ from user data in that data blocks are designed to more efficiently handle large blocks of data. Data blocks can also contain binary data, and have a data type associated with each block.
dataBlockType(key)
→ str
Return the data type of the block specified by the key
parameter.
Raises hou.ValueError if the provided key is not associated with any data block on this node.
dataBlock(key)
→ str
for Python 2, bytes
for Python 3
Returns the data block as a binary string stored under the given key. This method will only work if the specified data block is has a type that can be represented by a python object. Otherwise None is returned.
The returned binary string is a bytes
object in Python 3 and a str
object in Python 2. See HOM binary data for more
information.
Raises hou.ValueError if the provided key is not associated with any data block on this node.
setDataBlock(key, block, block_type=None)
Stores the provided data block on the node under the provided key name, marking it with the provided data type.
Passing an empty string as the block value will remove any data block with
the specified key. Data blocks can also be removed with the
removeDataBlock()
method.
The blocktype string argument requires a C++/HDK plugin to interpret data blocks and turn them into C++ objects. If you're using Python to get and set data blocks, leave the blocktype empty.
removeDataBlock(key)
Removes any existing data block on the node with the specified key. If there is no data block with this key, this method does nothing.
simulation()
→ hou.DopSimulation
Return the simulation defined by this DOP network node. This raises an exception if this is not a dop network.
findNodesThatProcessedObject(dop_object)
→ tuple
of hou.DopNode
Given a hou.DopObject, return a tuple of DOP nodes that processed that object. This raises an exception if this is not a dopnetwork.
selectNextVisibleWorkItem()
If a work item is selected, selects the next visible work item
selectPreviousVisibleWorkItem()
If a work item is selected, selects the previous work item
deselectWorkItem()
Deselects the active work item if this node is inside or contains the TOP network with the currently selected work item.
setCurrentTOPPage(page_index)
If a TOP node can’t display all work items, sets which work item subset (page) will be displayed