複数人で協働するGrasshopper/Pythonのティップスです。僕は、スクリプトコンポーネント(Python,C#)を使ってプロジェクトに参加することが多いのですが、通常の使い方(※1)をしている人とのコラボレーションの時に便利なのがsticky変数です。
この変数は組み込みのもので、import scriptcontext することで使えるようになります。
sc.stickyは辞書型(Dictionary)なので、Keyと値をセットで追加していくことになります。sticky_in.pyの6行目と9行目から始まるif文は「もし'var'や'hello'というKeyの変数がすでに入っていなければ足してください」ということになります。
数字や文字といった値も入りますし、Pythonはすべてオブジェクトなので、関数も入れることができます。9行目ではsc.sticky['hello']にhello()という3行目で作った関数を入れ込んでいます。
他のコンポーネント(sticky_out.py)の中では、3行目のように関数を呼び出したり、値を取得・編集することができます。
これを使うと大きく二つのことが便利になります。
一つは、計算ごとに値が保存されているので、例えばGrasshopperの計算を何度も繰り返す時(※2)の値を保存・更新する必要があるとき。
もう一つは、PythonコンポーネントをCopy&Pasteされることになっても中身の関数が同じ動きをすることを保証したいときです。コンポーネントは簡単にコピペすることができるので、コンポーネントをスクリプトを書く人が更新して、それが複数箇所で使われているとバージョン管理が難しくなってしまいます。そんな時に関数だけ一括で管理しておけば、コピペされたコンポーネントの関数はすべて同じ挙動をすることが保障されます。※3
便利ですが、あまり多用しすぎると全体の構成も複雑になりがちですが、スコープを飛び越えたglobal変数やクラスでいうとstaticなメンバーやメソッドを扱えるのでスクリプトの幅も広がります。
※1: ビジュアルプログラミングプラットフォームとして、コンポーネントをつなげて組み上げる使い方。
※2: Timerを使ったり、ほかのシミュレーションと連携させたり、Galapagosを使ったり。
※3: 外部.pyファイルを読み込む、importする方法もありますが、スクリプトエンジンを更新しなくて済む分手軽に思います。
コメントをするにはログインしてください。