セレクターを作成して、それをSOPノードタイプに追加するには、hou.SopNodeType.addSelectorを使用します。 ユーザがビューア内で新しいノードタイプのインスタンスを作成した時、Houdiniは、順々にそれらのセレクターすべてを呼び出します。 各セレクターがユーザにジオメトリを選択するように促します。 すべてのセレクターが呼び出された時、Houdiniは新しいノードを作成し、各セレクターがその入力ノードを繋げて、 ノード上のグループパラメータにその選択したものを満たします。
メソッド ¶
name()
→ str
このセレクターの名前を返します。この名前は、このセレクターが取り付けられているノードタイプ内では固有です。
selectorType()
→ str
使用するセレクターのタイプの名前を返します。セレクターによって挙動が異なります。 例えば、“prims”はプリミティブだけを選択し、cookie SOPなどでそれが使用されます。 “points”はポイントだけを選択し、Point SOPなどのSOPで使用されます。 “everything”はどのジオメトリも選択し、“xform”や“blast”などのSOPで使用されます。
利用可能なセレクタータイプをすべて返すサンプルコードは、hou.SopNodeType.selectorsを参照してください。
prompt()
→ str
ユーザに選択を促すためにビューアの下に表示させる文字列。
primitiveTypes()
→ tuple
of hou.primType enum values
許可するプリミティブタイプを指定するためのhou.primType列挙値のシーケンスを返します。
hou.SopNodeType.addSelectorのprimitive_types
パラメータに対して空っぽのシーケンスを渡してから、新しく作成されたセレクターに対してこのメソッドを
コールすると、このメソッドは、すべてのプリミティブタイプのタプルを返します。
groupParmName()
→ str
グループフィールドを含んだSOPノードパラメータの名前を返します。 セレクターは、このパラメータに、ビューア内でユーザが選択したポイント、プリミティブ、エッジなどを意味した文字列を設定します。 これは、通常では“group”という名前です。
groupTypeParmName()
→ str
ジオメトリタイプのメニューを含んだSOPノードパラメータの名前を返します。 セレクターが複数のジオメトリタイプ(例えば、ポイントやプリミティブ)を選択できる場合、 セレクターは、ユーザが選択したジオメトリのタイプに合うようにこのパラメータを設定します。 例えば、transform SOPには、Groupパラメータ内の文字列の解釈の方法を伝えるためのGroup Typeパラメータがあります。 そのようなセレクターに関しては、そのパラメータは通常では“grouptype”という名前です。 複数のジオメトリタイプを許可しないセレクターに関しては、このパラメータは通常では“”です。
inputIndex()
→ int
セレクターが入力SOPと接続するべきSOPノードの入力コネクタのインデックスを返します。 例えば、cookie SOPには2つの入力コネクタがあり、それぞれの入力コネクタに対して1つのセレクターを持ちます。
inputRequired()
→ bool
この入力が必須なのか任意なのかどうか返します。ユーザが何もジオメトリを選択せず、入力が不要であれば、セレクターは何も入力コネクタに接続しません。
allowDragging()
→ bool
シングルマウスクリックでユーザがジオメトリを選択してそのハンドルを操作開始できるかどうか返します。 例えば、transform SOPでは、ジオメトリを選択して、それをすぐにドラッグすることができます。 ジオメトリをドラッグすれば、強制的にセレクターをすぐに終わらせ、そのセレクターが入力を接続し、そのグループパラメータが設定されます。 その後のマウスの動きは、パラメータ値の変更でジオメトリを移動させるハンドルに渡ります。
emptyStringSelectsAll()
→ bool
ユーザがすべてのジオメトリを選択する場合に、グループパラメータに空っぽの文字列を使用するかどうか返します。
Falseなら、ユーザがすべてのジオメトリを選択する時には、グループパラメータにアスタリスク(*
)を配置します。
ほとんどのSOPでは、空っぽの文字列を使用しています。
extraInfo()
→ str
追加設定を含んだオプションの追加情報文字列を返します。
geometryTypes() ->
tuple
of hou.geometryType enum values
hou.geometryType列挙値のタプルを返します。 このタプルでは、セレクターが許可するジオメトリ要素(例えば、ポイント、プリミティブ、エッジなど)を記述しています。 このリストは、セレクタータイプのプロパティで、新しくセレクターを作成する時にはそれを指定することができません。 その代わりに、目的のジオメトリタイプでセレクタータイプを選択しなければなりません。
すべてのセレクタータイプのリストを返す関数に関しては、hou.SopNodeType.selectorsを参照してください。 以下の関数は、特定のセレクタータイプに対してジオメトリタイプを返します。
def geometryTypesForSelectorType(selector_type): '''セレクタータイプ名を指定すると、それが選択するジオメトリタイプのタプルを返します。''' # 最初に、このセレクターを使用しているノードタイプを検索します。 for node_type in hou.sopNodeTypeCategory().nodeTypes().values(): # Skip manager nodes, like shopnets, ropnets, etc. if not isinstance(node_type, hou.SopNodeType): continue for selector in node_type.selectors(): if selector_type == selector.selectorType(): return selector.geometryTypes() # セレクタータイプ名が無効です。 raise hou.OperationFailed("Invalid selector type")
groupTypeParmValues()
→ tuple
of int
ジオメトリタイプをジオメトリタイプパラメータメニューのインデックスにマッピングしたインデックスのタプルを返します。
セレクターが順番通りかどうかが、セレクタータイプのプロパティで、 新しくセレクターを作成する時は、それを指定することができません。 その代わりに、適切なセレクタータイプを選択しなければなりません。 例えば、“everything”セレクターは、プリミティブ、プリミティブグループ、ポイント、ポイントグループ、エッジ、ブレークポイントを選択することができます。 これは、選択のタイプに合うようにグループタイプメニューパラメータを設定し、このメニューには“Guess from Group”, “Breakpoints”, “Edges”, “Points”, “Primitives”のエントリーがなければなりません。 “everything”セレクターに関しては、このメソッドは、(4, 4, 3, 3, 2, 1)を返します。 これは、ジオメトリエレメントタイプをメニュー内の0ベースのエントリーにマッピングします。 例えば、ユーザがエッジを選択すると、そのセレクターは、5番目のエレメント(2)を検索し、そのメニューパラメータをインデックス2(“Edges”)のアイテムに設定します。
intのタプルの長さは、len(self.geometryTypes)
と同じです。
このセレクターをメニューパラメータと一緒に動作させるつもりがないなら、そのタプル内の各値は-1です。
hou.Selector.geometryTypesも参照してください。
ordered()
→ bool
このセレクターが、ユーザがジオメトリを選択した順番を保持するかどうか返します。
例えば、セレクターがポイント用で、ユーザがポイント1,0,2をクリックした場合、
その順番で、順番通りのセレクターがSOPのグループパラメータを"1 0 2"
に設定するのに対して、
順番通りでないセレクターは"0-2"
に設定します。
グループセレクターの順番に意味のあるSOPに関しては、順番通りのセレクターを使用してください。
セレクターが順番通りかどうかが、セレクタータイプのプロパティで、 新しくセレクターを作成する時は、それを指定することができません。 その代わりに、適切なセレクタータイプを選択しなければなりません。 例えば、“prims”は順番通りでないセレクタータイプですが、“ordered_prims”は順番通りです。 セレクターが順番通りかどうか判断するのに適用可能な関数に関しては、hou.Selector.geometryTypesを参照してください。 すべてのセレクタータイプをリストする関数に関しては、hou.SopNodeType.selectorsを参照してください。