Inheritance |
Houdini20以降では、このクラスはHoudini “OP”ノードしか参照しないということがなくなりましたが、
代わりに、ネットワークエディタが様々なノードライクなクラスで動作できるように抽象化されました。
古いhou.Node
クラスは今ではhou.OpNodeとなりました。
このクラスで用意されているメソッドは、すべてのノードライクなクラスで共通となるように設計されています。 このクラスでこれまで定義されていたメソッドの多くは、今ではhou.OpNodeで定義されています。 また、このクラスで定義されているメソッドは、他のノードライクなクラスでは動作が異なるものの、似たような動作をすることに注意してください。
メソッド ¶
階層 ¶
node(node_path)
→ hou.Node or None
指定したパスのノードを返します。ノードが見つからなければNoneを返します。
相対パス(つまり、/
で始まらないパス)を指定した場合、このノードを基準に検索が実行されます。
例えば、変数n
内のノードの親ノードを取得するには、n.node("..")
を使用します。
geo5
という名前の子ノードを取得するには、n.node("geo5")
を使用します。
light3
という名前の兄弟ノードを取得するには、n.node("../light3")
を使用します。
戻り値は、Nodeのサブクラスのインスタンスであることに注意してください。 例えば、見つかったノードがオブジェクトノードであれば、戻り値は、hou.ObjNodeインスタンスになります。
パスが絶対パス(つまり、/
で始まるパス)なら、このメソッドは、hou.node(node_path)
のショートカットです。
相対パスなら、hou.node(self.path() + "/" + node_path)
のショートカットです。
hou.node()も参照してください。
nodes(node_path_tuple)
→ tuple
of hou.Node or None
これは、node()と同様ですが、複数のパスを受け取り、複数のNodeオブジェクトを返します。これは以下と等価です:
nodes = [self.node(path) for path in paths]
item(item_path)
→ hou.NetworkMovableItem or None
指定したパスのネットワークアイテムを返します。そのアイテムが存在しなかった場合はNoneを返します。
相対パス(つまり、/
で始まらないパス)を指定すると、このノードを基準に検索が実行されます。
そのパスが絶対パス(つまり、/
で始まる)の場合、このメソッドは、hou.item(node_path)
のショートカットです。
それ以外の場合、hou.item(self.path() + "/" + item_path)
のショートカットです。
hou.item()も参照してください。
戻り値がNetworkMovableItemのサブクラスのインスタンスである場合があることに注意してください。 例えば、見つかったアイテムがオブジェクトノードであれば、その戻り値はhou.ObjNodeインスタンスです。 そのアイテムがネットワークボックスであれば、その戻り値はhou.NetworkBoxインスタンスです。
items(item_path_tuple)
→ tuple
of hou.NetworkMovableItem or None
これは、item()と同様ですが、複数のパスを受け取り、複数のNetworkMovableItemオブジェクトを返します。これは以下と等価です:
items = [self.item(path) for path in paths]
isNetwork()
→ bool
このノードがネットワークの場合、つまり、子ノードを含むことができるノードの場合はTrue
を返します。
それ以外の場合はFalse
を返します。
これは、hou.Node.createNodeなどのいくつかの他のメソッドをコールすると、そのメソッドはhou.OperationFailedを引き起こすことを意味します。
isEditable()
→ bool
このノードがHDAでない、且つ、HDA内部にない場合、このメソッドはTrueを返します。
このノードがHDAノードだった場合、そのノードがロック解除されていればTrueを返し、ロックされていればFalseを返します(これは、not node.matchesCurrentDefinition()
と等価です)。
このノードがロックされたHDAノード内部にある場合、このメソッドは、このノードがそのロックされたHDA内の編集可能サブネットまたはそのサブネット内部にある場合はTrueを返します。 それ以外はFalseを返します。
このメソッドは、このノードの子に特定のタイプの変更を加えることができるかどうかを反映します。
ノード間のワイヤー接続やフラグの設定といった変更は、子ノードへの編集であり、親ノードまたは周辺ノードの動作にも影響を与えます。
例えば、ノードにディスプレイフラグを有効にできるかどうかを判断するには、node.parent().isEditable()
をテストすることになります。
パタメータ値の変更など、ノード自体の単なる内部的なノードの変更に関しては、node.isEditableInsideLockedHDA()
をテストすれば良いです。
children()
→ tuple
of hou.Node
このノードの子であるノードのリストを返します。 ファイルシステムと同じように、ノードの子はフォルダ/ディレクトリのような構成になっています。
子ノードの数を調べるには、len(node.children())
を使用します。
その結果の子の順番は、Houdiniでのユーザ定義の順番と同じです。 この順番を確認するには、Network Viewペインをリストモードに切り替え、そのリスト順を user defined に設定します。 ノードの順番を変更するには、そのリスト内でノードをドラッグアンドドロップします。
def pc(node): '''特定のノードの子の名前をプリントします。 この関数は、Pythonシェルでインタラクティヴに動作させる時に役に立ちます。''' for child in node.children(): print child.name() def ls(): '''現行ノード下のノードの名前をプリントします。''' pc(hou.pwd())
以下のエクスプレッションは特定のノードタイプの子のリストを評価します:
[c for c in node.children() if c.type() == node_type]
allItems()
→ tuple
of hou.NetworkMovableItem
このノードのすべての子を含んだタプルを返します。
children
とは違い、このメソッドはhou.NetworkBox, hou.SubnetIndirectInput, hou.StickyNote, hou.NetworkDotのオブジェクトも返します。
allSubChildren(top_down=True, recurse_in_locked_nodes=True, sync_delayed_definition=False)
→ tuple of hou.Node
このノードのサブチルドレンすべてを再帰的に返します。
例えば、hou.node("/").allSubChildren()
は、HIPファイル内のノードすべてを返します。
top_down
Trueの場合、この関数は、上から下に検索して、返されたタプル内のノードをその子の前に配置します。 Falseの場合、下から上に検索して、子を親の前に配置します。
recurse_in_locked_nodes
Trueの場合、この関数は、ロックされた子ノード(isEditable()
メソッドがFalse
を返す子ノード)の中を再帰検索して、
戻り値のタプルの中に、そのロックされた子ノードの子を含めます。
Falseの場合、この関数は、ロックされた子ノードの中を再帰検索しないので、戻り値のタプルの中には、そのロックされた子ノードの子は含まれません(もちろん、ロックされた子ノードはそのタプルに含まれます)。
例えば、recurse_in_locked_nodesがTrue
で、hou.node("/obj/geo1")
の中にPlatonic Solidsノード(ロックされたノード)があった場合、
hou.node("/obj").allSubChildren()
が返すタプルには、Platonic Solidsノードとその子ノードが含まれます。
recurse_in_locked_nodesがFalse
の場合、その戻り値のタプルにはPlatonic Solidsノードが含まれますが、その子ノードは含まれません。
sync_delayed_definition
場合によってはこのノードが評価されるまでノードの内容はロードしたくないです。
すべてのノードが無駄に展開されないようにするために、デフォルトでは、ノードの内容は未展開のままにされて返されません。
sync_delayed_definitionをTrue
に設定すると、すべての子ノードが再帰的に同期されて、ネットワーク全体が完全にインスタンス化され、
同期されたすべてのノードが返されます。
返されるのはタプルであって、ジェネレータではないことに注意してください。 つまり、戻り値を通じてループしている間にノードを削除したり作成しても安全であることを意味します。
以下の関数は、指定したノード内の特定のタイプの子すべてを削除します:
def removeSubChildrenOfType(node, node_type): '''特定のタイプの子すべてを再帰的に削除します。''' for child in node.allSubChildren(): if child.type() == node_type: child.destroy()
このコードは、例えば、/obj下にあるVisibility SOPすべてを削除します:
>>> removeSubChildrenOfType(hou.node("/obj"), hou.sopNodeTypeCategory().nodeTypes()['visibility'])
allSubItems(top_down=True, recurse_in_locked_nodes=True, sync_delayed_definition=False)
→ tuple of hou.NetworkMovableItem
このノード内のすべてのサブアイテム(ノード、ネットワークボックス、ステッキーノートなど)を再帰的に返します。
例えば、hou.node("/").allSubItems()
は、hipファイル内のすべてのノードネットワークアイテムを返します。
このメソッドのパラメータの詳細は、hou.Node.allSubChildrenを参照してください。
allNodes()
→ generator of hou.Node
このノード内に含まれたすべてのノード(このノードを含む)のシーケンスを再帰的に返します。 このメソッドは、以下の点でhou.Node.allSubChildrenと異なります:
-
戻りのシーケンスには、このノードが含まれます。
-
上から下または下から上の走査順を保証していません。
-
このメソッドはジェネレータであり、タプルを返さないので、その戻り値によってループさせてノードを作成または削除するのは危険です。
以下は、/obj下のすべてのノードのパスを出力した例です:
root_node = hou.node("/obj") for node in root_node.allNodes(): print node.path()
glob(pattern, ignore_case=False)
→ tuple of hou.Node
パターンに合致した子ノード名のタプルを返します。
パターンには、スペース区切りで複数のピースを含めることができます。
パターンピース内のアスタリスク(*
)は、どの文字にも合致します。
デフォルトでは、Houdiniは、各パターンピースで既に合致したノードを追加します。
しかし、そのパターンピースがキャレット(^
)で始まっていれば、Houdiniは、その結果からそのピースの合致を排除します。
デフォルトのパターンマッチは、大文字小文字を区別します。
大文字小文字を区別せずにパターンマッチングを行なうには、ignore_case
をTrueに設定します。
この設定は、ノード名のマッチングの時にだけ大文字小文字の区別をしない事に注意してください。
グループ、ネットワークボックス、バンドル名のマッチングでは、大文字小文字の区別がされます。
このメソッドは、空っぽのパターンを指定した場合に空っぽのタプルを返します。
>>> obj = hou.node("/obj") >>> obj.createNode("geo", "geo1") <hou.ObjNode of type geo at /obj/geo1> >>> obj.createNode("geo", "geo2") <hou.ObjNode of type geo at /obj/geo2> >>> obj.createNode("geo", "grid") <hou.ObjNode of type geo at /obj/grid> >>> obj.createNode("geo", "garbage") <hou.ObjNode of type geo at /obj/garbage> >>> obj.createNode("geo", "box") <hou.ObjNode of type geo at /obj/box> >>> def names(nodes): ... return [node.name() for node in nodes] >>> names(obj.glob("g*")) ['geo1', 'geo2', 'grid', 'garbage'] >>> names(obj.glob("ge* ga*")) ['geo1', 'geo2', 'garbage'] >>> names(obj.glob("g* ^ga*")) ['geo1', 'geo2', 'grid']
hou.Node.recursiveGlobも参照してください。
recursiveGlob(pattern, filter=hou.nodeTypeFilter.NoFilter, include_subnets=True)
→ tuple of hou.Node
hou.Node.globと同様に、パターンに合致した名前の子ノードのタプルを返します。 違うのは、その合致した子ノードからさらに再帰的にその子ノードすべてが追加されます。 さらに、その結果はノードタイプでフィルタリングすることができます。
Houdiniは、パターンに対して子ノードをマッチングしてから、その合致した子ノードのサブ子ノードを再帰的に追加し、 そしてフィルターを適用します。
pattern
子ノード名は、この文字列パターンに対してマッチングされます。
パターン構文に関する情報は、hou.Node.globとhou.NodeBundleを参照してください。
子ノードがパターンに合致、且つ、include_subnets
がTrue
の場合、そのサブ子ノードすべてがパターンに関係なく(フィルタリングに基づいて)結果に追加されることに注意してください。
filter
合致したノードを特定のタイプに制限するためのhou.nodeTypeFilter列挙値 (例: object nodes, geometry object nodes, surface shader SHOPsなど)。
パターンとフィルターの挙動は、Houdiniのノードバンドルの挙動と非常に似ています。 詳細は、hou.NodeBundleを参照してください。
パターンが無効な場合は、hou.OperationFailedを引き起こします。
追加と削除 ¶
createNode(node_type_name, node_name=None, run_init_scripts=True, load_contents=True, exact_type_name=False, force_valid_node_name=False)
→ hou.Node
node_type_name
タイプのノードをこのノードの子として新しく作成します。
node_name
新しいノードの名前。指定しなかった場合、Houdiniはノードタイプ名に番号を追加します。 その番号は、固有のノード名になるまで番号を上げます。 名前を指定し、ノードがその名前で既に存在する場合、Houdiniは番号を追加して固有の名前を作成します。
run_init_scripts
Trueの場合、ノードタイプに関連した初期化スクリプトが新しいノードに対して実行されます。
load_contents
Trueの場合、サブネットの内容がカスタムサブネットオペレータに対して読み込まれます。
exact_type_name
Trueの場合、ノードのタイプ名がnode_type_name
で指定した通りのままになります。
そうでない場合、指定したnode_type_name
に合致する優先度の高いオペレータタイプを使用することができます。
例えば、“hda”を指定すると新しいバージョンの“hda::2.0”に合致したり、または“namespaceA::hda”と“namespaceB::hda”のオペレータが2つ利用可能な場合なら、
“namespaceB”が優先され、作成されるノードのタイプは“namespaceB::hda”になります。
force_valid_node_name
Trueの場合、node_name
が無効であっても有効な名前で新しいノードを作成します。
例えば、node_name
がfoo bar
だった場合、その新しいノード名はfoo_bar
になります。
force_valid_node_name
がFalseの場合、且つ、node_name
が無効だった場合、hou.OperationFailed例外が引き起こされます。
指定したノード名が無効、且つ、force_valid_node_name
がFalseの場合は、hou.OperationFailedを引き起こします。
このノードに子を含めることができなかった場合は、hou.OperationFailedを引き起こします。
このノードがロックされたアセット内にあった場合は、hou.PermissionErrorを引き起こします。
>>> obj = hou.node("/obj") # Houdiniにノードタイプ名に基づいた名前を選択させます。 >>> obj.createNode("geo") <hou.ObjNode of type geo at /obj/geo1> # Houdiniに固有の名前を選択させます。 >>> obj.createNode("geo") <hou.ObjNode of type geo at /obj/geo2> # ノードに特定の名前を指定します。 >>> obj.createNode("geo", "foo") <hou.ObjNode of type geo at /obj/foo> # Houdiniに私達が提案した名前から固有の名前を作成させます。 # また、ジオメトリオブジェクトに初期スクリプトを実行させなければ、中身が空っぽになります。 >>> obj.createNode("geo", "geo1", run_init_scripts=False) <hou.ObjNode of type geo at /obj/geo3> >>> obj.node("geo1").children() (<hou.SopNode of type file at /obj/geo1/file1>,) >>> obj.node("geo3").children() ()
destroy(disable_safety_checks=False)
このノードを削除します。
Nodeインスタンスを削除した後に、それに対してメソッドをコールすると、Houdiniはhou.ObjectWasDeletedを引き起こします。
ロックされたアセット内のノードを削除しようとした場合は、hou.OperationFailedを引き起こします。
disable_safety_checks
をTrue
にすると安全性チェックが無効になるので、ノードをクック中にこのメソッドがコールされるとHoudiniがクラッシュしてしまう場合があります。
copyItems(items, channel_reference_originals = False, relative_references = True, connect_outputs_to_multi_inputs = True)
→ tuple
of hou.NetworkMovableItem
指定したアイテムすべてのコピーをこのネットワーク内に作成します。これらのアイテムは、このネットワークの子である必要はありませんが、すべてのアイテムが同じ親ネットワーク内に含まれている必要があります。
channel_reference_originals
がTrueの場合、新しいノードすべてのパラメータが元のノードのチャンネル参照に設定されます。
コピーしたノードがサブネットワークであれば、トップレベルのノードのみが元のサブネットワークのチャンネル参照を構築します。
そのサブネットワーク内の子ノードは、元の子ノードの単純コピーになります。
relative_references
パラメータは、チャンネル参照がソースノードの相対パスまたは絶対パスのどちらを使用するのかを制御します。
connect_outputs_to_multi_inputs
がTrueで、コピーされるアイテムの出力が複数の入力ノードに接続されている場合(例えば、Merge)、そのコピーされた新しいアイテムの出力にもその複数の入力ノードが接続されます。
通常では、コピーされるノードには、そのコピーされるセットの外側のノードへの出力はありません。
新しいネットワークアイテムすべてのtuple
を返します。
このノードに子を含めることができなかった場合はhou.OperationFailedを引き起こします。 このノードがロックされたアセット内にあった場合はhou.PermissionErrorを引き起こします。
deleteItems(items, disable_safety_checks=False)
指定したhou.NetworkMovableItemオブジェクトのタプル内のすべてのアイテムを削除します。
これは、それらのアイテムをループさせて個々にdestroy()
をコールするよりも非常に効率的です。
また、これは他のオブジェクトも削除しないと削除することができないオブジェクトが存在する場合でも安全に処理します。
指定した1つ以上のアイテムがこのノードの子でなかった場合は、hou.OperationFailedを引き起こします。 このノードがロックされていたり、ロックされたデジタルアセット内にあった場合は、hou.PermissionErrorを引き起こします。
disable_safety_checks
をTrue
にすると安全性チェックが無効になるので、ノードをクック中にこのメソッドがコールされるとHoudiniがクラッシュしてしまう場合があります。
アセット ¶
canCreateDigitalAsset()
→ bool
hou.Node.createDigitalAssetが成功できれば、True
を返します。
選択 ¶
isCurrent()
→ bool
ノードが、ネットワーク内で最後に選択したノードであるかどうかを示すブールを返します。
各ネットワーク(つまり、子を含んだノード)自体には、選択したノードのリストが記録されており、最後に選択したノードが特別な意味を持っています。 例えば、ピン留めしていないパラメータペインで表示されるノードがそれです。
Houdiniですべてのネットワーク内の選択したノードすべてのタプルを取得するには、hou.selectedNodes()も参照してください。 このリストの最後のノードもHoudiniでは特別な意味をもち、グローバルの現行ノードに相当します。
setCurrent(on, clear_all_selected=False)
このノードを最後に選択したノードとして設定または未設定にします。
各ネットワーク(つまり、子を含んだノード)自体には、選択したノードのリストが記録されており、最後に選択したノードが特別な意味を持っています。 例えば、ピン留めしていないパラメータペインで表示されるノードがそれです。
on
がTrueの場合、このノードが最後に選択したノードになります。
Falseで、このノードが最後に選択したノードだった場合、そのノードが非選択になり、最後から2番目に選択したノードが最後に選択したノードになります。
clear_all_selected
がtrueの場合、Houdiniは、その処理を実行する前に、このネットワーク内のすべてのノードを非選択にします。
hou.Node.setSelectedとhou.selectedNodes()も参照してください。
selectedChildren(include_hidden=False, include_hidden_support_nodes=False)
→ tuple
of hou.Node
選択されたこのノードの子を含んだタプルを返します。 最後に選択したノードが特別な意味を持ち、そのノードはhou.Node.isCurrentを使って取得することもできることを覚えておいてください。
以下のサンプルは、/obj
内の選択したオブジェクトすべての名前をプリントします:
for n in hou.node("/obj").selectedChildren(): print n.name()
選択した子ノードの合計を調べるには、len(node.selectedChildren())
を使用します。
selectedItems(include_hidden=False, include_hidden_support_nodes=False)
→ tuple
of hou.NetworkMovableItem
選択されているこのノードの子を含んだタプルを返します。
selectedChildren
とは違い、このメソッドは、選択されたhou.NetworkBox, hou.SubnetIndirectInput, hou.StickyNote, hou.NetworkDotのオブジェクトも返します。
以下のサンプルは、/obj
内の選択したアイテムすべての位置をプリントします:
for n in hou.node("/obj").selectedItems(): print n.position()
numItems(item_type=None, selected_only=False, include_hidden=False)
→ int
選択されていて且つitem_type
で指定したタイプのノードの子の数を返します。
item_type
None
にすると、選択されているすべてのタイプのアイテムの数が返されます。
hou.networkItemType値を指定すると、選択されているそのタイプのアイテムの数が返されます。
selected_only
True
にすると、選択されているアイテムのみが数えられます。
タイプ ¶
type()
→ hou.NodeType
このノードに対してhou.NodeTypeオブジェクトを返します。
例えば、すべてのカメラノードインスタンスは、同じノードタイプを共有します。
childTypeCategory()
→ hou.NodeTypeCategory
このノードの子に相当するhou.NodeTypeCategoryを返します。 例えば、このノードがジオメトリオブジェクトの場合、その子はSOPです。 オブジェクトサブネットの場合、その子はオブジェクトです。
入力と出力 ¶
inputs()
→ tuple
of hou.Node
このノードの入力に接続されたノードのタプルを返します。 入力がhou.SubnetIndirectInputに接続されている場合、それに該当する親サブネットの入力に接続されたノードが返されます。 言い換えれば、間接入力の存在を隠すということです。つまり、その結果のノードは、すべてが呼び出し側のノードの兄弟であるとは限りません。
特定の入力が接続されていない(または、それが間接入力に接続されていても、それに該当するサブネットの親入力が接続されていない)場合は、タプルのその箇所にNone
値が配置されます。
input(inputidx)
→ hou.Node
このノードの指定された入力に接続されているノードを返します。 入力がhou.SubnetIndirectInputに接続されている場合、それに該当する親サブネットの入力に接続されたノードが返されます。 言い換えれば、間接入力の存在を隠すということです。つまり、その結果のノードは、すべてが呼び出し側のノードの兄弟であるとは限りません。
その入力が接続されていない(または、それが間接入力に接続されていても、それに該当するサブネットの親入力が接続されていない)場合は、None
値が返されます。
inputFollowingOutputs(inputidx)
→ hou.Node
このノードの指定された入力に接続されているノードを返します。 入力がhou.SubnetIndirectInputに接続されている場合、それに該当する親サブネットの入力に接続されたノードが返されます。 言い換えれば、間接入力の存在を隠すということです。つまり、その結果のノードは、すべてが呼び出し側のノードの兄弟であるとは限りません。
さらに、その入力がSOPsの非プライマリ出力に接続されている場合、返されるノードは、サブネットそのものではなく、SOPネットワーク内のノードになります。 このメソッドを使用することで、このノードの入力に呼応する1番目の出力を持ったノードを取得したい時に、コードが複数出力を考慮しなくて済みます。
その入力が接続されていない(または、それが間接入力に接続されていても、それに該当するサブネットの親入力が接続されていない)場合は、None
値が返されます。
outputs()
→ tuple
of hou.Node
このノードの出力に接続されたノードのタプルを返します。
このメソッドは、[connection.outputNode() for connection in self.outputConnections()]
のショートカットです。
inputConnections()
→ tuple
of hou.NodeConnection
このノードのトップに繋がっている接続のhou.NodeConnectionオブジェクトのタプルを返します。 このタプルの長さは、このノードに入ってくる接続の数と同じになります。 このノードに何も繋がっていなかった場合は、空っぽのタプルが返されます。
接続されたノード自体のリストを取得するには、hou.Node.inputsを使用します。 (接続の有無に関係なく)接続可能なコネクタのリストすべてを取得するには、hou.Node.inputConnectorsを使用します。
>>> cookie = hou.node("/obj").createNode("geo").createNode("cookie") >>> cookie.setInput(1, cookie.parent().createNode("box")) >>> cookie.inputConnections() (<hou.NodeConnection from grid1 output 0 to cookie input 1>,) >>> cookie.inputConnectors() ((), (<hou.NodeConnection from grid1 output 0 to cookie input 1>,))
hou.Node.inputConnectorsも参照してください。
outputConnections()
→ tuple
of hou.NodeConnection
このノードの下から繋がっている接続のNodeConnectionオブジェクトのタプルを返します。 このノードの出力に何も繋がっていなかった場合は、空っぽのタプルが返されます。
接続されたノード自体のリストを取得するには、hou.Node.outputsを使用します。
このメソッドは、reduce(lambda a, b: a+b, self.outputConnectors(), ())
のショートカットです。
ほとんどのノードは出力コネクタを1つしか持たないので、このメソッドは通常では、self.outputConnectors()[0]
と等価です。
>>> box = hou.node("/obj").createNode("geo").createNode("box") >>> box.parent().createNode("xform").setFirstInput(box) >>> box.parent().createNode("subdivide").setFirstInput(box) >>> box.outputConnections() (<hou.NodeConnection from box1 output 0 to xform1 output 0>, <hou.NodeConnection from box1 output 0 to subdivide1 input 0>)
hou.node.outputConnectorsも参照してください。
inputConnectors()
→ tuple
of tuple
of hou.NodeConnection
hou.NodeConnectionオブジェクトのタプルのタプルを返します。 その結果のタプルの長さは、このノードに接続可能な入力の最大数と同じです。 なにかそのコネクタに接続されていれば、各サブタプルは必ず1個のノード接続を含みます。 何も接続されていなければ、それは空っぽのタプルです。
hou.NodeConnectionとhou.Node.inputConnectionsも参照してください。
outputConnectors()
→ tuple
of tuple
of hou.NodeConnection
hou.NodeConnectionオブジェクトのタプルのタプルを返します。 その結果のタプルの長さは、このノードの出力コネクタの数と同じです。 各サブタプルは、そのコネクタから出ているコネクションすべてを含み、そのコネクタに何も接続されていなければ、それは空っぽのタプルです。
>>> split = hou.node("/obj").createNode("dopnet").createNode("split") >>> split.parent().createNode("rbdsolver").setFirstInput(split) >>> split.parent().createNode("gravity").setFirstInput(split, 1) >>> split.parent().createNode("merge").setFirstInput(split, 1) >>> split.outputConnectors() ((<hou.NodeConnection from split1 output 0 to rbdsolver1 input 0>,), (<hou.NodeConnection from split1 output 1 to gravity2 input 0>, <hou.NodeConnection from split1 output 1 to merge1 input 0>), (), ())
hou.NodeConnectionとhou.Node.outputConnectionsも参照してください。
indirectInputs()
→ tuple
of hou.SubnetIndirectInput
サブネットのhou.SubnetIndirectInputオブジェクトを返します。
このノードがサブネットワークでない場合は、hou.InvalidNodeTypeを引き起こします。
subnetOutputs()
→ tuple
of hou.Node
サブネットワークの子出力ノードを返します。
SOPsなどの特定のネットワークには、通常のディスプレイノードまたはレンダーノードをオーバーライドして複数の出力を可能にするための特別なOutputノードがあります。 何かしらのOutputノードが存在すれば、これは、それらのノードのリストを返します。 何もOutputノードが存在しなければ、クックのターゲットがディスプレイノードなのか出力ドライバなのかに応じて、ディスプレイノードまたはレンダーノードのどちらかが返されます。 サブネットに何も子がなければ、空っぽのリストが返されます。
inputAncestors(include_ref_inputs=True, follow_subnets=False, only_used_inputs=False)
→ tuple
of hou.Node
このノードの入力ノードすべてのタプルを返します。include_ref_inputsがFalseの場合、参照入力を辿りません。
follow_subnetsがTrueの場合、サブネットワークノードを単一ノードとして扱わず、そのディスプレイノードから始まる子ノードも辿ります。
only_used_inputs
がTrueの場合、最後のクックに関係したノードのみを辿ります。
inputs()
メソッドも参照してください。
inputIndex(input_name)
指定した名前のノード入力のインデックスを取得します。
入力名を使用するノードカテゴリに関しては、指定した名前の入力のインデックスを返します。 VOPノードに関しては、その名前が、それに該当する入力を持ったノードパラメータ名にもなります。
outputIndex(output_name)
指定した名前のノード出力のインデックスを取得します。
入力名を使用するノードカテゴリに関しては、指定した名前の出力のインデックスを返します。
setInput(input_index, item_to_become_input, output_index=0)
item_to_become_input
がNoneでない場合、他のノードの出力コネクタをこのノードの入力コネクタに接続します。
それ以外の場合、入力コネクタに接続されたすべてのノードの接続を解除します。
input_index
このノードの入力コネクタのインデックス。
item_to_become_input
None
の場合、このメソッドは、入力コネクタからのすべてのノードを接続解除します。
hou.Nodeまたはhou.SubnetIndirectInputの場合、このメソッドは、その出力をこのノードの入力コネクタに接続します。
output_index
他のノードの出力コネクタのインデックス。
output_index
が無効の場合は、hou.InvalidInputを引き起こします。
item_to_become_input
がこのノードと同じネットワーク内にない場合は、hou.OperationFailedを引き起こします。
ノードがロックされたアセット内にある場合は、hou.PermissionErrorを引き起こします。
setNamedInput(input_name, item_to_become_input, output_name_or_index)
input_nameで指定されたこのノード上の入力を、output_nameまたはoutput_indexで指定したitem_to_become_input上の出力に接続します。
setFirstInput(item_to_become_input, output_index=0)
self.setInput(0, item_to_become_input)
のショートカット。
詳細は、hou.Node.setInputを参照してください。
setNextInput(item_to_become_input, output_index=0, unordered_only=False)
他のノードからの出力コネクタを、このノードの1番目の非接続入力コネクタまたは複数入力コネクタに接続します。
ノードにOrdered InputsとUnordered Inputs(複数入力コネクタ)がある場合、unordered_only
パラメータを使用することで強制的に入力を、Ordered Inputではなく、Unordered Inputs(複数入力コネクタ)に接続することができます。
このメソッドは、ほぼ以下と等価です:
for input_index, connectors in enumerate(self.inputConnectors()): if len(connectors) == 0: self.setInput(input_index, item_to_become_input, output_index) raise hou.InvalidInput("All inputs are connected")
すべての入力が接続されていれば、hou.InvalidInputを引き起こします。 詳細は、hou.Node.setInputを参照してください。
insertInput(input_index, item_to_become_input, output_index=0)
入力ワイヤーを挿入します。つまり、input_indexの後の入力コネクタ毎に、その入力コネクタの内容を次のコネクタにシフトさせて、 hou.Node.setInputをコールします。パラメータの意味については、hou.Node.setInputを参照してください。
numOrderedInputs()
→ int
いくつかのノードでは、特有の意味を持つ専用の入力をいくつか持っており、その後に任意の数の追加入力を持っています。
この追加入力では隙間は許可されていません(これらの入力のことをUnordered Inputsと呼びます)。
これは、Multiple Solver DOPなどのDOPノードがそうです。
この関数は、そのUnordered Inputsの前の専用(またはOrdered)の入力の数を返します。
このノードのhou.Node.typeオブジェクトに対してhou.NodeType.hasUnorderedInputs関数が
True
を返す場合は、この関数はゼロ以外の値を返すだけです。
createInputNode(input_index, node_type_name, node_name=None, run_init_scripts=True, load_contents=True, bool exact_type_name=False)
新しくノードを作成し、そのノードをこのノードの入力の1つに接続します。その新しいノードを返します。
input_index
このノードの入力コネクタのインデックス。
node_type_name
作成するノードのタイプの名前。詳細は、createNodeメソッドを参照してください。
node_name
詳細は、createNodeメソッドを参照してください。
run_init_scripts
詳細は、createNodeメソッドを参照してください。
load_contents
詳細は、createNodeメソッドを参照してください。
exact_type_name
詳細は、createNodeメソッドを参照してください。
createOutputNodeメソッドも参照してください。
createOutputNode(node_type_name, node_name=None, run_init_scripts=True, load_contents=True, bool exact_type_name=False)
新しくノードを作成し、その1番目の入力のこのノードの(1番目の)出力に接続します。その新しいノードを返します。
パラメータの詳細は、createNodeメソッドを参照してください。
createInputNodeメソッドも参照してください。
inputNames()
→ tuple of str
このノードに対して入力名すべてのタプルを返します。不可視の入力コネクタの名前も含まれます。
inputLabels()
→ tuple of str
このノードの入力ラベルすべてのタプルを返します。非表示の入力コネクタのラベルも含まれます。
outputNames()
→ tuple of str
このノードに対して出力名すべてのタプルを返します。
outputLabels()
→ tuple of str
このノードの出力ラベルすべてのタプルを返します。
editableInputStrings(input_index)
→ dict
of str
to str
指定した入力インデックスに関連のある文字列キー/値のペアの辞書を返します。 これらの文字列の目的は、あるノードタイプを他のノードタイプに変換することです。
このメソッドは、そのノードタイプがこの機能を利用していなければ例外を引き起こします。 そのノードタイプが、編集可能な入力データに対応しているかどうか判断するには、hasEditableInputDataを使用します。
editableInputString(input_index, key)
→ str
指定した入力インデックスとキーに関連のある文字列を返します。 この文字列の目的は、あるノードタイプを他のノードタイプに可変させることです。
このメソッドは、そのノードタイプがこの機能を使用していない場合に例外を引き起こします。 hasEditableInputDataを使用することで、ノードタイプが編集可能入力データに対応しているかどうかを判断することができます。
setEditableInputString(input_index, key, value)
指定した入力インデックスとキーに関連のある文字列を設定します。 この文字列の目的は、あるノードタイプを他のノードタイプに可変させることです。
このメソッドは、そのノードタイプがこの機能を使用していない場合に例外を引き起こします。 hasEditableInputDataを使用することで、ノードタイプが編集可能入力データに対応しているかどうかを判断することができます。
サブネット ¶
isSubNetwork()
→ bool
ノードがサブネットワークならTrue、そうでないならFalseを返します。
collapseIntoSubnet(child_nodes, subnet_name=None, subnet_type=None)
→ hou.Node
このノードの子ノードのシーケンスを指定すると、それらの子ノードをサブネットワークに折りたたみます。 つまり、このノードのネットワーク内にサブネットが作成され、このネットワークの指定した子をそのサブネット内に移動させます。
child_nodes
新しいサブネットに入るこのノードの子ノード。
subnet_name
新しいサブネットノードの名前。Houdiniに自動的に名前を選択させる場合は、Noneにします。
subnet_type
新しいサブネットノードのタイプ。自動的にHoudiniにプライマリサブネットワークタイプを選択させたいのであればNoneにします。 これが推奨です。
child_nodes
内のノードがこのネットワークの子でない場合やchild_nodes
が空っぽのシーケンスの場合は、hou.OperationFailedを引き起こします。
このサンプルの関数は、単一ノードを受け取り、それをサブネットに置換し、そのノードをサブネットに移動させます..
def collapseSingleNodeIntoSubnet(node, subnet_name=None): node.parent().collapseIntoSubnet((node,), subnet_name=None)
extractAndDelete()
→ tuple
of hou.NetworkMovableItem
このサブネットノードの子を移動させて、このノードの兄弟にし、このノードを削除します。このメソッドは、collapseIntoSubnet()
と逆のメソッドです。
抽出されたすべてのアイテムを含んだタプルを返します。
このノードがサブネットワークでない場合は、hou.InvalidNodeTypeを引き起こします。
メタデータ ¶
comment()
→ str
ノードのコメント文字列を返します。
setComment(comment)
このノードに関連したコメントを設定します。
appendComment()
も参照してください。
appendComment(comment)
指定したテキストを、このノードに関連したコメントに追加します。
isDisplayDescriptiveNameFlagSet()
→ bool
ネットワークエディタ内でノードが説明的名前を表示するかどうかを示すブールを返します。
setDisplayDescriptiveNameFlag(on)
ネットワークディター内でこのノードが説明的名前を表示するかどうか設定します。
creator()
→ Node
このノードから、異なるタイプの最初の親を返します。 単純なネットワークでは、これはparent()と同じですが、その親が同じノードタイプの場合(例えば、どちらもSOPだった場合)、異なるタイプが見つかるまで処理が繰り返されます。 これは、コンテナノードを検索するのに役立ち、例えば、入れ子状になったSOPネットワークについて気にすることなく、SOPが格納されているObjectを検索することができます。 とはいえ、SOPの親が必ずしもObjectであるとは限らないことに注意してください!
レイアウト ¶
moveToGoodPosition(relative_to_inputs=True, move_inputs=True, move_outputs=True, move_unconnected=True)
→ hou.Vector2
ノードをその入力や出力の近くで上手く間隔を空けて動かし、そのノードの新しい位置を返します。
layoutChildren(items=(), horizontal_spacing=-1.0, vertical_spacing=-1.0)
このノードのすべてまたは一部の子ノードをネットワークエディタ内で自動的に配置します。
items
配置する子hou.NetworkMovableItemオブジェクトのシーケンス。 このシーケンスには、ノード、ドット、サブネット入力を含めることができます。 このシーケンスが空っぽの場合、このメソッドは、このノードのすべての子アイテムの位置を変更します。
horizontal_spacing
タイルの幅と高さの比率は、共通入力を持つノード間の間隔に影響します。 このパラメータが-1の場合、Houdiniはデフォルトの間隔を使用します。
vertical_spacing
タイルの幅と高さの比率は、ノードとその出力ノード間の間隔に影響します。 このパラメータが-1の場合、Houdiniはデフォルトの間隔を使用します。
isHidden()
ノードがネットワークエディタ内で非表示かどうか返します。 Houdiniは、“exposed”という用語を使用して、非表示でないノードを参照することもできます。
可視ノードを不可視ノードに接続した場合、ネットワークエディタは、その可視ノードから不可視ノードまでのワイヤーを破線で表示します。
hou.Node.hideも参照してください。
hide(on)
ネットワークエディタ内にノードを非表示または表示します。不可視ノードに関する詳細は、hou.Node.isHiddenを参照してください。
クック ¶
errors()
→ tuple
of str
このノードの最後のクックからのエラーのテキストを返します。エラーがなければ空っぽのタプルが返されます。
warnings()
→ tuple
of str
このノードの最後のクックからの警告のテキストを返します。警告がなければ空っぽのタプルが返されます。
messages()
→ tuple
of str
このノードの最後のクックからメッセージのテキストを返します。メッセージがなければ空っぽのタプルが返されます。
ネットワークボックス ¶
iterNetworkBoxes()
→ generator of hou.NetworkBox
このノード内のすべてのネットワークボックスを巡回するジェネレータを返します。
findNetworkBox(name)
→ hou.NetworkBox
このノード内の指定した名前のネットワークボックスを返します。または指定した名前のネットワークボックスが存在しなかった場合はNone
が返されます。
findNetworkBoxes(pattern)
→ tuple
of hou.NetworkBox
このノード内のパターンに合致した名前のネットワークボックスのリストを返します。
createNetworkBox(name=None)
→ hou.NetworkBox
このネットワーク内にネットワークボックスを作成します。このノードがネットワークでない場合は、hou.OperationFailedを引き起こします。
name
を指定しなかった場合は、Houdiniは、そのネットワークボックスにデフォルトの名前を付けます。
ネットワークボックス名はネットワークエディタペイン内に表示されません。 その代わり、hou.NetworkBox.setCommentメソッドによって“コメント”を指定することができます。 このコメントは、ネットワークボックスのタイトルバーに表示されます。
copyNetworkBox(network_box_to_copy, new_name=None, channel_reference_original=False)
→ hou.NetworkBox
ネットワークボックスをコピーし、そのコピーを返します。
new_name
を指定した場合、そのネットワークボックスがnew_nameという名前の新しいネットワークボックスにコピーされます(既にその名前のネットワークボックスが存在すれば別の名前が生成されます)。
channel_reference_original
がTrue
の場合、そのコピーで作成されたすべてのオペレータは、元のオペレータを参照するように設定されたアニメーション可能なパラメータを持ちます。
このノードがネットワークでない場合や、ノードの子タイプがネットワークボックスのノードタイプに合致しなかった場合は、hou.OperationFailedを引き起こします。
ステッキーノート ¶
iterStickyNotes()
→ generator of hou.StickyNote
このノード内のすべてのステッキーノートを巡回するジェネレータを返します。
findStickyNote(name)
→ hou.StickyNote
このノード内の指定した名前のステッキーノートを返します。指定した名前のステッキーノートが存在しなかった場合は、None
を返します。
findStickyNotes(pattern)
→ tuple
of hou.StickyNote
このノード内のパターンに合致した名前のステッキーノートのリストを返します。
createStickyNote(name=None)
→ hou.StickyNote
このネットワーク内にステッキーノートを作成します。このノードがネットワークでない場合は、hou.OperationFailedを引き起こします。
name
を指定しなかった場合、Houdiniは、そのノートをデフォルトの名前にします。
copyStickyNote(network_box_to_copy, new_name=None)
→ hou.StickyNote
ステッキーノートをコピーして、そのコピーを返します。
new_name
を指定した場合、そのステッキーノートがnew_nameという名前の新しいステッキーノートにコピーされます(既にその名前のステッキーノートが存在すれば別の名前が生成されます)。
このノードがネットワークでない場合や、ノードの子タイプがステッキーノートのノードタイプに合致しなかった場合は、hou.OperationFailedを引き起こします。
ネットワークドット ¶
createNetworkDot()
→ hou.NetworkDot
このネットワーク内にネットワークドットを作成します。このノードがネットワークでない場合は、hou.OperationFailedを引き起こします。
シリアライズ ¶
copyItemsToClipboard(items)
子アイテムのシーケンス(ノード、ネットワークボックス、ステッキーノートなど)を指定すると、このネットワークまたは他のネットワーク内にそれらをペーストできるように、 それらのアイテムがクリップボードに保存されます。
items
このノードの子であるhou.NetworkMovableItemのシーケンス。
これらのノードまたはネットワークボックスがこのノードの子でない場合は、hou.OperationFailedを引き起こします。 このノードの内容を読み込む権限がない場合は、hou.PermissionErrorを引き起こします。
pasteItemsFromClipboard(position = None)
hou.Node.copyItemsToClipboardを使って保存されたファイルの内容を、このノードの内容に読み込みます。
position
パラメータを2つのfloat値のタプル(またはhou.Vector2のような同等のもの)として指定すると、ペーストしたアイテムが、その位置を中心に配置されるように移動されます。
このノードがネットワークでない場合やクリップボードからアイテムを読み込む時にエラーが発生した場合は、hou.OperationFailedを引き起こします。 このノードがロックされたデジタルアセットインスタンスであれば、hou.PermissionErrorを引き起こします。
演算子 ¶
__eq__(node)
→ bool
Node
オブジェクト間に==
を実装します。
例えば、hou.root() == hou.node(“/”)はTrue
を返します。
同じHoudiniノードに対して複数のPython Node
オブジェクトが存在できます。
hou.node()
の2つの同一コールは、異なるPython Node
オブジェクトを返し、それぞれ同じHoudiniノードを意味します。
==
(別名__eq__
)を使用してそれらのノードを比較すると、True
を返し、
is
(オブジェクト同一性テスト)を使用してそれらのノードを比較するとFalse
を返します。
__ne__(node)
→ bool
Node
オブジェクト間に!=
を実装します。__eq__()
を参照してください。
ユーザデータ ¶
setUserData(name, value)
このノードインスタンス上に名前付き文字列を追加/設定します。
name
ユーザ定義データに対する固有名(キー)。異なる名前を使用することで、複数のユーザ定義データをノードに追加することができます。
value
格納する文字列。
この名前/値のペアがHIPファイルに格納され、それがopscriptとhou.Node.asCodeからの出力に含まれます。
以下のサンプルは、ユーザ定義データを設定、アクセス、削除する方法について説明しています:
>>> n = hou.node("/obj").createNode("geo") >>> n.setUserData("my data", "my data value") >>> n.userData("my data") 'my data value' >>> n.userDataDict() {'my data': 'my data value'} >>> n.destroyUserData("my data") >>> n.userDataDict() {} >>> print n.userData("my data") None
詳細とサンプルは、ノード毎のユーザ定義データを参照してください。
Tip
ユーザデータキーの頭にnodeinfo_
を付けると、(その接頭辞なしで)そのキーと値がNode Infoポップアップウィンドウのカスタムフィールドとして表示されます。
userDataDict()
→ dict
of str
to str
このノードに対するユーザ定義の名前/文字列のペアすべてを含んだ辞書を返します。
詳細は、hou.Node.setUserDataを参照してください。
userData(name)
→ str
or None
この名前のユーザ定義データを返します。この名前のデータが存在しなかった場合は、None
が返されます。
詳細は、hou.Node.setUserDataを参照してください。
このメソッドは以下のように実装されています:
def userData(self, name): return self.userDataDict().get(name)
destroyUserData(name, must_exist=True)
この名前のユーザ定義データを削除します。
詳細は、hou.Node.setUserDataを参照してください。
この名前のユーザデータが存在しない且つmust_existがTrueの場合は、hou.OperationFailedを引き起こします。
フラグ ¶
isFlagReadable(flag)
→ bool
指定したフラグが読み込み可ならTrue、そうでないならFalseを返します。
flag
は、hou.nodeFlag値でなければなりません。
isFlagWritable(flag)
→ bool
指定したフラグが書き込み可ならTrueを、そうでないならFalseを返します。
flag
は、hou.nodeFlag値でなければなりません。
setGenericFlag(flag, value)
bool
、value
に基づいて、指定したフラグの値を設定します。
flag
は、hou.nodeFlag値でなければなりません。
Methods from hou.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
として返します。