【Grasshopper】Grasshopper Python 上級編

皆様こんにちは。
AMDlabの齋藤です。
今回はGrasshopperで扱えるPythonの上級編をいくつかピックアップして、まとめていきたいと思います。

今回の内容より簡単な初級・中級編は前に記事にしております。以下よりご確認ください。

【Grasshopper】Grasshopper Python 初級・中級編

それでは始めましょう。
今回のデータはこちらに挙げております。

https://github.com/AMDlab/TechBlog-GrasshopperPythonAdvanced

これまでに作成した記事


これまでに作成したGrasshopper Pythonの記事を紹介しつつ、アップデートがある場合はそちらの紹介もしたいと思います。

【GHPython】GHPythonマニアックな層に向けた小ネタ集

こちらは、森山さんが作成した記事になります。
このときはまだRhino7ですが、現在も使える小ネタがいくつかあります。
以下がここで紹介されている小ネタになります。

  • Componentの下のメッセージをつける
  • Input / Outputに説明を付ける2通りのやり方
  • Outputを動的に増やす
  • メニューに項目を追加する

ちなみにRhino8のPython 3 Script含めすべてのScriptコンポーネントでは、Input / Outputに説明を付ける方法が追加されました。
コンポーネント右クリック、「Tooltip(Optional)」から文字を入力することでもできるようになっています。

【Grasshopper】Python関数をGHで作ってみよう

こちらは、私が以前作成した記事になります。
Rhino8での外部ファイルのコードをGH側のPythonへ流すような処理方法を作成しています。

ちなみに紹介しきれなかった項目として、
GHで使えるPythonライブラリしか使っていないのであれば、別のPythonファイルの関数も叩くことができます。
例えばGHのPython 3 Scriptのscriptインプットにpy_func.pyまでのファイルパスを入力してpy_func.pyをGHで動かします。
ここでpy_func.pyから別のpythonファイルother.pyの関数を呼び出すことができます。
ただし、other.pyの関数は変更した場合、GH側のPythonではエンジンの再起動が必要なようです。

他にもいくつかGrasshopperでPythonを利用している記事は作成しておりますので、ぜひ探してみてください。

GhPython(Rhino7までのPythonコンポーネント)の出し方


次はRhino7までのPythonコンポーネントを出す方法です。
最新Rhino8のPython 3 ScriptやIronPython 2 Script等は新しい分、Rhino7のGhPythonコンポーネントより使い勝手が悪かったり、今回利用するTipsが使えなかったりする場合があります。
しかし、GhPythonは廃止されてしまったため、普通の手順では出すことができなくなっています。
そのため廃止されたコンポーネントの出し方を紹介したいと思います。

廃止されたコンポーネントはCreate Component Pop-upを出して「#」を入力してから当該の廃止されたコンポーネント名を入力することで出すことができます。
今回は「#Python」と入力して、GhPythonを出します。

1つ注意しなければならないのは廃止されたコンポーネントは、いつ使えなくなるかわからないことです。
廃止されたコンポーネントは今後使える保証はないので、できるだけ新しいものを利用できればと思います。

Python 3 Script(Rhino8)のライブラリのインストール


Python 3 Scriptのライブラリのインストール方法を紹介します。
こちらは以前の「【Grasshopper】Python関数をGHで作ってみよう」でも扱ってはいます。
NumPyやSciPy、さらにOpenSeesPy等がインストール可能です。

インストール方法はInstall Packageボタンから指定のライブラリをインストールする方法と、
プログラムに記述する方法があります。

 

いくつかのライブラリでは、環境をsite-packagesへ指定しないといけないものもあります。

他に紹介したい内容があったりしますが、紹介したい量が多かったり、まだ挙動が安定しなかったりとしているため、後日紹介できればと思います。

カスタムコンポーネントを呼び出す


カスタムコンポーネントをghpythonlib.componentsでPythonから呼び出す方法をことができます。
例としてAMDlabで開発したPheasantのBoxコンポーネントを実行してみます。

 

 

ちなみにC# Scriptでも以下の方法で呼び出すことができます。

 

 

処理速度は正直なところ、Python、C#どちらの方法でも遅いです。
できるのであればRhinocommonやライブラリ、NuGetの活用等、他の方法で代替できればと思います。

Pythonコンポーネントの設定


新しいScriptコンポーネントでは、Shiftキーを押しながら右クリックをすると詳細な設定ができます。
ここでは、その中でも有用なものを紹介できればと思います。

