今回はkangaroo2を使用して上画像の様なリボンを作成していきたいと思います。pinterestなどで画像を検索していると天井の装飾などでたまに見かけることがあります。是非チャレンジしてみてください。こちらのチュートリアルは動画化しておりますので、動画の方がよい方は以下のリンクからどうぞ!また、kangaroo2をインストールしていない方は、こちらからインストールしていただければと思います。
目次
概要

上画像がプログラムの全体像となっております。
各ブロックごとに説明していきたいと思います。
ベースとなるオブジェクト作成(Rhinoceros)


- まずRhinocerosでベースとなるオブジェクトを作成します。CircleコマンドでXY平面に半径250mmの円を作成し、PlanarSrfコマンドで円サーフェイスを作成します。
- 作成した円サーフェイスをRebuildコマンドで制御点を増やします。制御点数はu,v = 3,3 次数はu,v = 2,2とし、中心に制御点を設けます。


- F10を押す、または「編集⇒制御点⇒制御点表示オン」から制御点を表示します。
- 中心の制御点をZ方向に引張り円サーフェイスを変形させます。画像の様にガムボール(3方向の矢印)が表示されていない人は、画面下部のガムボール欄を選択して表示させてください。

- 変形させた円サーフェイスの下部に、更に円を作成します。大きさは、上から見た時に、変形させた円サーフェイス内に納まるサイズとしてください。これでRhinoceros上での準備は完了です。
サーフェイスに円を投影

- ここからはGrasshopperでの作業となります。Curveコンポーネントに先ほど最後に作成した円を、Surfaceコンポーネントに変形させたサーフェイスをセットします。
- Pull Curveコンポーネントで円をサーフェイスに投影します。上画像の様に変形したサーフェイスに円が投影されていればOKです。
投影した円を分割

- Divide Curveコンポーネントで投影した円を分割します。今回は500分割しています。
- Shift Listコンポーネントで分割点を1つずらします。
- Lineコンポーネントで分割点同士を直線で結びます。これで投影した円が500本の直線に分割されました。
サーフェイスのメッシュ化と点の拘束

- Mesh Brepコンポーネントでサーフェイスをメッシュ化します。
- End Pointsコンポーネントで先ほど作成した直線の終点を取得します。
- OnMeshコンポーネントで取得した終点をメッシュ状に拘束します。
GoalObjectの設定(Length)

- Lineコンポーネントで分割した直線を取得しておきます。
- Kangaroo2のLengthコンポーネントに取得した直線を接続します。
- Lengthコンポーネントで直線の長さを取得します。
- Multiplicationコンポーネントで取得した直線の長さを2倍し、Kangaroo2のLengthコンポーネントに接続します。Strengthはデフォルトの10としておきます。これで直線が特定の長さになるように変形するようになりました。
GoalObjectの設定(Collider)

- 変形したオブジェクト同士の衝突判定を加えていきます。Colliderコンポーネントを用意し、分割した直線を接続します。Radiiに衝突半径を入力します。今回は10.0を入力しています。Strengthには9を入力しています。
GoalObjectの設定(Angle)

- Shift Listコンポーネントで直線のリストを1つずらします。
- Angleコンポーネントで分割した直線の隣り合う直線同士の角度を変形させていきます。RestAngleに0度を指定します。
- Strengthには1100を指定していきます。
Solverに接続

- Solverコンポーネントを用意し、OnMeshコンポーネント・Lengthコンポーネント・Colliderコンポーネント・Angleコンポーネントを接続します。入力端子はFlattenしておきます。
- 入力端子ResetにButtonコンポーネントを、入力端子OnにBoolean Toggleコンポーネントを接続します。
- Nurbs Curveコンポーネントで出力端子Vから得られる変形した点のリストをNurbs Curveで曲線化しまます。PeriodicをInvertして閉じた曲線とします。
- Boolean ToggleコンポーネントをTrueにすると演算が開始します。Resetボタンを押すと演算がリセットされます。
曲線に高さを持たせリボンの作成

- Boolean ToggleコンポーネントをFalseにして演算を止めます。
- Projectコンポーネントで、Nurbs Curveコンポーネントから取得できる曲線を原点を(0,0,-10)とするXY平面に投影します。
- Ruled Surfaceコンポーネントで曲線同士の間にサーフェイスを張ります。
- Custom PreviewコンポーネントとColour Swatchコンポーネントで色付けして完成です。
完成

以上になります!変数を変えていろんな形状を試してみてください。kangaroo2に関しては私もまだまだ分からないことがたくさんありますが、使いこなしてこちらで共有できればと思っております。
【参考文献】
- Grasshopper Docs : https://grasshopperdocs.com/
- AplliCraft : https://www.applicraft.com/