今回は、FlaskアプリケーションにHopsサーバーを組み込んで、カスタムコンポーネントを作成する方法について解説します。Hopsは、RhinoのGrasshopper環境と連携するためのPythonライブラリで、Flaskを使ってWebサーバーとして動作します。この手法を使うと、FlaskアプリケーションからGrasshopperコンポーネントを簡単に呼び出すことができるようになります。
以下のコードでは、FlaskとHopsを使用して「Xの値が70であるかをチェックするコンポーネント」を作成しています。
必要なライブラリ
まず、必要なライブラリをインストールします。以下のコマンドでインストールできます:
pip install ghhops-server Flask
if文-1:check-x
x が 70 の場合は 1、それ以外は 0 を返します。
import ghhops_server as hs
from flask import Flask
# Flaskアプリケーションを作成
app = Flask(__name__)
# Hopsサーバーを作成しFlaskアプリに関連付け
hops = hs.Hops(app)
# Hopsコンポーネントを定義
@hops.component(
"/check-x",
name="Check X",
inputs=[hs.HopsInteger("X", "X", "Value of X")],
outputs=[hs.HopsInteger("Result", "R", "0 or 1")]
)
def check_x(x):
# x が 70 の場合は 1、それ以外は 0 を返す
if x == 70:
return 1
return 0
# Flaskアプリを実行
if __name__ == "__main__":
app.run(debug=True, port=5000)
1. Flaskアプリケーションの作成
app = Flask(__name__)
ここでは、Flaskを使ってWebアプリケーションを作成します。このappオブジェクトが、Flaskアプリケーション全体を管理します。
2. Hopsサーバーの作成
hops = hs.Hops(app)
Hopsサーバーを作成し、Flaskアプリケーションに関連付けています。このhopsオブジェクトを使って、FlaskでHopsのコンポーネントを定義できます。
3. Hopsコンポーネントの定義
@hops.component(
"/check-x",
name="Check X",
inputs=[hs.HopsInteger("X", "X", "Value of X")],
outputs=[hs.HopsInteger("Result", "R", "0 or 1")]
)
def check_x(x):
# x が 70 の場合は 1、それ以外は 0 を返す
if x == 70:
return 1
return 0
ここでは、/check-xというURLエンドポイントを定義し、Xという整数を入力として受け取ります。もしXが70の場合、1を返し、それ以外の場合は0を返します。このように、Hopsを使ってGrasshopperで使用できるカスタムコンポーネントを作成しています。
4. Flaskアプリの実行
if __name__ == "__main__":
app.run(debug=True, port=5000)
最後に、Flaskアプリケーションをローカルサーバーで実行します。debug=Trueにすることで、コードの変更を即座に反映させることができます。ポートは5000番に設定しています。
動作の確認
このコードを実行した後、ブラウザでhttp://localhost:5000/check-xにアクセスすると、Xの値を入力することができ、その結果に応じて1または0が返されます。このようにして、FlaskとHopsを使って、Grasshopper環境に組み込むことができるカスタムコンポーネントを簡単に作成することができます。
Xが70の時

Xが70以外の時

まとめ
このサンプルコードを元に、さらに複雑なコンポーネントを作成して、RhinoのGrasshopperで使用することができます。Hopsを使うことで、Flaskを介してインタラクティブに操作できるGrasshopperコンポーネントを簡単に作成できるので、実際のプロジェクトでも活用してみましょう。