Rhino+Grasshopper

Add|Grasshopper HopsとPythonでカスタムコンポーネントを作成し足し算する方法

今回は、Grasshopper HopsPythonを使って、2つのカスタムコンポーネント「7」と「add」を作成する方法について紹介します。これにより、GrasshopperでPythonの関数を簡単に実行できるようになります。

目次

  1. HopsとFlaskの紹介
  2. 必要なライブラリのインストール
  3. Pythonスクリプトの作成
  4. Grasshopperでの設定
  5. 実行と動作確認
  6. トラブルシューティング

1. HopsとFlaskの紹介

Hopsは、Grasshopperで外部のPythonスクリプトや他のプログラムを簡単に呼び出すためのツールです。これを利用すると、GrasshopperのノードとしてPythonの関数を使うことができ、プログラムの柔軟性が大きく向上します。

Flaskは、Pythonで作られた軽量のWebアプリケーションフレームワークです。Hopsと連携するためにFlaskを使ってWebサーバーを立て、GrasshopperからそのサーバーにアクセスしてPythonの関数を呼び出します。

2. 必要なライブラリのインストール

まずは必要なライブラリをインストールします。以下のコマンドでインストールできます:

pip install ghhops_server flask

これで、Grasshopper HopsとFlaskを使う準備が整いました。

3. Pythonスクリプトの作成

以下のPythonコードを使って、Hopsコンポーネントを定義します。2つのコンポーネント「7」と「add」を作成しています。

import ghhops_server as hs
from flask import Flask

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

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

# Hopsコンポーネント「7」を定義
@hops.component(
    "/7",                                   # エンドポイント
    name="7",                               # コンポーネント名
    outputs=[hs.HopsInteger("Output")]      # 出力(整数)
)
def seven():
    return 7

# Hopsコンポーネント「add」を定義
@hops.component(
    "/add",                                 # エンドポイント
    name="add",                             # コンポーネント名
    inputs=[                                 # 入力(2つの数値)
        hs.HopsNumber("A"),
        hs.HopsNumber("B")
    ],
    outputs=[hs.HopsNumber("Output")]       # 出力(数値)
)
def add(a, b):
    return a + b

# Flaskアプリを実行
if __name__ == "__main__":
    app.run(debug=True, port=5000)

コードの解説

このコードでは、Grasshopper HopsFlaskを使用して、2つのカスタムコンポーネント「7」と「add」を作成する方法を示しています。各部分を詳しく解説します。

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

import ghhops_server as hs
from flask import Flask
  • ghhops_serverは、Grasshopper Hopsの機能を提供するライブラリです。これにより、Grasshopper内で外部のPython関数を呼び出すことができます。
  • flaskは、Pythonで作られた軽量なWebアプリケーションフレームワークです。Hopsを使うにはFlaskを利用してWebサーバーを立ち上げ、そのサーバーを介してGrasshopperとPython間の通信を実現します。

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

app = Flask(__name__)  # Flaskアプリケーションを作成
  • Flask(__name__)は、Flaskアプリケーションのインスタンスを作成します。__name__は、現在のモジュール名(通常は__main__)で、Flaskはこの情報を使ってアプリケーションの設定を行います。

3. Hopsサーバーの作成とFlaskアプリへの関連付け

hops = hs.Hops(app)  # Hopsサーバーを作成し、Flaskアプリに関連付け
  • hs.Hops(app)で、Hopsサーバーを作成し、それをFlaskアプリケーションに関連付けています。これにより、GrasshopperがFlaskサーバーにリクエストを送ることができるようになります。

4. Hopsコンポーネント「7」の定義

@hops.component(
    "/7",                                   # エンドポイント
    name="7",                               # コンポーネント名
    outputs=[hs.HopsInteger("Output")]      # 出力(整数)
)
def seven():
    return 7
  • @hops.componentは、Flaskサーバーにエンドポイントを作成し、そのエンドポイントをGrasshopperで使用できるようにするデコレータです。
  • /7は、FlaskアプリケーションでのURLエンドポイントです。このURLがGrasshopperのHopsノードで呼び出されます。
  • name="7"は、このコンポーネントの名前を指定します。Grasshopperでこのコンポーネントを識別するために使用されます。
  • outputs=[hs.HopsInteger("Output")]は、このコンポーネントが返す出力が整数型であることを示します。
  • def seven():の中では、単純に整数「7」を返します。Grasshopperに「7」を出力として渡します。

5. Hopsコンポーネント「add」の定義

@hops.component(
    "/add",                                 # エンドポイント
    name="add",                             # コンポーネント名
    inputs=[                                 # 入力(2つの数値)
        hs.HopsNumber("A"),
        hs.HopsNumber("B")
    ],
    outputs=[hs.HopsNumber("Output")]       # 出力(数値)
)
def add(a, b):
    return a + b
  • /addは、加算を行うためのエンドポイントです。Grasshopperでは、このURLを呼び出すことで加算処理を実行します。
  • inputs=[hs.HopsNumber("A"), hs.HopsNumber("B")]では、2つの入力(AB)を定義しています。それぞれの入力は数値型であり、ユーザーがGrasshopperで与えることができます。
  • outputs=[hs.HopsNumber("Output")]では、出力として加算結果を数値型で返します。
  • def add(a, b):の中では、引数として渡された2つの数値を加算して、その結果を返します。Grasshopperに計算結果を渡すことができます。

6. Flaskアプリケーションの実行

if __name__ == "__main__":
    app.run(debug=True, port=5000)
  • app.run(debug=True, port=5000)で、Flaskアプリケーションを実行します。このコードは、Pythonスクリプトが直接実行されている場合にのみ実行されます。
    • debug=Trueにすると、開発中にエラーが発生した際に詳細なデバッグ情報を表示するようになります。
    • port=5000は、Flaskアプリケーションをポート5000で実行することを指定しています。このポートは、Grasshopperからアクセスする際のURLに含まれます。

4. Grasshopperでの設定

GrasshopperでこのPythonスクリプトを使うためには、以下の手順を実行します:

  1. Flaskアプリを実行: Pythonスクリプトを実行するために、ターミナルで以下のコマンドを入力します: python your_script_name.py これでFlaskサーバーが立ち上がり、Grasshopperからアクセスできるようになります。
  2. GrasshopperでHopsノードを使用:
    • Grasshopperを開き、Hopsノードを配置します。
    • ノードのプロパティに、以下のURLを設定します: http://localhost:5000/7 または、加算を行いたい場合は: http://localhost:5000/add
  3. Panelで結果を確認: Hopsノードの出力をPanelノードに接続すると、「7」や加算結果が表示されます。

5. 実行と動作確認

Flaskアプリケーションが正しく実行されていれば、Grasshopperで以下の結果が表示されるはずです:

  • /7 エンドポイントでは、「7」が表示されます。
  • /add エンドポイントでは、入力した2つの数値の合計が表示されます。

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

問題: Flaskサーバーが起動しない

  • 原因: Flaskがインストールされていない可能性があります。
  • 解決方法: 以下のコマンドでFlaskをインストールします: pip install flask

問題: Grasshopperで結果が表示されない

  • 原因: Flaskサーバーが実行中でない場合があります。
  • 解決方法: Pythonスクリプトを再度実行し、サーバーが起動していることを確認してください。

まとめ

これで、PythonとFlaskを使用して、Grasshopper Hopsのカスタムコンポーネント「7」と「add」を作成する方法を学びました。これにより、Grasshopperでより柔軟にPythonの処理を利用できるようになります。次回は、より複雑なデータの処理や、複数の入力を持つコンポーネントを作成してみましょう!

-Rhino+Grasshopper
-, ,