Grasshopper :: Pythonの”Command”とButtonの注意点
今回は、Pythonでrhinoscriptsyntaxの”Command”を使用した際の注意点についてです。
Canvasのフリーズ
RhinoのコマンドをPythonで操作するには、
rhinoscriptsyntaxの“Command”関数を使用します。
その際、if文で”True”の時に実行したい場合下図のように
[Button]や[Boolean]コンポーネントを繋ぐことがあります。
(ここではrs.Command("_move")
のコマンドを入力します。)
ここで[Button]コンポーネントを繋いでButtonをTrueにすると、
Canvasがフリーズするバグが発生してしまいます。
(Canvasをパンやズームすることはできますが、コンポーネントを選択できなくなってしまいます。。)
解決策
それでは解決策を3つほど挙げてみます。
- [Button]コンポーネントを使わない。
- [Data Dam]コンポーネントで遅延させる。
- [Button]をもう一度クリックする。
です。以下それぞれ説明していきます。
1.[Button]コンポーネントを使わない
[Button]コンポーネントでなく、[Boolean]コンポーネントで切り替えればCanvasのフリーズは起こらないので、[Boolean]で良い場合はこちらを使うと良いです。
2.[Data Dam]コンポーネントで遅延
[Button]コンポーネントを使用したい場合は、 [Button]コンポーネントに[Data Dam]コンポーネントを繋ぎButton Clickの入力を遅らせるとフリーズしません。
(理由はちょっとわかりません。。)
3.[Button]をもう一度クリック
実は、Canvasがフリーズした状態で[Button]をもう一度クリックすると、
フリーズが解除されます。
ですが、あまりバグが発生する状況を作りたくないので、
1,2で解決した方が良いように思います。
最後に
以上Canvasがフリーズするバグと解決策について紹介しました。
ちなみにC#コンポーネントでも同様のバグがあるようで、
ずいぶん前のForumに投稿がありました。
こちらも併せてご参照いただければと思います。
使用した主なコンポーネント
- [Python Script] (Maths > Script > Python Script)
- [Button] (Params > Input > Button)
- [Data Dam] (Params > Util > Data Dam)