Rhino+Grasshopper

Hello World|Grasshopper HopsでPythonを使った「Hello World」を実装する方法

GrasshopperのHopsを使って、Pythonスクリプトで「Hello World」を実装し、Grasshopperノードに接続するまでの手順を以下にまとめます。このブログでは、初心者でも理解しやすいようにステップバイステップで解説します。

目次

  1. Hopsとは?
  2. 必要な準備
  3. Pythonスクリプトの作成
  4. Flaskアプリケーションのセットアップ
  5. GrasshopperでHopsノードを設定
  6. 動作確認
  7. トラブルシューティング

1. Hopsとは?

Hopsは、GrasshopperでPythonや他の外部プログラムを簡単に利用できるようにするツールです。
Flask(Pythonの軽量Webフレームワーク)を使ってGrasshopperノードと通信し、カスタム関数を呼び出す仕組みを提供します。

2. 必要な準備

以下を事前に準備します:

ソフトウェアと環境

  • Rhinoceros 7/8(Grasshopperが必要)
  • Python 3.7以上
  • pip(Pythonパッケージ管理ツール)

必要なPythonライブラリ

次のライブラリをインストールします:

pip install ghhops_server flask

3. Pythonスクリプトの作成

Grasshopperと連携するPythonスクリプトを作成します。

  1. 新しいファイルを作成(例: helloworld.py)。
  2. 以下のコードを記述します:
import ghhops_server as hs
from flask import Flask

# Flaskアプリケーションを作成
app = Flask(__name__)

# Hopsサーバーを作成しFlaskアプリに関連付け
hops = hs.Hops(app)

# Hopsコンポーネントを定義
@hops.component(
    "/hello",                      # エンドポイント
    name="HelloWorld",             # コンポーネント名
    description="Returns Hello World", # 説明
    inputs=[],                     # 入力なし
    outputs=[hs.HopsString("Output")]  # 出力(文字列)
)
def hello_world():
    return "Hello World"

# Flaskアプリを実行
if __name__ == "__main__":
    app.run(debug=True, port=5001)
  1. ファイルを保存します。

コード解説

以下はGrasshopper Hopsを用いたPythonスクリプトのコードを詳しく解説したものです。

1. 必要なライブラリをインポート

import ghhops_server as hs
from flask import Flask
  • ghhops_server: Grasshopperと通信するためのライブラリ。Hopsを使うために必要です。
  • flask: Pythonの軽量Webフレームワーク。サーバーを構築し、Grasshopperと通信する役割を担います。

2. Flaskアプリケーションを作成

app = Flask(__name__)
  • Flaskアプリケーションのインスタンスを作成します。__name__ は現在のモジュール名で、Flaskにアプリケーションの実行環境を伝えるために使われます。

3. Hopsサーバーを作成

hops = hs.Hops(app)
  • hs.Hops(app): FlaskアプリケーションにHopsサーバーを関連付けます。
  • Grasshopper HopsノードがFlaskアプリを通じてPythonスクリプトを呼び出せるようになります。

4. Hopsコンポーネントを定義

@hops.component(
    "/hello",                      # エンドポイント
    name="HelloWorld",             # コンポーネント名
    description="Returns Hello World", # 説明
    inputs=[],                     # 入力なし
    outputs=[hs.HopsString("Output")]  # 出力(文字列)
)
def hello_world():
    return "Hello World"

このデコレーターは、Hopsサーバーにコンポーネント(関数)を登録します。以下のパラメータを設定できます:

  1. "/hello"(エンドポイント):
    • Grasshopperがこのスクリプトを呼び出すためのURLです。
    • 例: http://localhost:5001/hello
  2. name="HelloWorld"(名前):
    • Grasshopper内で表示されるノードの名前です。
  3. description="Returns Hello World"(説明):
    • コンポーネントの簡単な説明を指定します。
  4. inputs=[](入力):
    • 入力がない場合は空のリストを指定します。入力がある場合は、hs.HopsIntegerhs.HopsStringなどで型を指定します。
  5. outputs=[hs.HopsString("Output")](出力):
    • 出力データの型と名前を指定します。この例では、HopsString型の出力が1つ(名前は "Output")です。
  • return "Hello World":
    • この関数がGrasshopperから呼び出されると、"Hello World" という文字列を返します。

5. Flaskアプリケーションを実行

if __name__ == "__main__":
    app.run(debug=True, port=5001)
  • if __name__ == "__main__":
    • このスクリプトが直接実行された場合にFlaskアプリを起動します。
  • app.run(debug=True, port=5001):
    • Flaskアプリをデバッグモード(debug=True)で実行します。
    • サーバーはポート番号 5001 でリッスンします。

4. Flaskアプリケーションのセットアップ

作成したスクリプトを実行してFlaskアプリケーションを起動します。

python helloworld.py

実行後の期待される出力

 * Running on http://127.0.0.1:5001/ (Press CTRL+C to quit)

ブラウザで http://localhost:5001/hello にアクセスし、以下のJSONが表示されれば成功です:

{
  "Output": "Hello World"
}

5. GrasshopperでHopsノードを設定

Grasshopper内で以下の設定を行います:

  1. Hopsノードの配置
    • Grasshopperを開き、Hopsノードを配置します。
    • 「パス」の設定を右クリックで開き、次を入力します: http://localhost:5001/hello
  2. Panelノードを接続
    • Hopsノードの出力をPanelノードに接続します。

6. 動作確認

Grasshopper上で Panel ノードに「Hello World」が表示されていれば成功です!

7. トラブルシューティング

エラー 1: AttributeError: 'HopsDefault' object has no attribute 'register'

解決方法:hops.register(app)hops = hs.Hops(app) に変更してください。

エラー 2: Flaskが見つからない

解決方法:以下のコマンドでFlaskをインストールしてください。

pip install flask

エラー 3: Grasshopperノードに接続できない

  • Flaskアプリが実行中であることを確認してください。
  • HopsノードのURLが http://localhost:5001/hello になっていることを確認してください。

まとめ

これで、Grasshopper Hopsを使ってPythonスクリプトを実行し、出力をGrasshopperノードに表示する方法を学びました。この技術を使えば、Grasshopperでカスタム機能を簡単に拡張することができます。

次回は、入力データを利用するHopsコンポーネントの作成について解説します!

-Rhino+Grasshopper
-, ,