今回は、GrasshopperのHopsコンポーネントを使い、CPythonで円を描画する方法を紹介します。Grasshopperはビジュアルプログラミングのツールとしてよく知られていますが、Hopsを使うことで、外部のPythonスクリプトを簡単に呼び出すことができるようになります。この手法を使えば、Pythonの柔軟性を活かしながらRhino内でさまざまな形状を生成することが可能です。
使用するツールと環境
- Rhinoceros 8
- Grasshopper(Rhinoのプラグイン)
- Hops(Grasshopper用のコンポーネント)
- CPython(Python 3.x)
- Flask(軽量なPythonのWebフレームワーク)
目標
今回のゴールは、CPythonを使って半径を指定できる円を生成し、Rhino 8上に表示することです。
ステップ1: 必要なライブラリのインストール
まず、必要なPythonライブラリをインストールします。以下のコマンドを使用してください。
pip install ghhops-server rhino3dm Flask
- ghhops-server: Hopsを使ってGrasshopperとPythonを連携するためのライブラリ。
- rhino3dm: Rhinoの3Dモデリングライブラリ。
- Flask: Python用の軽量なWebサーバー。
ステップ2: Pythonスクリプトの作成
以下のPythonコードは、Grasshopperから呼び出すためのサーバーを立ち上げ、円を生成するものです。Flaskを使ってローカルサーバーを立ち上げ、そのサーバー経由でGrasshopperがPythonの関数を呼び出します。
import ghhops_server as hs
from flask import Flask
import rhino3dm
# Flaskアプリケーションのインスタンスを作成
app = Flask(__name__)
# Hopsサーバーのインスタンスを作成し、Flaskアプリケーションと紐付ける
hops = hs.Hops(app)
# 円を生成する関数を定義
@hops.component(
"/create_circle", # Hopsでのパス
name="Create Circle", # Grasshopperで表示される名前
inputs=[
hs.HopsNumber("Radius", "R", "Radius of the circle", hs.HopsParamAccess.ITEM)
],
outputs=[
hs.HopsCurve("Circle", "C", "Generated circle")
]
)
def create_circle(radius):
# 半径radiusの円を作成
center = rhino3dm.Point3d(0, 0, 0)
circle = rhino3dm.Circle(center, radius)
return circle.ToNurbsCurve()
# サーバーを起動
if __name__ == "__main__":
app.run()
スクリプトのポイント
@hops.componentデコレータを使って、HopsとPython関数をリンクしています。inputsとして、円の半径(Radius)を受け取り、outputsとして生成された円のNurbs曲線をGrasshopperに返します。app.run()でローカルサーバーを起動します。
ステップ3: Hopsサーバーの起動
上記のPythonスクリプトをローカルマシンに保存し、実行します。
python circle.py
サーバーが立ち上がり、http://127.0.0.1:5000/create_circleが使用可能になります。
ステップ4: GrasshopperでHopsコンポーネントを設定
- Grasshopperを開きます。
Hopsコンポーネントを追加し、コンポーネントのプロパティにアクセスします。- Path欄に、ローカルサーバーのエンドポイント
http://127.0.0.1:5000/create_circleを入力します。 - 半径を入力として渡し、出力として円が表示されることを確認します。
ステップ5: Grasshopperで円を描画
GrasshopperのUI内で、Hopsを通じて半径を指定すると、その値に基づいて円が描画されます。円の半径を変更するとリアルタイムで反映され、動的に形状が変化する様子が確認できます。

まとめ
この方法を使うと、CPythonを活用しつつ、Grasshopperのビジュアルプログラミングと連携してRhino内に様々な形状を生成することが可能になります。Pythonの柔軟な計算能力を用いることで、より複雑な形状やアルゴリズムをGrasshopper上で扱うことができ、設計の幅が大きく広がります。
ぜひ試してみてください!
Githubでダウンロード
https://github.com/sekkeiya/Python_Circle
No module namedの対処法
以下のようなエラーが出てくることがあります。
これはモジュールをインストールすることで解決することができます。
ModuleNotFoundError: No module named 'ghhops_server'
ModuleNotFoundError: No module named 'werkzeug'
ModuleNotFoundError: No module named 'flask'
etc...
pip install {モジュール名}
上記のコードで各種モジュールをインストールして解決します。