前回の続きです。
SketchUpには、WebDialogというコンポーネントがあります。
これを使うとrubyスクリプトから、フォームを作成でき,
ユーザーと対話的にスクリプトを実行できるわけです。
すごくハマったところ
今回、WebDialog経由でrubyスクリプトを実行する際に、
すごくハマったポイントをお教えします。
動作環境:
mac OS X 10.8.2
SketchUp 8.0.4810
それは・・・入力部品の種類です。
ボタンなどを押した際にjavascriptのコードが実行されるよう、
動作を設定しているのですが、
なんと、入力部品の違いによって、動作の一部が実行されません。
buttonとinput type="button"
結論から言うと、リンクと、\で生成したボタンは、
問題なく動作します。
しかし、\<button>エレメントで生成したボタンは、
window.location=でリダイレクトを行う事ができません。
これができないと、javascriptからrubyコードが呼べないのです。
rubyスクリプトは、javascriptからはurlとして指定する必要があるからです。
サンプルコード
サンプルコードの使い方
まずはSketchUp上で、コードを実行します。
実行すると、こんな画面が表示されます。
1番上のボタンを押すと、ダイアログボックスが1回表示されます。
2番めのボタンを押すと、ダイアログボックスが2回表示されます。
リンクをクリックしても、同様に2回表示されます。
3つとも同じ関数を実行しているのに、buttonエレメントだけは、挙動が違います。
window.locationを指定することができず、rubyのメソッドを呼べません。
ボタンの動作がうまくいかない方は、
参考にしてください。
次回は、ruby側からjavascriptの関数を呼び出す処理について書こうと思います。
VimSketchUpのすすめ
余談ですが、これを読んでいらっしゃる貴方は、どうやってサンプルコードを実行していますか?
Vim上でショートカットを入力するだけで、サンプルコードが実行できたら楽ですよね。
ちょっと心が動いた方には、VimSketchUpをおすすめします。
参考資料
Trimble SketchUp
http://www.sketchup.com/intl/en/developer/docs/ourdoc/webdialog#add_action_callback
Engineering The World
http://engineeringtheworld.wordpress.com/2010/02/16/creating-web-dialogs-in-sketchup-and-making-calls-from-and-to-sketchup/