【Mac版】Grasshopper 超基礎【初めてのGrasshopper】

## Grasshopperとは
Rhinoceros上で動作するVPL（ビジュアルプログラミング言語）のことです。
コンポーネントと呼ばれるそれぞれが機能を持ったパーツを回路のように繋げて、Rhinoceros単体では実現困難な特別な機能を持ったツールを独自に作ることが出来ます。

![Grasshopper.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229645/6043ffc6-cb4e-6444-0997-67173d789f2e.png)


## この記事について
この記事ではMac版で使用した場合の内容を記載します。

## 必要なもの
前述した通り、GrasshopperはRhinoceros上で動作する。そのためRhinocerosを持っている必要があります。筆者は現在、商用版Rhinocerosバージョン6を使用しています。
Grasshopperは、Mac版であればバージョン5以降の全てのバージョンにすでに備わっているようです。
そのため、Rhinocerosをダウンロードした後にGrasshopperを個別にインストールするなどの必要はありません。すぐにでも使うことができます。

## Step1 : Grasshopperを開く
まずはRhinocerosを起動しましょう。
![Rhinoceros_window.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229645/99b7b9f8-74ad-44b9-e45b-19d7faaba313.png)

Grasshopperの立ち上げは簡単で、コマンドラインに"Grasshopper"と入力するだけで開くことができます。「Gr」まで入れれば候補の最上位にGrasshopperを見つけることが出来るでしょう。

## Step2 : インターフェースを見てみる

![Grashopper_window.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229645/9a44e0c8-0a8a-13d4-5c75-4205806eb7ec.png)

Grasshopperが立ち上がると、Rhinocerosの別ウィンドウでGrasshopperの操作画面が開きます。
Rhinocerosの画面構成とは異なっています。上からタブがあり、アイコンが並んでいます。その下に編集画面があります。

Grasshopperは、Rhinocerosの画面は開いたまま、画面を切り替えて操作します。
Grasshopper上で行った編集は、Rhinocerosの編集画面上に常に反映されます。Rhinocerosの画面はいわばプレビュー画面になります。


## Step3 : コンポーネントを使ってみる
Grasshopperの画面上部に並んでいたアイコンは、それぞれが機能を持ったパーツのようなもので、コンポーネントと呼ばれます。筆者が最初に触ったいくつかのコンポーネントを例に見ていきます。

### Point
例として左上の「Point」を使用してみます。アイコンをクリックし、編集画面上に持っていきます。適当な場所でクリックすると画面上に置かれます。

![point.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229645/284a13ad-fa89-8edf-97e7-7b1b941d397a.png)

画面上のPointコンポーネントを左クリックし、続けて「Set one Point」をクリックしてみます。
Rhinocerosの画面に移り、適当な座標を指定することができます。するとこのPointコンポーネントには、今指定した座標が入ります。

![setOnePoint.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229645/1c74b416-9ac5-0f70-4b0f-4d7451da9c48.png)

### Construct Point
次の例です。同じく点を指定するコンポーネント　「Construct Point」を使用してみます。

![constructPoint.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229645/07e838e4-2e78-ffae-e48f-31b53438f1ca.png)

「Vectorタブ」 → 「Point」から探すこともできますが、編集画面上のどこでもいいのでダブルクリックすると、"Enter a search keyword"とコマンドラインが出てくるので、直接「Construct Point」と打ち込んで呼び出すこともできます。

![enterASerchKeyword.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229645/66cd585f-fecf-c680-066e-7b6c4c1e3d7a.png)

Construct Pointの内容に戻ります。

![constructPointPreview.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229645/a455e20f-0a1b-c9f3-b63d-d93d80a79649.png)

画面左側にRhinocerosの画面、右側にGrasshopperの画面を配置しました。
「✕」がRhinocerosの作業平面の原点に位置しているのが分かると思います。

