今回は、Grasshopper HopsとPythonを使って、2つのカスタムコンポーネント「7」と「add」を作成する方法について紹介します。これにより、GrasshopperでPythonの関数を簡単に実行できるようになります。
目次
- HopsとFlaskの紹介
- 必要なライブラリのインストール
- Pythonスクリプトの作成
- Grasshopperでの設定
- 実行と動作確認
- トラブルシューティング
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 HopsとFlaskを使用して、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つの入力(AとB)を定義しています。それぞれの入力は数値型であり、ユーザーが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スクリプトを使うためには、以下の手順を実行します:
- Flaskアプリを実行: Pythonスクリプトを実行するために、ターミナルで以下のコマンドを入力します:
python your_script_name.pyこれでFlaskサーバーが立ち上がり、Grasshopperからアクセスできるようになります。 - GrasshopperでHopsノードを使用:
- Grasshopperを開き、
Hopsノードを配置します。 - ノードのプロパティに、以下のURLを設定します:
http://localhost:5000/7または、加算を行いたい場合は:http://localhost:5000/add
- Grasshopperを開き、
- 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の処理を利用できるようになります。次回は、より複雑なデータの処理や、複数の入力を持つコンポーネントを作成してみましょう!