以前の記事でご紹介した「Grasshopper Player」は、Rhino7から搭載されたGrasshopper定義をRhino上のコマンドラインから実行できるようにした機能です。
Grasshopperエディタを起動しないで済むため、Grasshopperを使い慣れていない方や繰り返し同じ作業を行う方に便利ですが、そのまま使うと毎回[GrasshopperPlayer]コマンドの実行とその後のファイル指定の手間がかかります。
ここでは、Grasshopper Playerを使った定義ファイルをRhinoコマンドのようにボタン1つで実行するための方法や、複数のファイルをコマンドとして自動登録するインストーラ形式のような方法などを、サンプルや動画付きで3つご紹介します。
コマンド化したいGH定義ファイルの用意
例として以下のような、サーフェス上に凹凸パターンをモーフィングするアルゴリズムをサンプルとして使用します。
GrasshopperPlayerサンプル(crocoForGhplayer.zip)ダウンロード
定義内のアイコンに紫色のバーがついたコンポーネントがGrasshopperPlayerのインプット・アウトプットを表すコンポーネントです。
パターンの繰り返し数(X/Y)、凹凸高さ、ターゲットサーフェスを指定すると基準面からの高さに応じてカラーマッピングされた3次元パターンが生成されます。
このGH定義をGrasshopperを開かずにコマンドとして実行できるようにします。
方法① ツールバーへの登録
ツールバーアイコンに、GrasshopperPlayerのコマンド実行とファイル指定のマクロを登録する方法です。
ツールバーの空いたスペースを右クリックし、コンテクストメニューから「新規ボタン…」を実行します。
ダイアログが開くので、アイコン画像とコマンドマクロを登録します。
今回、アイコン画像はGH定義で生成されたプレビュー形状をキャプチャし、ペイントアプリ等で32×32にサイズ変更したものを用意しました。
「編集…」ボタンから「ファイル>ビットマップをインポート」で読み込めます。
「コマンド:」の欄には、
! -GrasshopperPlayer (ファイルパス)\crocoForGhplayer.gh
と入力します。ファイルパスには、GHファイルを保存しているフォルダの場所を入れます。
例えば、「user01」というユーザーのデスクトップにある「test」というフォルダに保存している場合、
! -GrasshopperPlayer C:\Users\user01\Desktop\test\crocoForGhplayer.gh
と入力します。
「!(感嘆符)」「-(ハイフン)」やスペースも重要な意味を持ちます。それぞれ直前コマンドのキャンセル、ダイアログ非表示、Enterを意味します。
コマンドマクロの文法については、コマンドマクロとスクリプト作成を参照ください。
「OK」を押すとツールバーに登録され、クリックで実行できるようになります。
問題なくパスが通っていればコマンドヒストリに次のように表示され、コマンドプロンプトで「X方向繰り返し数」が入力できるので、あとは通常のRhinoコマンドのようにコマンドプロンプトの指示に従ってパラメータを入力します。
(アルゴリズムによっては入力後の処理に少し時間がかかります)
▼コマンド実行結果
ツールバーに登録したコマンドを再度編集したい場合は、アイコンをShift+右クリック、
ツールバーからコマンドを削除したい場合は、アイコンをShift+左ドラッグでビュー上で離します。
ツールバーのカスタマイズ方法についての詳細は、Rhinoの環境設定とカスタマイズの「ツールバーの編集」「ツールバーボタンの作成と編集」の項目をご覧ください。
方法② GH定義からエイリアスへの自動登録
方法①は、Rhinoの画面で設定する方法でした。
方法②は、Grasshopper側から直接、Rhinoのエイリアスに自動登録する方法です。
ツールバーアイコンが不要な場合はこちらの方が手軽です。
下記ファイルをダウンロードしてGrasshopperで開きます。
スクリプトサンプル(GhplayerToAlias.gh)ダウンロード
このGHファイルには、以下のようなアルゴリズムが記述されています。
これをエイリアス化したいGHファイル上にコピーペーストします。ここでは方法①と同じファイルを例にしています。
あとはコマンド名を決め、「Run」のButtonを押すだけでコマンド登録できます。
Rhinoのコマンドプロンプトに「コマンド名」を入力し、関連コマンドのリストに表示されれば登録成功です。
「Rhinoオプション>エイリアス」で確認すると実際に登録されていることが確認できます。
このスクリプトの内訳は、
- GHファイルを保存するフォルダへのパス作成(=AppDataのGrasshopperフォルダへのパス)
- スクリプトをペーストしたGHファイル自身を上記パスのフォルダへコピー
- エイリアスにコマンドマクロを登録
という流れです。
AppDataへ保存する理由としては、ghaプラグインやUserObjectと同じ扱いにすることでパスを見失いにくくする狙いです。
Cluster内にスクリプトの本体があるので、C#やPythonが書ける方はカスタマイズ次第で任意のフォルダを指定するようにもできます。
エイリアスへの登録は、rhinoscriptsyntaxの「AddAlias」メソッドで行っています。
import rhinoscriptsyntax as rs
if b:
macro = "! -GrasshopperPlayer " + path
rs.AddAlias(name,macro)
登録済みコマンドを削除したい場合は、「Rhinoオプション>エイリアス」で該当のものを削除し、「C:\Users\ユーザー名\AppData\Roaming\Grasshopper\Ghplayer」から該当のGHファイルを削除します。
▼動画でチェック
方法③ GH定義からエイリアスへの自動登録(フォルダ指定し複数まとめて)
フォルダに保存した複数のGrasshopperPlayerの定義ファイルを、まとめてエイリアスに登録する方法です。ソフトウェアのインストーラのようなイメージです。
以下がサンプルです。
スクリプトサンプル(ghpFileInstaller.zip)ダウンロード
「ghp」というフォルダ内にまとめて登録したいGHファイルを保存します。このスクリプトでは、GHファイル名の拡張子を除く部分(GhPlayerAなど)がエイリアス名として登録されるようにしています。
(今回はサンプルなので、名前は違いますが中身は全部一緒です)
「ghp installer.gh」を開いて、Buttonを押すと「ghp」フォルダ内のファイルがまとめてエイリアスに登録されます。
基本的な仕組みは方法②と同じで、GHファイルはすべてAppDataへコピーされます。
「ghp installer.gh」と「ghp」フォルダの相対位置関係を変えなければ、どこに置いて実行しても機能します。
Rhinoのコマンドプロンプトに「Gh…」と入力し、関連コマンドのリストにすべて表示されれば登録成功です。
削除する場合は方法②同様、「Rhinoオプション>エイリアス」で該当のものを削除し、「C:\Users\ユーザー名\AppData\Roaming\Grasshopper\Ghplayer」から該当のGHファイルを削除します。