1. saty

    No comment

    saty
Changes in body
Source | HTML | Preview
@@ -1,63 +1,85 @@
好きなノードの1つである Switch について書いてみます。
Switchは処理が分岐できるので、ツールを作る時によくお世話になります。
(環境)Houdini 17.0.352 / Windows 10
-Switch の基本としては、Select Input のところで入力ノードを切り替えることができます。
+Switch の基本としては、**Select Input** のところで入力ノードを切り替えることができます。
上矢印で入力順を変更することもできます。
この Select Input には数字が渡されていれば良いので、エクスプレッションを使ってあの手この手で入力を切り替えることになります。
-余談ですが、Switch に限らず Shift+R キーで入力順を変更もできるようです。
+余談ですが、Switch に限らず **Shift+R** キーで入力順を変更もできるようです。
##CheckBox
まずGeometryノードのインターフェイスを編集します。
-右クリックから Edit Parameter Interface を選びます。
+右クリックから **Edit Parameter Interface** を選びます。
-Toggle パラメータを選んでインターフェイスに追加します。
-名前はcheckBoxにしてみました。見やすいよう他はInvisibleにしておきます。
-Applyするとチェックボックスができました
+**Toggle** パラメータを選んでインターフェイスに追加します。
+名前は `checkBox` にしてみました。見やすいよう他は Invisible にしておきます。
+Applyするとチェックボックスができま
-このチェックボックスの上で右クリックから Copy Parameter をして
-Switch の Select Input の上で右クリックから Paste Relative References をすると
+このチェックボックスの上で右クリックから **Copy Parameter** をして
+Switch の Select Input の上で右クリックから **Paste Relative References** をすると
チェックの有無のブール値(真=1/偽=0)を受けて Input が切り替わる Switch ができました。
##Radio Button
-ラジオボタン
-Folder:Radio Buttons
-1つめに名前をつければよい `Scatterfolders` 、後は自動的に連番になる
-switchノードには
-`ch("../Scatterfolders1")`
-..."1" is first element in the set.
-デフォルトの `folder1` だと分かりにくい
-`radio`としたうえで
-```ch("../radio1")```
-
-##Random CopyPaste
-`fit01(rand($PT),0,6)`
-floor関数はいらないかも
+ラジオボタンのインターフェイスを作ります。
+チェックボックスはON/OFFの二値ですが、ラジオボタンは複数の選択肢から1つを選びます。
-##Input 数に応じた Random CopyPaste
+先程と同様に、右クリックから **Edit Parameter Interface** を選びます。
+**Folder** を追加し、**Folder Type** を **Radio Buttons** にします。
+**Name** は任意ですが `radio` にしてみます。
+この Folder がラジオボタンになりますので、選択肢の数だけ増やします。
+2つ目以降の Folder は Name が勝手に連番になり、グレーアウトして編集できなくなります。セットで扱われる、ということのようです。
+
+switch ノードの Select Input には
+`ch("../radio1")`
+と、Folder の Name の末尾に「**1**」をつけたものを記入します。
+フォーラムによると
+
+>"1" is first element in the set.
+
+とのことで、フォルダセットの1つめ、という事のようです。
+ラジオボタンで Input が切り替わる Switch ができました。
+
+##Random CopyStamp
+
+**Copy Stamp** ノードで複製するモデルを、Switch でランダムに切り替える方法です。
+こちらはチュートリアルなども多いので、簡単に触れます。
+
+Copy Stamp ノードの Stamp タブで、**Stamp Inputs** にチェックを入れて有効にし、
+下部の欄に変数名とエクスプレッションを入れます。
+この例では下記のように入れました。
+`fit01(rand(@ptnum),0,2)`
+
+分解すると、
+`rand(@ptnum)`で、ランダムな0~1の少数点の値を生成します。ランダムシードは `(@ptnum)` の部分で、「各point番号」ごとにランダムな値が入ったことになります。
+`fit01(元の値,新しい範囲の最小値,新しい範囲の最大値)`で、0~1の値を、0~2に拡大しています。
+Inputの数が3つなので、0,1,2 の3つの値ごとにモデルが切り替わるようになりました。
+
+綺麗に整数値にするにはfloor関数等を加えると良いのかもですが、switchノードは勝手に丸めてくれるみたいで便利です。
+
+##Input 数に応じた Random CopyStamp
`floor(fit01(rand(@ptnum),0,opninputs("../switch1")))`
##Input の有無に応じた Switch
```opinputpath("../null1", 0)```
指定した入力に接続されたノードのフルパスを返します。
null1にインプットがあればそのフルパスを返し、無かったら何も返さない
```strcmp(s1, s2)```
s1とs2が同じなら0を返します。
(入力なし,"")の比較では同じなので「0」を返す
(フルパス,"")の比較ではs1のほうが後ろに来るので「1」を返す
if expression function
```if(expression, true_value, false_value)```
最初の引数の真理値に応じて2番目または3番目の引数の値を返します。
if(比較の結果が1)…true
if(比較の結果が0)…false
フルパスが入っているならインプット1、無いならインプット0を使う
```
aaa
```