先程の「Point」とは異なり、左側に「X, Y, Z」、右側には「Pt」と書かれていると思います。
この「X, Y, Z」にそれぞれ値を入力出来るようになっているわけですが、何も繋がっていない状態ではそれぞれに「0」が指定されています。つまり、いまこの「Construct Point」は原点に位置しています。

Step2で前述したように、RhinocerosがGrasshopperのプレビュー画面のように機能しているのが分かるかと思います。

### Number slider
先ほど「Construct Point」を出したものと同じ編集画面の適当な場所をダブルクリックし、「Enter a search keyword」に任意の数値を入力してみます。
例として「50」と入力します。

![NumberSlider.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229645/cb55cc70-8135-abd6-4d62-ca3f20a0e4e1.png)

すると自動的に「Number slider」というコンポーネントになって配置されます。
名前の通り、スライダーになっていて、数値をプラス・マイナスに動かすことが出来ます。
この場合だと「0~100」の間でスライドさせられるようになっています。

![NumberSlider2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229645/42d38b60-b615-05bb-966d-c1bfd18ec183.png)

Number sliderコンポーネントを左クリックすると、スライダーを操作して値を簡単に変更出来ます。
![NumberSlider3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229645/b3ae685c-0a19-0886-cb14-c5a0931ca78e.png)

「Rounding」には「R, N, E, O」という選択肢があります。
- R : 小数点以下を扱う場合
- N : 整数を扱う場合（デフォルト）
- E : 偶数のみを扱う場合
- O : 奇数のみを扱う場合

その下には、最小値「Min」の値と、最大値「Max」の値をそれぞれ指定できます。

## Step4 : 繋げて作る
先ほど挙げた２つのコンポーネント「Construct Point」と「Number slider」を繋げて、機能を持った１つのツールとして組み立ててみようと思います。

先ほど置いた「Number slider」を「Construct Point」の「X」に繋げてみます。するとSliderが自動的に「X cordinate」という名前に変わりました。

![sliderAndPoint.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229645/d0df0a3b-6f3d-966c-870b-91732b43f4dc.png)

続けて、新しく「Number Slider」を作り、それを今度は「Y」に繋げます。
再びRhinocerosの画面を見てみると、X, Yがそれぞれ５０mmの座標に点が置かれました。

この点は「X cordinate」「Y cordinate」の値をスライドさせるとそれに追従します。スライダーを動かしてみると、同時にRhinoceros上の点も移動します。

![ezgif-2-b21ccea17a.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229645/f08d35d8-0eb5-dc43-7820-dd6edff58cb7.gif)

## Bake（ベイク）する
先ほど作成したスライダーで移動できる点ですが、Rhinocerosの操作画面上から選択しようとすると触れられないことが分かると思います。
この状態だと、Grasshopperで作成したものは単に表示されているに過ぎません。Rhinoceros上で扱える状態にするためには「Bake」をしなければなりません。

Grasshopperの画面上のConstruct Pointの上で左クリックし、目玉焼きのアイコンの「Bake」をクリックします。

![bake.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229645/91a6f474-b77a-43f6-f2b2-d63e96aadc48.png)

または、ショートカットキー「Option + Space」でも表示できます。
![bake2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229645/dcbf8e82-0a3e-caf1-5150-462d37e7e062.png)

「Bake」を実行すると、Rhinocerosのどのレイヤーに実体化させるかを選択します。
するとRhinocerosの操作画面上で先ほどの点を選択できるようになりました。

![bake4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229645/78704e27-67f8-b25b-66f0-2ea47fe203d8.png)

「Bake」を実行したあとで、Grasshopperに戻り再びスライダーの値を変更すると、先ほどBakeされた点はそのままの位置に留まったまま、「✕」が移動します。

![bake5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229645/afacf2ad-ff50-ddea-10d7-261788f911d8.png)

つまり、あとから数値を変更した場合はそれがリアルタイムに反映されるわけではないので、その都度Bakeする必要があるという点には注意が必要です。

以上、立ち上げから基本操作、コンポーネントとその繋げ方、そして「Bake」を実行するまでをご紹介いたしました。

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