今回は、上画像の様な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 : https://grasshopperdocs.com/