26
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RhinocerosとGrasshopperでPythonを使う方法

Last updated at Posted at 2017-11-11

はじめに

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

2024.10 Rhino8に合わせて加筆修正
2022.10 Rhino7に合わせて加筆修正
2017.11 Rhino5

参考記事

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

コマンド
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タブに入っています。
スクリーンショット 2024-10-11 11.31.45.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

利用可能な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/

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?