【集中講座】スクリプトコンパイラ – GrasshopperPlayerやPythonをプラグインRHP形式に

このページでは、Rhino7から標準機能となったスクリプトコンパイラ機能を使って、GrasshopperPlayer機能やPythonで書かれたスクリプトを、RHP形式のプラグインに変換する方法を記述しています。

スクリプトコンパイラとは

まずスクリプトコンパイラとは、

  • Pythonスクリプト
  • VBスクリプト
  • Grasshopperで定義されたGrasshopperPlayerとして動くghファイル

をコンパイルして、1つのRHPファイル(Rhinoで提供されているプラグイン形式)に変換できる機能です。

スクリプトコンパイラを使用する意味

例えばRhinoではPythonを使用して、

  • 既存の3dm内のドキュメントをターゲットに処理を行う [ScriptSyntax]
  • より深いジオメトリの処理やRhinoにまつわる操作を行う[Rhino Common]

といったAPIを使用することで、通常のコマンド処理やマクロよりも複雑な処理を行うことができます。

ScriptSyntaxやRhinoCommonについては、開発元のリンクを参照ください。https://developer.rhino3d.com/

またRhino7から搭載されたGrasshopperPlayer機能を使用することで、Grasshopperで作成したファイルをRhinoのコマンドのように使用することもできます。

GrasshopperPlayerについては、下記リンクを参照ください。
【集中講座】Grasshopperアルゴリズムを簡単にRhinoコマンド化! Rhino7の新機能<Grasshopper Player

ただし、上記のファイルは作成したファイルの中身が確認できます。また作成したスクリプトの分だけファイルを管理する必要があります。

下図は[EditPythonScript]コマンドからPythonファイルを開いたところ。GrasshopperPlayerに使用するファイルも同様にGrasshopperから中身が確認できます。

作成したファイルをツールとして他の方に渡すときに中身を確認・編集ができると、それが原因となって後からバグが混入することも考えられます。
スクリプトコンパイラ機能を使用することで、中身が確認できない1つのRHP(Rhinoceros Plugin 形式)に変換することで簡単に管理することができます。

スクリプトコンパイラの動作環境

Windows版のRhino7以降に搭載。

スクリプトコンパイラ自体がRhinoとは異なるexe形式となります。ですので、Macでは実行することができません。ただしWindowsでコンパイルしたRHPファイルはMacにも対応しているので、必要な場合はWindows環境でコンパイル後に、MacにRHPファイルを移動してご使用ください。

スクリプトコンパイラの実行方法

Rhinoを起動後、メニュー > ツール から[スクリプトコンパイラ]を実行。実行後にRhinoとは異なる[Rhino Script Compiler.exe]が起動します。

またRhinoとは異なるアプリケーションなので、Rhinoを起動せずに
C:\Program Files\Rhino 7\System\RhinoScriptCompiler.exe
にあるEXEファイルを直接ダブルクリックで起動できます(Rhino7の場合)。

スクリプトコンパイラの基本操作方法

実行すると下図のようなインターフェースが起動します。
GUI(グラフィカルユーザーインターフェース)ではないので、マウスなどは使用できません(80年代の映画みたいですね。。)。

赤丸で囲った箇所に次に行える動作が書いてあります。行内の青く表示されている文字をタイプするとその行の動作が実行できます。

このページでは、それぞれ

  • N → Start a New project (新しいプロジェクトを開始)
  • O → Open an exisiting project (既存のプロジェクトを開く)
  • H → Confused? Maybe we can Help out.. (ヘルプを開く)
  • Q → Quit this application (アプリケーションを終了する)

ということになります。

スクリプトコンパイラの設定のおおよその流れ

おおよその流れとしては、

  1. 新しいプロジェクトを開始
  2. プラグインに登録する必要な項目を入力
  3. コマンドを登録
  4. プラグインにビルド

を行う必要があります。以降、順を追ってご紹介します。

1.新しいプロジェクトを開始

プロジェクト作成時に必ずRHC(Compiler Project)形式のファイルが作成されます。この中に

  • 何のコマンドを登録したのか
  • プラグインの製作者の情報

等を保存することになります。

