hou.Node.children
特定のノードの子ノードを調べる際は children() を使います。
対象のノードが子ノードを含めるネットワークである場合、そのノードの子ノードのタプルを返します。子ノードを持たない場合、空のタプルを返します。
対象のノードが子ノードを含めるネットワークでない場合、空のタプルを返します。
返り値が空のタプルの場合、それだけでは対象のノードが子ノードを持たないのかネットワークでないのか判別できません。そのときは isNetwork() を使い、そのノードがネットワークかどうかを判別できます。
タプルの要素の順番は、ユーザーがノードを定義した順番と同じです。
名前に準拠しないため、ノード名を変えてもその順番は変わりません。以下ではノードの名前を sphere1 > sphere6, sphere2 > sphere5, sphere3 > sphere4 に変更していますが、タプルの要素は名前が変わっただけで順番は変わりません。
hou.Node.allSubChildren
children() は対象のノードのみの子ノードを探索しますが、allSubChildren() はその子ノードの子ノードまで探索します。
オプション:top_down
デフォルトではこのオプションは True になっています。
True の場合、この関数はタプル内を [親ノード, その子ノード, 親ノード, 子ノード, ......] と配置します。
False の場合、下から上に検索して、子ノードを親ノードの前に配置します。
オプション: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 ノードが含まれますが、その子ノードは含まれません。
また、このメソッドが返すのはタプルであって、ジェネレータではありません。
戻り値を通じてループしている間に、ノードを削除したり作成しても安全であることを意味します。