今回は、上画像の様な Voronoi 分割を使用したトンネルを作成したいと思います。難易度的も初級程度なので、是非挑戦してみてください。
こちら動画化もしておりますので、動画の方がよいかたは以下のリンクからご覧ください。
概要
上画像がプログラムの全体像となっております。大まかな流れは以下です。
- トンネルの断面となる基準円を作成
- トンネルの基準サーフェイスを作成
- サーフェイスを Voronoi 分割
- Voronoi 分割をポリライン化
- ポリラインをサーフェイス化
- オブジェクトを拡大
- 完成
トンネルの断面となる基準円を作成
- トンネルの両端部に円を作成します。「Construct Point コンポーネント」・「XZ Plane コンポーネント」で、(0,0,0)、(0,60000,0)を中心とした XZ 平面をそれぞれ作成します。
- 「Circle コンポーネント」で作成した XZ 平面に円を作成します。上画像では両方とも半径 13m としてます。
- 「Line コンポーネント」で作成した XZ 平面をの原点をつなぐ直線を作成します。
- 「Evaluate Curve コンポーネント」に作成した Line を接続し、入力端子を「Reparametrized」します。入力端子tに 0.5 を入力することで、Line の中点を取得します。
- 「XZ Plane コンポーネント」を接続し、取得した Line の中点を原点とした XZ 平面を作成します。
- 「Circle コンポーネント」でトンネル中間部の断面を作成します。上画像では半径 8m としてます。
- 「Merge コンポーネント」で作成した 3 つの円のリストを 1 つのデータに結合します。
トンネルの基準サーフェイスを作成
- 「Sweep1 コンポーネント」で作成した 3 つの円を断面としたサーフェイスを作成します。入力端子 R(Rail)に先ほど作成した直線を入力し、入力端子 S(Sections)に先ほど「Merge コンポーネント」で作成した円のリストを接続します。
- 「Brep | Plane コンポーネント」と「XY Plane コンポーネント」で、作成したサーフェイスと XY 平面との交線を取得します。
- 「Surface Split コンポーネント」でサーフェイスを取得した交線で切断します。
- 「List Item コンポーネント」の 0 番目を取得し、上画像の緑色のようなサーフェイスが取得できていれば OK です。
サーフェイスを Voronoi 分割
- 「Bounding Box コンポーネント」で作成したトンネルの基準サーフェイスを囲うような直方体を作成します。
- 「Populate 3D コンポーネント」で直方体内部にランダムに点を作成します。上画像では 600 点作成しています。
- 「Voronoi 3D コンポーネント」に作成した点を入力し Voronoi 分割します。
- 「Brep | Brep コンポーネント」でトンネルの基準サーフェイスと Voronoi 分割との交線を取得します。上画像のような Curves が取得できていれば OK です。
Voronoi 分割をポリライン化
- 「Discontinuity コンポーネント」で取得した Curves の頂点を取得します。
- 「Discontinuity コンポーネント」で取得した頂点のデータ内に空のブランチが含まれてしまっているので、「Clean Tree コンポーネント」空のブランチを消去します。入力端子 E の上で右クリックを押し「Invert」します。
- 「Polyline コンポーネント」で取得した頂点をつなぐポリラインを作成します。入力端子 C の上で右クリックを押し「Invert」することで閉じたポリラインが作成されます。
ポリラインをサーフェイス化
- 「Offset Curve Loose コンポーネント」で取得したポリラインをオフセットします。Voronoi 分割の各セルの内部側にオフセットしたいので、負の値で入力します。上画像では-40 を入力しています。
- 「Ruled Surface コンポーネント」でオフセットしたラインとの間にサーフェイスを張ります。拡大してみると上画像のようにサーフェイスが張られているのがわかります。
オブジェクトを拡大
- 作成したオブジェクトを拡大し、拡大前と後をつないでいきます。
- 「Curve Middle コンポーネント」で一番最初に「Line コンポーネント」で作成した直線の中点を取得します。「Point コンポーネント」で近くまで持ってきましょう。
- 「Curves コンポーネント」を「Polyline コンポーネント」の出力端子につなぎます。
- 「Scale コンポーネント」で拡大します。拡大中心を先ほど取得したラインの中点とし、倍率は上画像では 1.10 倍としました。
- 「Ruled Surface コンポーネント」で拡大前と後の間にサーフェイスを張ります。
- 続いて、前項でポリラインをオフセットしサーフェイスを張ったかと思います。そのサーフェイスを「Scale コンポーネント」で同様に拡大します。
- 続いて、前項でオフセットしたポリライン自体を拡大します。「Offset Curve Loose コンポーネント」の出力端子を「Scale コンポーネント」に接続し同様に拡大します。
- 「Ruled Surface コンポーネント」で拡大前と後とでサーフェイスを張ります。
- 「Merge コンポーネント」で作成したサーフェイスをまとめます。
完成
以上で完成です!パラメーターを変えていろんな形状を試してみてください!
【参考文献】
Grasshopper Docs :