Rhino+Grasshopper

if文-1|Grasshopper HopsとPythonでカスタムコンポーネントを作成し条件分岐する方法

今回は、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コンポーネントを簡単に作成できるので、実際のプロジェクトでも活用してみましょう。

-Rhino+Grasshopper
-, ,