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つほど挙げてみます。

  1. [Button]コンポーネントを使わない。
  2. [Data Dam]コンポーネントで遅延させる。
  3. [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に投稿がありました。

http://www.grasshopper3d.com/forum/topics/boolean-button-runscript?commentId=2985220%3AComment%3A1812802

こちらも併せてご参照いただければと思います。

 

使用した主なコンポーネント
  • [Python Script] (Maths > Script > Python Script)
  • [Button] (Params > Input > Button)
  • [Data Dam] (Params > Util > Data Dam)

コメントを残す