【集中講座】RhinoのPythonScriptからGrasshopperを操作する

Grasshopper API の GH_RhinoScriptInterface メソッドを利用することでRhinoからスクリプトを使ってGrasshopper(GH)を操作することができます。

GH_RhinoScriptInterface Methods

これらを活用すると例えばこんなことができます!

  • Grasshopperファイルを開いたり閉じたり隠したりを自動化
  • ParameterやNumberSliderに順番に値を代入しループ処理(バッチ処理)
  • Grasshopperの結果をアニメーション再生

このページではいくつか代表的なメソッドとその使い方をご紹介します。

スクリプトエディタの使用方法については下記ページを参照ください。

スクリプト作成

GHサンプル

スクリプトの動きに着目するために、GHアルゴリズムは円を作って押し出すだけのシンプルなもので確認していきます(ファイル名:ExtrudeCircle.gh)。

GHエディタの起動・表示・非表示

・LoadEditor

・ShowEditor 

・HideEditor

Grasshopperエディタの起動

Grasshopperエディタを表示

Grasshopperエディタを非表示

下記コードを実行すると、まずGHが起動し、その後一瞬エディタが表示され、最終的にエディタは非表示になります。
この時点では、まだファイルを開いていないのでビューには何も表示されません。

import Rhino
gh = Rhino.RhinoApp.GetPlugInObject("Grasshopper")
gh.LoadEditor()  # エディタの起動(表示はされない)
gh.ShowEditor()  # エディタの表示
gh.HideEditor()  # エディタの非表示

GHファイルを開く

・OpenDocument 

Grasshopperファイルを開く

下記を実行するとパスで指定したGHファイルが開かれ、プレビューがビューに表示されます。

gh = Rhino.RhinoApp.GetPlugInObject("Grasshopper")
gh.LoadEditor()  # エディタの起動(表示はされない)
gh.ShowEditor()  # エディタの表示

path = "C:\\Users\\ユーザー名\\Desktop\\ExtrudeCircle.gh"
gh.OpenDocument(path) # GHファイルを開く

ParameterやNumberSliderに値を代入する

・AssignDataToParameter 

・SetSliderRangeAndValue

・SetSliderValue

・RunSolver

Panelに値を代入

NumberSliderに範囲と値を代入

NumberSliderに値を代入

処理を実行

下記を実行すると、あらかじめそれぞれ「AssignData1」「AssignData2」と名前を付けておいたNumberコンポーネントに値が代入され、その結果がプレビューされます。
以下の例では、AssignData1には「5」、AssignData1には「20」が代入されています。
RunSolver(True)を実行すると結果がプレビューに反映されます。
NumberSliderに代入したい場合はSetSliderRangeAndValueやSetSliderValueを用います。

import Rhino
gh = Rhino.RhinoApp.GetPlugInObject("Grasshopper")
gh.LoadEditor()  # エディタの起動(表示はされない)
gh.ShowEditor()  # エディタの表示

path = "C:\\Users\\ユーザー名\\Desktop\\ExtrudeCircle.gh"
gh.OpenDocument(path) # GHファイルを開く

gh.AssignDataToParameter("AssignData1", 5) # 値の代入
gh.AssignDataToParameter("AssignData2", 20) # 値の代入
gh.RunSolver(True) # GHエディタの更新

Numberコンポーネントの名前は右クリックから編集可能です。整数の場合はIntegerコンポーネントも使えます。

ParameterやNumberSliderに値を代入する(ループ処理)

下記を実行すると、For文のループ処理により、AssignData1とAssignData2に順番に値が代入され、RunSolver(True)を実行したタイミングの結果がプレビューに反映されます。この方法を利用すれば、バッチ処理や簡易的なアニメーション再生が可能です。

import Rhino
gh = Rhino.RhinoApp.GetPlugInObject("Grasshopper")
gh.LoadEditor()  # エディタの起動(表示はされない)
gh.ShowEditor()  # エディタの表示

path = "C:\\Users\\ユーザー名\\Desktop\\ExtrudeCircle.gh"
gh.OpenDocument(path) # GHファイルを開く

for i in range(20):
    gh.AssignDataToParameter("AssignData1", i) # 値の代入
    for j in range(20):
        gh.AssignDataToParameter("AssignData2", j) # 値の代入
        gh.RunSolver(True) # GHエディタの更新

ここでは割愛しますが、もう少し応用すれば、GH側の処理を監視することで条件を満たすとループを抜けるような処理を追加することもできます。

GHファイルの保存・閉じる

・SaveDocument

・SaveDocumentAs

・CloseDocument

・CloseAllDocuments 

Grasshopperファイルを保存

Grasshopperファイルを別名保存

Grasshopperファイルを閉じる

すべてのGrasshopperファイルを閉じる

最後に下記のようにこれらのメソッドを用いることでGHファイルを保存したり、閉じたりすることができます。単にエディタを見えなくするだけならHideEditorだけでも構いません。

gh.CloseDocument() # 現在開いているGHファイルを閉じる
gh.HideEditor() # エディタを非表示にする

PythonScriptをツールバーアイコンから実行

下記ページ後半の「ツールバーへの登録」と同様の方法でPythonScriptはコマンドマクロへ登録できます。

PythonScriptを実行する場合は、コマンドマクロには下記のように記載します。

! –RunPythonScript  “pyファイルパス”