Default Python Hint
Python 3 Script, IronPython 2 Script等で表示される項目です。
コンポーネントを出したり、Inputを増やしたときのInputのPython Hintをno hintかghdoc objectにするかを選べます。

Copy Parameters/Paste Parameters
Scriptコンポーネントで表示される項目です。
コンポーネントのInput Outputのパラメーター情報をコピー&貼り付けができます。

さらにC#でRunScriptの引数を修正して、Inputを作ってコピーし、Pythonに貼り付けを行うことができます。
これで面倒だったInput Outputパラメーターの作成が楽になります。

デバッグ


Rhino8からデバッグが行えるようになったのでその方法を紹介します。

ブレークポイントの設定
ブレークポイントを行番号の左側をクリックして設定します。
設定されると赤丸がつきます。

デバッグの実行
ブレークポイントを設定すると実行ボタンに虫が付きます。
この状態で実行するとデバッグを開始できます。

上図の状態では編集はデバッグが終わるまでは編集ができませんが、変数に何が入っているかを見ることができます。
今回はPoint3dが入っており、その中身を詳しく見ることができました。

ステップオーバー、ステップイン、ステップアウト、停止
デバッグではステップオーバー、ステップイン、ステップアウトも実行できます。
詳しい説明は省きますが、デバッグで行える基本的な操作をすることができます。

C#でも同様にデバッグが行えます。

さらにウォッチタブでは、変数や式を監視することもできます。
GHファイルを保存した後、再度開いたとき、現在はブレークポイントは外されるようです。
Item AccessにListを入力したときや、Treeを入力したとき、ListやTreeの回数分デバッグが回ります。

Grasshopper Pythonで利用できる特殊なパラメーター


GrasshopperのPythonにはGhPythonからある特殊なパラメーターが利用でき、それを紹介します。
現在非推奨となって、廃止される可能性があるものもありますが、有用でしたので入れております。

ghenv
このPythonコンポーネント本体や後述するLocalScope等にアクセスすることができます。
これを利用してGrasshopperの動作を変更させるのは非推奨だといわれています。
https://github.com/mcneel/ghpython/blob/master/Component/PythonEnvironment.cs

ghenv.LocalScope
ghenvのパラメーターで、古いGhPythonで利用できます。
このパラメーターはGhPythonを実行した後に利用します。
パラメーターの後に現在利用されているパラメーターを叩くことができ、そこから叩ける関数やパラメーターを補完候補としてみることができます。

ghdoc
RhinoのActiveDocへrhinoscriptsyntaxでアクセスした後、RhinoのActiveDocを触らずにモデルを作成したいときにghdocへ変更します。

 

GrasshopperのDocument(GH_Document)ではないため、その点は注意です。
https://github.com/mcneel/ghpython/blob/master/DocReplacement/GrasshopperDocument.cs

コンポーネント実行後に実行させる


コンポーネント実行後に特定の関数を実行させる方法を紹介します。
あまり利用することはないと思いますが、コンポーネントの処理を戻るようにすることができます。
ただしVisual Scriptingの実装上、処理を戻す処理は無限ループとなったりするので、そうならないように注意が必要です。

今回はDEMOでNumber Sliderを動かしても1に戻るプログラムを作成しました。
無限ループとならないように、既に1となっている場合は処理が戻らないようにしています。

 

実はこの方法以外にもコンポーネント実行後に実行する方法があるのですが、その全体を説明すると量が多くなってしまうので、またの機会にしたいと思います。

おわりに


今回はGrasshopperのPython ScriptのTipsをいくつか紹介しました。
C#でも応用できる内容や、まだ簡単にしか紹介できなかったものもありますが、
これを知っているだけで、GrasshopperのPythonをより有用に活用できるようになったのではないかと思います。
今後紹介しきれなかったものは、また次の機会で紹介できればと思います。


AMDlabでは、開発に力を貸していただけるエンジニアさんを大募集しております。少しでもご興味をお持ちいただけましたら、カジュアルにお話するだけでも大丈夫ですのでお気軽にご連絡ください!
中途求人ページ: https://www.amd-lab.com/recruit-list/mid-career

カジュアル面談がエントリーフォームからできるようになりました。
採用種別を「カジュアル面談(オンライン)」にして必要事項を記載の上送信してください!
エントリーフォーム: https://www.amd-lab.com/entry

AMDlabのSNSアカウントです!ぜひフォローお願いします✨

■ X(旧Twitter):https://x.com/amdlabinc
■ Instagram:https://www.instagram.com/amdlabinc/
■ Facebook:https://www.facebook.com/amdlab.lnc/

BIM
Grasshopper
Tech
C# python
ARTICLES