Rhino+Grasshopper

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

今回はPythonとGrasshopperのHopsを組み合わせて、入力値(スコア)に基づき条件分岐で異なる結果を返すシンプルなコンポーネントを作成します。

以下は、「スコアを受け取り、条件に応じて 01、または 2 を返すコンポーネント」を作成しています。

import ghhops_server as hs
from flask import Flask

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

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

# Hopsコンポーネントを定義
@hops.component(
    "/check-score",
    name="Score",
    inputs=[hs.HopsInteger("Score", "X", "Score of X")],
    outputs=[hs.HopsInteger("Result", "R", "0 or 1 or 2")]
)
def check_score(x):
    if x == 100:    #100の場合は0を返す
        return 0
    elif x >= 70:   #70以上の場合は1を返す
        return 1
    else:
        return 2    #上記以外(69以下)の場合は2を返す


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

コード解説

1. Hopsコンポーネントの定義

このコードは、Hopsコンポーネントとして機能するPython関数を定義しています。
Hopsコンポーネントは、Flaskアプリケーションの一部としてGrasshopperから呼び出され、入力を処理し、結果をGrasshopperに返します。

  • @hops.component デコレーター
    • コンポーネントのエンドポイント、名前、入力、出力を設定します。
    • この例では、エンドポイントが /check-score に設定されています。
@hops.component(
    "/check-score",  # エンドポイントURL
    name="Score",    # コンポーネント名
    inputs=[hs.HopsInteger("Score", "X", "Score of X")],  # 入力定義
    outputs=[hs.HopsInteger("Result", "R", "0 or 1")]    # 出力定義
)
  • 入力と出力の型
    • inputs はコンポーネントが受け取る値を定義します。この例では、HopsInteger型のスコアを受け取ります。
    • outputs はコンポーネントが返す値を定義します。この例では、HopsInteger型で結果を返します。

2. 関数 check_score

check_score 関数は、入力値 x(スコア)を受け取り、条件に応じた結果を返します。

def check_score(x):
    if x == 100:    # 100の場合は0を返す
        return 0
    elif x >= 70:   # 70以上の場合は1を返す
        return 1
    else:
        return 2    # 上記以外(69以下)の場合は2を返す
  • if 文による条件分岐
    1. x == 100 の場合、0 を返します。
      • 例: スコアが100点満点の場合。
    2. x >= 70 の場合、1 を返します。
      • 例: スコアが70点以上の場合。
    3. その他のスコア(69以下) の場合、2 を返します。
      • 例: 不合格や低得点の場合。

この構造により、スコアに基づいた判定を簡単に行うことができます。

Grasshopperとの連携

  1. Flaskサーバーの設定
    Grasshopper Hopsと連携するには、ghhops_server を使ってFlaskサーバーを構築します。サーバーが起動している間、Grasshopperからこの関数を呼び出せます。
  2. Grasshopper Hopsコンポーネントの設定
    • Hopsコンポーネントの Function URLhttp://localhost:5000/check-score を指定します。
    • 入力スライダーや数値パネルを接続し、スコアを入力します。
  3. 結果の確認
    出力パネルには条件に応じた結果が表示されます:
    • 100: 0
    • 75: 1
    • 60: 2

「x」が100の場合は「0」を返す

「x」が70以上の場合は「1」を返す

「x」が70より小さい場合は「2」を返す

応用例

この構造を応用することで、様々な条件分岐ロジックを作成できます。例えば:

  • カスタム評価基準
    if 文の条件を変更し、異なるスコア範囲に応じてカスタムメッセージや評価を返す。
  • 複数の入力に対応
    スコア以外に別の評価基準を追加し、複雑な評価ロジックを実装可能。
  • 他のデータ型との連携
    HopsStringHopsNumber を使って、文字列や浮動小数点数の判定ロジックを作成。

まとめ

このコードは、条件分岐を使ったシンプルな評価ロジックをPythonで実装し、Grasshopper Hopsコンポーネントとして利用する方法を示しています。Pythonの柔軟性とGrasshopperの直感的なUIを組み合わせることで、プロジェクトに応じたカスタムコンポーネントを簡単に作成できます。

これを参考に、自分だけの評価ロジックを作成してみましょう!

-Rhino+Grasshopper
-, ,