はじめに
RhinoceroやGrasshopperではPythonでコーディングすることができます。
(いろいろなことができますが、Rhinoに関するすべてのことができるわけではありません。)
その方法やライブラリのメモをまとめておきます。
2024.10 Rhino8に合わせて加筆修正
2022.10 Rhino7に合わせて加筆修正
2017.11 Rhino5
参考記事
- Applicraft Grasshopperコンポーネント:Rhino8新規追加
- Rhinoceros / Grasshopperでコーディングしたい人のためのレファレンス参照先
- What is Rhino.Python?
- Grasshopper / Pythonでライノオブジェクトをスクリプトでコントロールするための準備
RhinoにおけるPythonコーディングの方法
大きく分けると,
- Rhinoで使うかGrasshopperで使うか
- (Rhinoが動いている.NET Framework上で動作する)ironPythonか(自分でインストールしている普通の)Python(cPython)を使うか
RhinoPythonEditor | IronPython2 | Python3 | |
---|---|---|---|
実行アプリ | Rhinoceros | Grasshopper | Grasshopper |
実行エンジン | IronPython 2.x | IronPython 2.x | cPython 3.x |
Rhino関係ライブラリimport | OK | OK | OK |
Python関係ライブラリimport | NG | NG | OK |
で分けられます。
IronPython(アイアンパイソン)はあまり聞きなれないかもしれませんが、
.NET Frameworkのライブラリがつかえるそうです。ただしPython2系であり、ふだん利用しているNumpyなどのライブラリをimportすることは(ふつうには)できません。
Python3コンポーネントではrhinoscriptsyntaxが実行できないこともあります。(使ってみた感じ)
Rhinocerosのeditor
左側カラムから使用可能なライブラリとそれらのリファレンスがあるのでわかりやすい。
たとえば次のように使う。
import rhinoscriptsyntax as rs
plane = rs.WorldXYPlane()
plane = rs.RotatePlane(plane, 45.0, [0,0,1])
rs.AddArc( plane, 5.0, 45.0 )
三角形の再生マークを押せば実行されます。
またはコマンドRunPythonScript
でファイルを指定して直接実行することもできます。
Grasshopper GHPython
food4rhinoからダウンロードしてコンポーネントを使う。
Rhino6からデフォルトで入っているのでインストール不要です。
http://www.food4rhino.com/app/ghpython?ufh=
github
https://github.com/mcneel/ghpython
GHのitem-list-treeとPythonのlistの関係
このコンポーネントの変数はアイテムか、リストごとに読み込むか、ツリー全体で読み込むか選択できます。
GHのlistはそのままPythonのlistになります。type()ではが返されます。
GHのtreeはtypeで返すとになります。つまりイテレータとして使えません。(for i in tree:とかができません)
treeをinput,outputとして扱うためには,ghpythonlib.treeheplers
を使うとよいです。
https://developer.rhino3d.com/guides/rhinopython/grasshopper-datatrees-and-python/
GUIDとオブジェクト
Grasshopperのネットワークでは、基本的にguid(オブジェクトごとに割り振られたid)が渡されます。
Geometry(形態)を渡したつもりでも、じつはguidの文字列がわたされていて、エラーになることがあります。
このために、itemのジオメトリー種別を指定しておけば自動的にguidをgeometryに変換
してくれます。
自分で変換するときは、たとえばLineに変換するとき
import rhinoscriptsyntax as rs
x = rs.coerceline(guid)
でできます。
https://discourse.mcneel.com/t/how-do-i-get-an-object-from-guid/33305
利用可能なRhinocerosのライブラリ
rhinoscriptsyntax
rhinoのほとんどのコマンドが簡単に利用できる。
ただしpython3コンポーネントでは(まだ)動かないものもあるかも。
5とWIP(work in progress)の6で多少ことなるようですがリファレンスは以下。
https://developer.rhino3d.com/
http://developer.rhino3d.com/api/RhinoScriptSyntax/
ghpythonlib
grasshopperのコンポーネントがつかえる?
ghpythonlib.parallelとか使えそう。
scriptcontext
Rhino (RhinoCommonと呼ばれる)
もっとも原初的なクラス。
基本的にrsなどはこれらを利用していると思われます。
rsにないことをやりたいときに、かゆいところに手が届く場合も。
API ドキュメント
例えばPoint3d
を見るとC#とVBだけだが,Pythonも推測できる。
https://developer.rhino3d.com/api/RhinoCommon/html/T_Rhino_Geometry_Point3d.htm
https://developer.rhino3d.com/guides/rhinopython/python-rhinoscriptsyntax-point-vector-methods/
ガイド
https://developer.rhino3d.com/guides/rhinopython/
http://developer.rhino3d.com/guides/rhinocommon/what-is-rhinocommon/
http://developer.rhino3d.com/guides/rhinopython/using-rhinocommon-from-python/
今後調べるべきもの
Rhino-inside
https://www.rhino3d.com/jp/features/rhino-inside/