皆様こんにちは。
AMDlabの齋藤です。
今回は形態創生コンテストで利用した技術の1つを紹介します。
Pythonで構成しなければならない幾何学的な関数をGHで確認できるようにします。
環境は
Rhinoceros バージョン 8 SR13
NumPy 2.0.2
で、新しいPython 3 Scriptを利用します。
それでは始めましょう。
今回のデータはこちらに挙げております。
https://github.com/AMDlab/TechBlog-Python-func-to-GH
作成する関数
今回作成する関数は、あるベクトルをある平面の法線ベクトルを利用してその平面へ投影する関数を作成しようと思います。
具体的には以下のようなものを作成します。
https://nekojara.city/math-vector-project-on-plane
Pythonの関数作成
まずはPythonのコードを作成します。
Pythonはファイルに保存します。
コードは以下の通りです。
1 2 3 4 5 6 7 8 9 10 |
# r: numpy # venv: site-packages import numpy as np def project_vec(normal, vec): if np.linalg.norm(normal) == 0: return vec return vec - np.dot(normal, vec) / np.linalg.norm(normal)**2 * normal func = project_vec |
Grasshopper上で動くよう、はじめに、ライブラリのインストールを入れています。
最後に関数を変数に格納して、他のコンポーネントで動かせるようにします。
Grasshopperで確認プログラムを作成
次にGrasshopperで関数がちゃんと動くか確認できるプログラムを作成します。
以下のプログラムを作成します。
今回はGrasshopperのPython 3 Scriptコンポーネントを2つ使います。
2つにわける理由として、作成する関数をそのまま増やせる、Python~GHのやり取りの手間が減る、コードを書くとき過剰なエラーが減る等があります。
Pointパラメーターは適当に入れます。
そして、Python 3 Scriptコンポーネントは以下のように入れてきます。
上段のPython 3 Script
Python 3 Scriptを配置し、コンポーネントをShiftを押しながら右クリック
Script Input Parameter ("script") を押します。
他のインプットパラメーターを排除し、作成されたscriptインプットを右クリック、
Synchronize (ファイル更新と同期)、
Input Is Path (ファイルパスからコードを読み取り)をオンにします。
そして、Panelで先ほど作成したPythonのファイルパスを入れます。
アウトプットを func にすれば完了です。
右のPython 3 Script
インプットパラメーターを3つ作り、
func はそのまま、
n と
v をVectorとしてパラメーターのヒントを設定します。
アウトプットパラメーターは
v2 とします。
以下のプログラムを入力します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# r: numpy # venv: site-packages import numpy as np from Rhino.Geometry import Vector3d def to_np(vec_rg): return np.array([vec_rg.X, vec_rg.Y, vec_rg.Z]) def to_rg(vec_np): return Vector3d(vec_np[0], vec_np[1], vec_np[2]) n_np = to_np(n) v_np = to_np(v) v2_np = func(n_np, v_np) v2 = to_rg(v2_np) |
ここで to_np 、 to_rg はRhinoCommon、NumPy間を変換する関数となります。
これで確認の準備ができました。
Pointパラメーターを動かしてみるとちゃんと動いているのが確認できます。
おわりに
今回はPythonの関数をGrasshopperで確認することができるものを作りました。
これでPythonでの関数の作成や、関数がちゃんと動いているかのチェックがしっかりできます。
ただし、GrasshopperのPythonで利用したライブラリが実際に使うPython環境でちゃんと動かない場合があるため、実際のPython環境でもテストは必要にはなります。
Pythonで幾何学的な関数を作成する際には、ぜひ活用してみてください。
AMDlabでは、開発に力を貸していただけるエンジニアさんを大募集しております。
少しでもご興味をお持ちいただけましたら、カジュアルにお話するだけでも大丈夫ですのでお気軽にご連絡ください!
中途求人ページ: https://www.amd-lab.com/recruit-list/mid-career
カジュアル面談がエントリーフォームからできるようになりました。
採用種別を「カジュアル面談(オンライン)」にして必要事項を記載の上送信してください!
エントリーフォーム: https://www.amd-lab.com/entry
COMMENTS