Grasshopperは、パラメトリックデザインや自動化などを行う上で非常に便利なツールですが、
- リアルタイムに計算が実行されるので少し値を変更しただけで数分以上待ったり、
- 折角、便利な機能を作ったけど、UIが特殊なので初心者の人に使ってもらうには使い方を覚えてもらうのに時間がかかる
など、普段からGrasshopperを使い慣れている人が使う分には問題ないのですが、それを業務ツールやアプリケーションとしてそのまま使ってもらうにはハードルが高いという側面もあります。
開発者本人が使用する場合も、重い処理部分のToggleをオフにし忘れて意図しないタイミングで重い計算が走ってしまったり、プレビューの状態を切り替えているうちに何がどう表示されているかよくわからなくなったりと、業務やルーチン作業で使うにはちょっと使いづらいと感じることもあるのではないでしょうか。
業務用アプリとして使う場合には、コーディングを行い、Rhinoのプラグインとして開発するという方法もありますが、これは逆に開発者側のハードルが高くなります。
これら両方を解消する手段として提案したいのが、今回の
「Grasshopper PlayerとRhino8新規追加のRhinoタブコンポーネント」
を組み合わせる方法です。
具体的には、下記の動画のように見かけ上Grasshopperを開かずにGrasshopperの機能を利用し、かつデータ格納や表示するレイヤなども制御するというものです。
Grasshopper Playerとは?
Rhino7から実装されたGrasshopperの機能をGrasshopperを開かずに、Rhino上でコマンドのように実行できる機能です。
Grasshopper Playerの詳細は下記ページをご覧ください。
【集中講座】Grasshopperアルゴリズムを簡単にRhinoコマンド化! Rhino7の新機能<Grasshopper Player>

Rhino8のGrasshopperに追加されたRhinoタブとは?
Rhino8からGrasshopperにRhinoタブというタブが追加されました。
Rhinoタブには、レイヤや色、表示状態などの属性(Attribute)を操作するコンポーネントや、ビュー・図面・注釈・レンダリングなどの可視化に関するコンポーネントが格納されています。

Rhinoドキュメントの操作が行えるため、Grasshopper Playerと相性がとても良いです。
Rhino8 × Grasshopper Playerで簡易プラグイン作成の概要
ここからが本題です。
今回の内容は、
- Grasshopper PlayerでGrasshopperアルゴリズムをコマンドとして実行し、
- 表示やデータ管理をRhino8のRhinoタブコンポーネントを通して行う
というものです。ここではアルゴリズムの処理自体は簡単なものにして、
「入力したオブジェクトの傾斜を算出 ⇒ カラーマッピングして出力」
する解析ツールを作ってみましょう。
Grasshopperのアルゴリズムで記述すると下記のようなイメージです。形状を入力し、鉛直方向と各面の法線の角度に応じて、Meshに色付けしています。傾斜が大きいところほど赤っぽく、小さいところほど青っぽくなっています。

これはあくまで例ですので、おそらく皆さんこれまでに開発してきたGrashopperの便利ツールや今後実現したいものがいろいろとあると思いますので、そのツールに置き換えて想像してみてください。
これを以下の4つのコマンドを含むRhinoツールにしてみます。
①新規プロジェクト作成
②モデル設定
③解析実行
④プロジェクト保存
上記ができたら最後にツールバーにコマンドとして登録する方法もご紹介します。
①新規プロジェクト作成
Grasshopperのメリットの1つは入力を変更するとリアルタイムに結果が反映されることですが、Bakeしない限り、直前に出した結果を再度見るためには再計算を行う必要があります。
計算が軽い場合は問題ないですが、ちょっと計算が重くなると逆にこれが煩わしくもなります。
一般的な解析アプリケーションでは、まず土台として「プロジェクト」を作成して、そこにモデルや計算結果を格納するという構成のものがよくあります。このようにすることで別の条件を設定する場合は別のプロジェクトを作成することで、過去の計算条件や計算結果を残しておくことができます。
今回はこの考え方を踏襲してみます。
new_project.gh というファイルを作成し、以下のように記述します。

<アルゴリズム解説>
- 「::」を付けることでサブレイヤを指定できます。
- [Context Bake]コンポーネントに入力したものがGrasshopper Player実行時にBakeされます。
- [Model Layer]をBakeするとRhinoドキュメントにサブレイヤを含むレイヤが作成されます。
②モデル設定
解析の入力用のモデルや条件を設定するコマンドを用意します。
元のオブジェクトを損なわないよう、「モデル」レイヤにオブジェクトをコピーするようにしておきます。このステップは入力モデルをそのまま使用する場合は必要ないですが、例えば何かしらの変換(解析用Meshに変換など)を行ったり、計算条件を付与したり、解析する前のプレビューの役割にもなるのであると便利です。
model_set.gh というファイルを作成し、以下のように記述します。

<アルゴリズム解説>
- [Get Geometry]でGrasshopperPlayer実行時にRhinoのビューのオブジェクトを入力できます。
- [Get Geometry]を「右クリック>Prompt」でコマンド実行時の指示文を設定できます。

- [Query Model Layers]でRhinoドキュメントに含まれるすべてのレイヤが参照できます。この中から「新規プロジェクト」を名前に含むレイヤだけ表示し、ほかは非表示にするという属性を設定しています。

