こんにちは、初めてのアドカレ参加、宜しくお願いします。
今回は好きなノードの1つである Switch について書いてみます。
Switch は処理が分岐できるので、ツールのUIを作る時によくお世話になります。
(作例の環境)Houdini 17.0.352 / Windows 10
Switch の基本は、Select Input のところで入力ノードを切り替えます。
「0」が1つめの入力、「1」が2つめの入力です。
青い矢印ボタンで入力順を変更することもできます。
この Select Input の部分には最終的に数字が渡されていれば良いので、エクスプレッションを使った様々な工夫で切り替えをコントロールできます。
余談ですが、Switch に限らず Shift+R キーでも入力順を変更できるようです。
##CheckBox
まずはチェックボックスのON/OFFで処理を分岐させる方法です。
Switch の入っている Geometryノードのインターフェイスを編集します。
右クリックから Edit Parameter Interface を選びます。
左からToggle パラメータを選んでインターフェイスに追加します。
名前は checkBox
にしてみました。見やすいよう他は Invisible にしておきます。
Applyするとチェックボックスができます。
このチェックボックスの上で右クリックから Copy Parameter をして、
Switch の Select Input の上で右クリックから Paste Relative References をすると
チェックボックスはブール値(真=1/偽=0)を返すので、Select Input がその値を参照し、0と1が切り替わる形になります。
チェックボックスと連動した Switch ができました。簡単!
##Radio Button
チェックボックスはON/OFFの二択ですが、ラジオボタンは複数の選択肢から1つを選びます。
先程と同様に、右クリックから Edit Parameter Interface を選びます。
Folder を追加し、Folder Type を Radio Buttons にします。
Name は任意ですが radio
にしてみます。
選択肢の数だけ複製します。
2つ目以降の Folder は Name が勝手に連番になり、グレーアウトして編集できなくなります。セットで扱われる、ということのようです。
switch ノードの Select Input には
ch("../radio1")
と、Folder の Name の末尾に「1」をつけたものを記入します。
これはフォーラムによると(要約)
"1" is first element in the set.
とのことで、フォルダセットの1つめ、という事のようです。
ラジオボタンで Input が切り替わる Switch ができました。
##Input の有無を判定する
インプットがある場合はそのインプットを処理し、無い場合は元の流れのまま、というケースです。
例えばHeightField関連ノードで「マスク入力がある場合はそれを使用する」などで使われています。
ちょっと簡略化しましたが、上図のようなネットワークになっており、null1(=親ノードのマスク用input)に入力がある場合は、1に切り替わります。
Select Input にはこのようなエクスプレッションが入っています。
if(strcmp(opinputpath("../null1", 0), ""), 1, 0)
分解すると、
opinputpath(ノード, インプット番号)
指定ノードの指定したインプットに接続されたノードのフルパスを返します。
この場合null1にインプットがあればその「フルパス」を返し、無かったら空「""」が返されます。
strcmp(文字列1, 文字列2)
文字列を比較し、ASCII順でどちらが前か、あるいは同じか、を数字で返します。
「フルパス」と「""」の比較ではフルパスのほうが後ろに来るので「1」を返します。
「""」と「""」の比較では同じなので「0」を返します。
if(expression, 真の時の値, 偽の時の値)
最初の「expression」の真偽値に応じて、2番目または3番目の値を返します。
ここで先程の strcmp の結果をブール値として扱っています。
strcmpの結果が「1」の場合、「真の時の値」が使われます。(この例では「1」が使われる)
strcmpの結果が「0」の場合、「偽の時の値」が使われます。(この例では「0」が使われる)
これで、入力があれば Input 1、無いなら Input 0 に切り替わる Switch ができました。
以上、簡単ですが何かのお役に立てば幸いです。
シーンファイルもあげておきます。
https://www.dropbox.com/s/4vx9tkojcipwxmn/switch_UI.hipnc?dl=0
ありがとうございました!