Python
grasshopper
rhinoceros

RhinocerosとGrasshopperでPythonを使う方法

More than 1 year has passed since last update.

はじめに

RhinoceroやGrasshopperではPythonでコーディングすることができます。
(いろいろなことができますが、Rhinoに関するすべてのことができるわけではありません。)
その方法やライブラリのメモをまとめて置こうと思います。

参考記事

RhinoにおけるPythonコーディングの方法

大きく分けると,

  • Rhinoで使うかGrasshopperで使うか
  • (Rhinoが動いている.NET Framework上で動作する)ironPythonか(自分でインストールしている普通の)Python(cPython)を使うか
RhinoPythonEditor GHPython GH_CPython
実行アプリ Rhinoceros Grasshopper Grasshopper
実行エンジン IronPython IronPython cPython
Rhino関係ライブラリimport OK OK NG
Python関係ライブラリimport NG NG OK

で分けられます。
IronPython(アイアンパイソン)はあまり聞きなれないかもしれませんが、
.NET Frameworkのライブラリがつかえるそうです。ただしPython2系であり、ふだん利用しているNumpyなどのライブラリをimportすることは(ふつうには)できません。

Rhinocerosのeditor

コマンド
EditPythonScript
01.PNG

左側カラムから使用可能なライブラリとそれらのリファレンスがあるのでわかりやすい。
たとえば次のように使う。

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からダウンロードしてコンポーネントを使う。
http://www.food4rhino.com/app/ghpython?ufh=
github
https://github.com/mcneel/ghpython

02.PNG

GHのitem-list-treeとPythonのlistの関係

このコンポーネントの変数はアイテムか、リストごとに読み込むか、ツリー全体で読み込むか選択できます。
GHのlistはそのままPythonのlistになります。type()ではが返されます。
GHのtreeはtypeで返すとになります。つまりイテレータとして使えません。(for i in tree:とかができません)

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

Grasshopper GH_CPython

新しいです。画期的です。
http://www.food4rhino.com/app/ghcpython

  

利用可能なRhinocerosのライブラリ

rhinoscriptsyntax

rhinoのほとんどのコマンドが簡単に利用できる。
5とWIP(work in progress)の6で多少ことなるようですがリファレンスは以下。
http://developer.rhino3d.com/5/
http://developer.rhino3d.com/api/RhinoScriptSyntax/

scriptcontext

https://discourse.mcneel.com/t/understanding-scriptcontext/7175

Rhino (RhinoCommonと呼ばれる)

もっとも原初的なクラス。
基本的にrsなどはこれらを利用していると思われます。
rsにないことをやりたいときに、かゆいところに手が届く場合も。
http://developer.rhino3d.com/guides/rhinocommon/what-is-rhinocommon/
http://developer.rhino3d.com/guides/rhinopython/using-rhinocommon-from-python/