Created on | Updated on

ノードの子ノードを返す hou.Node.children と hou.Node.allSubChildren

hou.Node.children

特定のノードの子ノードを調べる際は children() を使います。

mceclip0.png

対象のノードが子ノードを含めるネットワークである場合、そのノードの子ノードのタプルを返します。子ノードを持たない場合、空のタプルを返します。

対象のノードが子ノードを含めるネットワークでない場合、空のタプルを返します。

返り値が空のタプルの場合、それだけでは対象のノードが子ノードを持たないのかネットワークでないのか判別できません。そのときは isNetwork() を使い、そのノードがネットワークかどうかを判別できます。

mceclip2.pngmceclip3.png

タプルの要素の順番は、ユーザーがノードを定義した順番と同じです。

名前に準拠しないため、ノード名を変えてもその順番は変わりません。以下ではノードの名前を sphere1 > sphere6, sphere2 > sphere5, sphere3 > sphere4 に変更していますが、タプルの要素は名前が変わっただけで順番は変わりません。

mceclip5.png

mceclip4.png

hou.Node.allSubChildren

children() は対象のノードのみの子ノードを探索しますが、allSubChildren() はその子ノードの子ノードまで探索します。

mceclip1.png

mceclip7.pngmceclip8.png

オプション:top_down

デフォルトではこのオプションは True になっています。

True の場合、この関数はタプル内を [親ノード, その子ノード, 親ノード, 子ノード, ......] と配置します。

False の場合、下から上に検索して、子ノードを親ノードの前に配置します。

mceclip9.png

オプション:recurse_in_locked_nodes

デフォルトではこのオプションは True になっています。

Trueの場合、この関数は、ロックされた子ノードの中を再帰検索して、 戻り値のタプルの中に、そのロックされた子ノードの子を含めます。すなわち、対象の子ノードがロック状態かどうかに関わらずすべての子ノードの中を探索します。

ノードがロック状態であるかどうかは isEditable() メソッドが False を返すかどうかで判別できます。

Falseの場合、この関数は、ロックされた子ノードの中を再帰検索しないので、戻り値のタプルの中には、そのロックされた子ノードの子は含まれません(もちろん、ロックされた子ノードはそのタプルに含まれます)。

例えば、recurse_in_locked_nodes=True で、hou.node("/obj") の中に Simple Female ノード(ロックされたノード、すなわち isEditable() → False)があった場合、 hou.node("/obj").allSubChildren() が返すタプルには、Simple Female ノードとその子ノードが含まれます。

recurse_in_locked_nodes=False の場合、その戻り値のタプルには Simple Female ノードが含まれますが、その子ノードは含まれません。

mceclip10.png

また、このメソッドが返すのはタプルであって、ジェネレータではありません。

戻り値を通じてループしている間に、ノードを削除したり作成しても安全であることを意味します。

mceclip13.png

mceclip11.pngmceclip12.png

問題が解決しない場合は、Born Digital サポートまでお問い合わせ下さい。

※ 問い合わせ対応はBorn Digitalより製品をご購入頂きましたお客様のみのサービスとなります。ご了承下さい。
サポート問い合わせ