LoginSignup
26
22

More than 1 year has passed since last update.

RhinocerosとGrasshopperでPythonを使う方法

Last updated at Posted at 2017-11-11

はじめに

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

当初はRhino5の時代に書いたものですが,2022年10月にRhino7に合わせて多少加筆修正しています。

参考記事

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からダウンロードしてコンポーネントを使う。

Rhino6からデフォルトで入っているのでインストール不要です。

http://www.food4rhino.com/app/ghpython?ufh=
github
https://github.com/mcneel/ghpython

Mathsタブに入っています。
image.png

コンポーネントをダブルクリックするとエディターが出ます。
02.PNG

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

Grasshopper GH_CPython

cpythonを使える点で,外部ライブラリを使いたいときは欠かせません。
内部ではeval()でコード文字列を読み込んでいるようで,少し癖がありますがつかえます。
http://www.food4rhino.com/app/ghcpython

2022年現在,2年程度更新がされていません。Rhino8からはcPythonがデフォルトで使えるようになるという噂があります。
Rhino8WIPのGrasshopperにRhinoCodeコンポーネントが乗ったようです!!!

  

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

rhinoscriptsyntax

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

ライブラリのある場所(6の場合)

C:\Users\[user]\AppData\Roaming\McNeel\Rhinoceros\6.0\Plug-ins\IronPython (814d908a-e25c-493d-97e9-ee3861957f49)\settings\lib

ghpythonlib

grasshopperのコンポーネントがつかえる?
ghpythonlib.parallelとか使えそう。

ライブラリのある場所

C:\Users\[user]\AppData\Roaming\McNeel\Rhinoceros\6.0\Plug-ins\IronPython (814d908a-e25c-493d-97e9-ee3861957f49)\settings\lib

scriptcontext

Rhino (RhinoCommonと呼ばれる)

もっとも原初的なクラス。
基本的にrsなどはこれらを利用していると思われます。
rsにないことをやりたいときに、かゆいところに手が届く場合も。

API ドキュメント

https://developer.rhino3d.com/api/RhinoCommon/html/R_Project_RhinoCommon.htm
例えば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/

26
22
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
22