概要
Viewer State のサンプルコード Add Point と、マウスポインタとジオメトリの交差判定を使うことで HDA 入力ジオメトリ上にポイントを配置することができます。
今回は入力ジオメトリ上に配置した box に box を重ねる処理をします。
手順
- Viewer State Code Generator で Add Point のサンプルコードを作り、機能する状態にする
- HDA の入力受けを 1 にして、ノードネットワークを作る
- HDA と同じ階層に box ノード(と視認性向上のために Color ノード)を配置する
- HDA 内ノードネットワークを作る
- Viewer State に処理を追加する
- イニシャライザに交差判定用のジオメトリ変数 _geometry を追加
- onEnter メソッドに GEO_MERGED のジオメトリ情報を格納する
-
- onMouseEvent を書き換える
-
- Accept で保存して Viewer State を実行する
クリックで作ったジオメトリを交差判定の対象にして box を重ねられるようになりました。
box 同士が埋まらないようにする
- HDA 内のノードネットワークに matchsize を追加する
- パラメータに フォルダを作り、matchsize の Justify x, y, z をコピーする
- Viewer State に処理を追加する
- マウスポインタと交差するプリミティブの法線情報を取得し、六面全てと比較しています。これは copy to points でコピーする box ノードの向きが変更されていない場合にのみ有効で、これが sphere などである場合は別の考え方が必要です。
- Accept で保存して Viewer State を実行する
box を重ねることができました。横に重ねる場合は Justify が切り替わるのがわかります。
この Viewer State の書き方はあくまで一例であり、他のアプローチの仕方や考え方、より簡単な書き方は存在します。ご了承ください。