<ほかにも・・・>
以下のように[Get File Path]でファイルパスを入力し[Import3DM]を用いることで、ビュー上のオブジェクトを選択する仕様ではなく、外部ファイルを読み込む仕様にもできます。

③解析実行
solver.gh を作成し、上述の傾斜算出アルゴリズムをベースとして以下のように調整します。

<アルゴリズム解説>
・再度クリックしてモデル入力するのは二度手間なので、レイヤ名を指定して[Geometry Pipeline]でオブジェクトを抽出するようにします。
・出力結果は「解析結果」レイヤに格納し、「モデル」レイヤは非表示になるよう属性を設定してBakeされるようにします。
<ほかにも・・・>
・Bake前に[UserText]を挟むことでKey(属性名)とValue(値)を付与した状態でBakeすることができます。以下の例ではモデルの最大・最小傾斜角をオブジェクトの属性情報として埋め込んでいます。この後、別の処理を行ったり、結果をレポートや凡例などで出力する際のパラメータとして使用するなどあらゆる応用方法が考えられます。

④プロジェクト保存
save_project.gh を作成し、以下のように記述します。
これはいわゆる「名前を付けて保存」のような機能です。

<アルゴリズム解説>
- [Get String]で保存後のプロジェクト名を入力します。
- [Query Model Objects]で該当のレイヤに含まれるオブジェクトを読み込んでいます。
- レイヤ名を新しいプロジェクト名で置き換え、結果は非表示・かつロックされるよう設定します。
- [Content Cache]で「1=Push」を指定することで既存オブジェクトの情報を上書きできます(Bakeだと上書きではなく追加になってしまうのでここでは[ContextBake]は使いません)。

ツールバーへの登録
①~④でGHファイルの作成は完了しました。
この時点で[Grasshopper Player]コマンドを実行してファイルを指定すれば実行できますが、毎回ファイルを指定するのは面倒です。

これらをツールバーから起動できると効率的なので、最後にツールバーアイコンにマクロを登録する方法をご紹介します。
ツールバーの空白部分で右クリックし「新規ツールバーボタン…」をクリックするとダイアログが起動しますので、「新しいコマンド」を選択して次へ。

コマンド名やアイコン画像、コマンドマクロを入力します。コマンドには下記のように記述しています。
! -GrasshopperPlayer C:\Rhino8Plugin\new_project.gh
-_Layer _Current “新規プロジェクト” _Enter
<コマンドマクロ解説>
・1行目で、GrasshopperPlayerコマンドを記述し、スペースを開けてファイルパスを入力しています(ファイルパスは任意なのでわかりやすい場所、見失いにくい場所に保存してください)。
・2行目では、カレントレイヤを切り替えています。
詳しいマクロの記述については下記を参照ください。
https://docs.mcneel.com/rhino/5/help/ja-jp/information/rhino_scripting.htm

「画像:」の部分でコマンドアイコンを設定できるのですが、Rhino8では膨大に存在する標準のRhinoアイコンからイメージをインポートできるようになりました。追記や編集もできるので、とりあえず仮で設定するにはかなり便利な機能だと思います。


ほかの設定は割愛しますが、「次へ」で進んでいくとツールバーにコマンドが追加されます。
(指定したパスにGHファイルを保存するのを忘れないようにしましょう)

標準のツールバーに追加するとわかりづらくなるので、同じくツールバーの空白部分で右クリックし「新規ツールバー…」をクリックするとオリジナルのツールバーが作成できます。

先ほどの「新規プロジェクト」コマンドを追加します。

「次へ」で進んで「終了」するとツールバーが作成されます。

同様にして、残りの3つのコマンドも登録します。

①コマンド名:新規プロジェクト作成
コマンドマクロ:
! -GrasshopperPlayer C:\Rhino8Plugin\new_project.gh
-_Layer _Current “新規プロジェクト” _Enter
_SetDisplayMode _Mode=_CustomViewMode _Enter
②コマンド名:モデル設定
コマンドマクロ:
! -GrasshopperPlayer C:\Rhino8Plugin\model_set.gh
③コマンド名:解析実行
コマンドマクロ:
! -GrasshopperPlayer C:\Rhino8Plugin\solver.gh
④コマンド名:プロジェクト保存
コマンドマクロ:
! -GrasshopperPlayer C:\Rhino8Plugin\save_project.gh
解析フェーズに入ったことがわかりやすいように①の最終行に表示モードを変更するコマンドを追加しています。ここではレンダリング表示をコピーして背景色を黒に設定したオリジナルの表示モードを作成してそれに切り替えるよう記述しています。
ビューの雰囲気が変わるとよりオリジナルツールらしくなると思います。

ここまでの内容を一連の流れで操作すると、動画のようになります。
裏ではGrasshopperで処理を行っていますが、あまりGrasshopperの存在を感じないのではないでしょうか。
ほかにも、
[ContextPrint]を使うと文章が出力できるので、エラー表示や完了通知を付けたり、

・注釈や凡例、スケールなどを入れて結果をレポートや図面として出力したり、

作り込めば、いろいろカスタマイズできると思います。
Rhinoプラグインを作ってみたいけど、コーディングをするのはな〜と思っている方は是非チャレンジしてみてください!
ここでご紹介した4つのGHファイルとツールバーやマクロを含むコンテナファイルは下記からダウンロードできます。