今回は上画像の様な、パビリオンを作成していきたいと思います。Sin波を使用した簡単な例となっております。是非実装してみてください。こちらのチュートリアルは動画化しているので、動画の方がよい方は以下のリンクからどうぞ!
目次
概要

上画像がプログラムの全体像となっております。
各ブロックごとに説明していこうと思います。
基準円の作成

- 基準となる円を作成します。Circleコンポーネントで半径10mの円を作成します。
- Divide Curveコンポーネントで作成した円を分割します。今回は10分割しています。
- List Itemコンポーネントで円の分割点の最初の点を取得します。
- Insert Itemsコンポーネントで取得した最初の点を、リストの一番最後に挿入します。
Sin波の作成

- パビリオンを波打たせるためのSin波を作成します。Lengthコンポーネントで円の長さを取得します。
- 先ほど使用したDivide Curveコンポーネントから取得できる、円上での位置を表すt値のリストに、Insert Itemsコンポーネントでリストの最後に円の長さを挿入します。
- Remap Numbersコンポーネントで作成したt値のリストを角度のリストにリマップします。Boundsコンポーネントでリストの最大値から最小値までのドメインを取得して、入力端子S(Source)に接続します。
- Remap Numbersコンポーネントの入力端子T(Target)は-360の倍数を入力します。今回は3倍の -1080を入力します。
- Radiunsコンポーネントでリマップされた角度のリストを弧度法に直します。
- Sineコンポーネントで弧度法に直したリストをもとにSin波を生成します。
- Multiplicationコンポーネントで取得したSin波の振幅を大きくします。今回は2500を掛けています。
- Unit ZコンポーネントでZ方向のベクトルに変換します。
分割点をSin波で移動

- Moveコンポーネントで最初に作成した、分割点のリストを先ほど作成したZ方向のベクトルで移動させます。
- Interpolateコンポーネントで移動させた点を通る曲線を作成します。入力端子PeriodicをInvertして閉じた曲線とします。
- Scaleコンポーネントで作成した曲線を縮小して複製します。今回は0.2倍しています。
- Divide Curveコンポーネントで縮小前と後の曲線をそれぞれ分割します。今回は100分割しています。縮小した方の分割点のリストはGraftしておきます。
Pavilion先端位置を決める

- 先ほどDivide Curveコンポーネントで分割して取得した、縮小前の曲線の分割点のリストをMoveコンポーネントでZ方向に移動させます。今回は2000mm移動させています。出力端子はGraftします。この点がPavilionの先端になります。
- Mergeコンポーネントで移動させた分割点のリストと、先ほど作成した曲線の縮小後の分割点のリストを結合します。
Pavilionの足元位置を決める

- Pointコンポーネントで縮小後の分割点のリストを取得します。
- Projectコンポーネントで取得した分割点のリストを投影します。今回は投影先に(0,0,-3000)を原点としたXY平面としています。この位置がPavilionの足元になります。
Pavilionのベースとなる曲線を作成

- Mergeコンポーネントで分割点のリストと投影した分割点のリストを結合します。
- Nurbs Curveコンポーネントで結合したリストを使用し、各点を通るNurbs Curveを生成します。今回は入力端子D(Curve Degree)には2を入力しています。
Pavilionの外形となるサーフェイス生成

- Offset Curveコンポーネントで先ほど作成したNurbs Curveをオフセットします。今回はオフセット距離を300mmとしています。
- Ruled Surfaceコンポーネントでオフセット前と後のNurbs Curveの間にサーフェイスと張ります。
- Relative Itemコンポーネントで前項で作成したNurbs Curveのリストのパスを1つずらします。入力端子TはSimplifyし、入力端子Oには{1}を入力します。入力端子WpはInvertしておきます。
- Ruled Surfaceコンポーネントで先ほどオフセットしたNurbs CurveとRelativeコンポーネントでパスと1つずらしたNurbs Curveの間にサーフェイスを張ります。
- Mergeコンポーネントで作成したサーフェイスをまとめます。これで完成です。
完成



以上になります!Sin波を使用した簡単な例となってます。是非挑戦してみてください!
【参考文献】
- Grasshopper Docs : http://grasshopperdocs.com/