また既にRHCファイルを保存済みの場合は、[Open an exisiting project]から、保存してあるRHCファイルを開くこともできます。

・RHCファイルを保存後に登録するファイルのフォルダを変更すると登録したパスが見つからなくなる可能性があるため、登録したいファイルをすべて同じフォルダにまとめておき、その中にRHCファイルを作成すると分かりやすい。
・フォルダ階層があると認識できないエラーが起こる可能性があるため、RHCと参照するPythonやGrasshopperPlayerファイルをすべて同じフォルダに入れること。
・日本語名のフォルダはNGとなる可能性があるので、フォルダのパスを1バイト文字にした方が良い(例: C:\ScriptCompiler など)。

ここでは[ApplicraftTestProject]という名前でプロジェクトを作成してみます。

作成後RHCファイルの保存場所を決めます。パスのエラーを防ぐため、参照するファイルをすべて同じフォルダに入れてください。

2.プラグインに登録する必要な項目を入力

プラグインを作成するうえで、必ず製作者(Author)の設定を行う必要があります。Aを押して、[Edit the Author settings]を実行します。

複数項目がありますが、名前(Name)は必須項目なので、Nを押して、[Applicraft]と入力しEnterキーで決定します。
他にも必要であれば入力ください(ここでは入力を省略します)。
Authorが設定されていないとコンパイルできないため、必ず設定ください。

名前をApplicraftに設定した後の状態。
1つ前の画面に戻るには、Enterキーを押し[press Enter to continue]を実行します。

3.コマンドを登録

次にコマンドを登録します。Cを押して、[Edit the Command settings]を実行します。
何のコマンドを登録するか選択するダイアログが開くので、ここでは[FindTextDots]というPythonファイルを指定しました。

Command Data に読み込んだファイルが登録されます。また自動的に[Name]ファイル名が登録され、この名称がRhinoで使用する際のコマンド名になります。
変更したい場合は、横にある 1 を押して任意のコマンド名を付け直してください。

プラグイン内に複数のコマンドを登録したいときは、再度 A を押して、[A to add a new command]を実行します。
再度、読み込みたいファイルの指定から以前のTipsにあがっているGrasshopperPlayerの定義ファイルを指定。
[Language]の所からそれぞれの作成方法が確認できます。

GrasshopperPlayerに指定したファイルは下記リンクのもの。
【集中講座】 Grasshopper Player – コマンドエイリアスへの自動登録など

Enterキーを押して、[press Enter to return to the main prompt]を実行して前の画面に戻ります。

4.プラグインにビルド

準備ができたので、RHPファイルに変換してみます。B を押して[Build the current project]を実行します。

自動でビルドが始まり、下部の緑色のRHCファイルからの相対パスのフォルダにRHPが作成されます(基本的にはRHCフォルダの1つ下のbinフォルダ内)。

必要であれば、Sを押して次にまたRHCの設定を開けるように[Save the current project]を実行してください。
実行後、qを押すと[Quit this application]コマンドを実行して、ScriptCompilerを終了できます。

プラグインを実行

作成したRHPのプラグインのインストール方法は、下記リンクを参照。
プラグイン RHPファイルのインストール方法

作成したプラグインを確認している図。

WindowsでGrasshopperPlayerファイルを実行している図

WindowsでPythonで登録したコマンドを実行している図(testという文字が含まれたDotを選択する)。

Macで実行している図

スクリプトコンパイラ機能を使うことで、スクリプト状態の複数のファイルを1つのRHPとしてまとめて管理することができます。是非、ご活用ください。

補足 : VisualStudioを使用しC#でRhinoCommonで記述することで、RHPファイルをコンパイルすることもできます。
ですが、既に動いているPythonやGrasshopperPlayerファイルを、そのためだけにC#でも書き直すのは時間がかかってしまいます。

ただしRhinoCommonを使用して、0からプログラムで記述することで

  • GrasshopperやPythonよりも動作が速くなる
  • GrasshopperPlayerファイルのように裏でGrasshopperを起動しなくて良い
  • UIなどのインターフェースも併せて作成できる

などの利点もあります。

より高度なプラグインを開発したい場合は、そちらも是非お試しいただけたらと思います。