【Mac版】Grashopper基礎【コンポーネントを使う】

## 始めに
この記事ではGrashopperの様々あるコンポーネントを、Grashopperを始めたばかりの私が最初に触れたものから順に例として紹介します。この記事ではMac版のGrashopperを使用しております。

以前[Grasshopper 超基礎【初めてのGrasshopper】](https://qiita.com/suzukishohei/items/99a966b99d6190a0a205)という記事を書きました。この記事はその続編という形となっています。
Grashopperを起動するところから始めるというコンセプトで書いていますので、超基本的なことから始めたい方は、ぜひ前の記事もご参考ください。

## さまざまなコンポーネント
それでは、いくつか例を挙げてコンポーネントの種類とそれぞれの特徴を見てみましょう。

### Rectangle
「Rectangle」は最も基本的なコンポーネントの１つです。その名の通り四角形を生成します。
画面をダブルクリックし、「Enter a search keyword」に「Rectangle」と入力します。（Rectangleには同名の2種類のコンポーネントがありますが、今回はこのうちのオレンジ色の四角形が見えるアイコンの方を選びます）

![Rectangle.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229645/e77a1ac0-ccc5-851c-0713-0471bdd3e2ec.png)

Rectangleコンポーネントを出してみると、左手に「P, X, Y, R」とあり、右手には「R, L」とあります。
それぞれの意味は下記の通りです。

右手
- P : 原点の座標
- X : X軸の値
- Y : Y軸の値
- R : フィレット角（角丸の半径）

左手
- R : 右手からの入力の結果として生成された四角形
- L : 入力の結果として生成された四角形の４辺の長さ


では使ってみましょう。再び「Enter a search keyword」から今度は適当な数字を入力して２つの「Number slider」を出してみます。
（Number sliderについては[こちら](https://qiita.com/suzukishohei/items/99a966b99d6190a0a205#number-slider)をご参考ください）

まず１つ目の「Number slider」は「X,Y」に同時に繋ぎます。同じ値が「X,Y」に入るのでこの「Rectangle」は正方形になるはずです。
もう1つは「R」に接続します。これはフィレットと言い、正方形の角の丸みを操作出来ます。

Rhinocerosの画面と並べ、実際に扱ってみるとこのようになります。
![ezgif-6-05cb5fa5f3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229645/97c9c2db-38e7-f26a-e4dd-c1d0a17040f1.gif)

Rhinoceros単体では、基本的にはこのように一度引いた線を後から柔軟に変更することは出来ませんが、「Rectangle+Number slider」というシンプルな組み合わせを作ることでこれが実現できます。

### Boundary Surface
「Boundary surface」はサーフェスを生成します。
![boundrySurface.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229645/3c678727-0246-e34a-7483-83bdef0a2976.png)

非常にシンプルで、左手から閉じた線の入力を受付けてサーフェスを生成します。

先ほど作成したRectangleコンポーネントの「R」を「E」に接続します。するとRhinocerosの画面上でサーフェイスが生成されます。

![ezgif-6-5ca813bfb7.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229645/a60c56b8-acc1-3db7-e3fe-de9b19c3bc31.gif)

### Divide Surface
「Divide Surface」は、サーフェス上に均等に配列された複数の点を生成します。
![divideSurface.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229645/68cfdd23-aeb4-d238-9a88-f278a12e4bc4.png)

先ほどのBoundary Surfaceコンポーネントに続けて繋げてみましょう。
「Boundary Surface」右手の「S」から「Divide Surface」左手の「S」に繋げます。このSはどちらもサーフェイスを意味しています。

![ezgif-1-ed7d78bb98.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229645/0e16fc44-b9e6-b8b7-0d32-d668d0bca817.gif)

すると、縦横に9×9、合計81個の点が均等に配置されました。

Divide Surfaceコンポーネントを見てみると、左手に「S, U, V」とあります。
「U」はサーフェス上の横方向の軸。「V」は縦方向の軸を表します。デフォルトの状態ではそれぞれ「10」が入力されています。

生成された点が縦横それぞれ9個だったということから分かるように、サーフェスの両端の辺を含む点との均等に空いた「間隔」が10個あるということを示しています。点の個数を示すものではないということに注意が必要です。

それでは引き続き、Divide Surfaceコンポーネントの「U,V」に、再び新しく作成した「Number Slider」を接続してみましょう。

![divideSurface2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229645/d71bc134-00c1-bc10-b7bc-98296c660dd9.png)

すると、スライダーを操作するとこのように点の数を柔軟に変更することが出来るようになります。
![ezgif-1-64411094b4.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229645/e450ce72-3701-7c60-6c05-a1cf09817dea.gif)

### Populate 2D
「Divide Surface」が均等に整列した点を生成するのに対して、「Populate 2D」はランダムにレイアウトされた点を生成することが出来ます。

![populate2d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229645/274d1f00-4266-1ba4-21c9-c4946fd6d8fc.png)

「Populate 2D」を出すと、デフォルトでは20×10の長方形の中に無数の点が表示されています。

続けて、Populate 2Dコンポーネントの左手の「R」からRectangleコンポーネントの「R」に接続します。（Divide Surfaceコンポーネントはここでは一旦削除します）

すると、「Rectangle」の範囲にバラバラに点が配置されました。

![ezgif-3-b1e9a2c8f9.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229645/878db3f7-753e-df79-d3c4-d898e1e09bbf.gif)

Populate 2Dコンポーネントに再び戻りましょう。コンポーネントの左手には「R, N, S, P」とあります。それぞれの意味は下記の通りです。

左手
- R : ランダムな点がレイアウトされる範囲（デフォルトでは20×10の長方形）
- N : 点の個数（デフォルトでは100）
- S : Seed値
- P : 原点の座標

この「S （Seed値）」はどのようなものでしょう。新しく「Number Slider」を作成し、これに繋いでみます。
スライダーを動かしてみると、このように点の数は変わらず、点の配置が様々に変化します。

![ezgif-3-fd16cf876d.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229645/9431ddb1-0b99-50b0-a8d3-b1208f9319a2.gif)

こうしたランダムな表現も、Rhinoceros単体では実現できないものです。

### Voronoi
最後に「Voronoi」というコンポーネントを使用してみます。
Grashopperは有機的なデザインが実現出来るというイメージを持っている人も多いのではないでしょうか。[ボロノイ図](https://ja.wikipedia.org/wiki/%E3%83%9C%E3%83%AD%E3%83%8E%E3%82%A4%E5%9B%B3)はその代表的な表現の1つです。

![voronoi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229645/c2816621-1d34-25fc-8f20-912923b4e5b6.png)

先ほどのPopulate 2Dコンポーネントの右手の「P」を、Voronoiコンポーネントの左手の"P"に接続してみます。

すると、先ほど「Populate 2D」で生成した点をそれぞれ中心としたボロノイ図形がたちまち生成されます。

さらに、先ほどと同様に「Populate 2D」に繋いだスライダー操作してみると、ボロノイ図形の数や形を簡単に変容させることが出来ます。

![ezgif-3-8a55f6dfde.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229645/12722a9c-cea9-9011-7304-e8f392b54df4.gif)

以上、「Rectangle」といった基本的なコンポーネントから、「Number Slider」との組み合わせによる可変的なデザイン。ランダムや「voronoi」といった、Grashopperならではと言える有機的な表現までを紹介しました。

## 最後に
お読みいただきありがとうございます。
この記事は同時に現在Grasshopperを学びたての筆者自身ための覚書きの側面もございます。
筆者自身は、Rhinocerosは数年使用経験があるもののGrasshopperに関してはまだ初心者であるため、この記事の中に正確でない内容や表現が含まれる場合もあるかもしれません。
この記事に目を通してくださったGrasshopper経験者・熟練者の方へ。記事の内容に関する誤りやその他のご指摘があればぜひコメントいただけますと幸いです。