Rhino+Grasshopper

プロシージャルモデリング|HopsとCPythonを使ってRhino 8に円を描画する方法

今回は、GrasshopperHopsコンポーネントを使い、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コンポーネントを設定

  1. Grasshopperを開きます。
  2. Hopsコンポーネントを追加し、コンポーネントのプロパティにアクセスします。
  3. Path欄に、ローカルサーバーのエンドポイント http://127.0.0.1:5000/create_circle を入力します。
  4. 半径を入力として渡し、出力として円が表示されることを確認します。

ステップ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 {モジュール名}

上記のコードで各種モジュールをインストールして解決します。

rhino3dm.py のドキュメント

https://mcneel.github.io/rhino3dm/python/api/index.html

-Rhino+Grasshopper
-, ,