Ruby on Google SketchUP
SketchUpはRubyでマクロを作成してユーザ独自のコマンドなどを作成することができます。Google SketchUpでもSketchUp Pro 5と同様にRubyをサポートしており、sketchupjapan.comによると「両バージョンともRubyをサポートしていますが、スクランブル配列RubyスクリプトはGoogle SketchUpでは動作しません。」とのことです。(んっ、スクランブル配列って何だ?)
Rubyは名前だけは聞いたことがあって、以前からちょっと面白そうなので試してみたいと思っていました。インターネットの世界(Google)と3Dモデラ(SketchUp)とオブジェクト指向スクリプト言語(Ruby)という組み合わせにはなかなか絶妙な感があります。Googleが買収したことでインターネットな人たちがSketchUpをHackするとまた意外な利用方法を発想してくれそうで楽しみです。
実際、Ruby勉強会@関西で加速度センサを使用してノートパソコンを傾けるとGoogle SketchUpの画面も傾くというデモがあったという記事もありましたし、RSSを読み込んでSketchUp上に表示するPluginを作成して公開されている方もいます。ちょっと驚愕!
ところで、私はこんなプログラムを作ったりしてきたので、影にはちょっとうるさいです。(^^ゞ SketchUp Pro 5には[Model Info]ダイアログに[Location]という項目があって、場所や方位、方位の表示・非表示を選択できるようなのですが、Google SketchUpはGoogle Earthと組み合わせて使用することを前提にしているせいかこの項目がなく、日影シミュレーションのようなことができるにも関わらず、与条件などが不透明なのが残念でした。
また、Google SketchUpとGoogle Earthと同時起動すると重いので、Google Earthなしで場所の指定などができれば何かと便利ですし、Google Earthからビューをインポートするとタイムゾーンのオフセット値が間違っている場合があって、時間がズレてしまいます。(本来このような用途は想定していないでしょうから仕方がありませんが...まぁ、もう少し無料版で遊んだらPro 5を買いたいと思います。)
で、Rubyは全く初めてなのですが、手始めにサンプルを組み合わせてこれらの項目を確認・設定できる簡単なスクリプトを作成してみました。こんな形でRubyに触れることになるとは予想もしませんでしたが...これからRubyをもう少し勉強してみたいと思います。
def mytest01
model = Sketchup.active_model
shadowinfo = model.shadow_info
prompts = ["DisplayNorth", "Longitude", "Latitude", "NorthAngle", "TZOffset"]
values = [shadowinfo["DisplayNorth"], shadowinfo["Latitude"], shadowinfo["Longitude"], shadowinfo["NorthAngle"], shadowinfo["TZOffset"]]
enums = ["true|false"]
results = inputbox prompts, values, enums, "mytest01"
return if not results
results[0] == "true" ? shadowinfo["DisplayNorth"] = true : shadowinfo["DisplayNorth"] = false
shadowinfo["Latitude"] = results[1]
shadowinfo["Longitude"] = results[2]
shadowinfo["NorthAngle"] = results[3]
shadowinfo["TZOffset"] = results[4]
end
if( not file_loaded?("mytest01.rb") )
add_separator_to_menu($exStrings.GetString("Tools"))
UI.menu($exStrings.GetString("Tools")).add_item($exStrings.GetString("mytest01")) { mytest01 }
end
file_loaded("mytest01.rb")
※ エラーが出る場合は赤字の"$exStrings.GetString("とその閉じ括弧")"を削除してみてください。
SketchUpのPluginsフォルダにmytest01.rb という名前で保存してから起動すると、[Tools]メニューに[mytest01]という項目が追加されます。mytest01のダイアログのDisplayNorthでtrueを選択すると図のように方位を表す線がオレンジ色で表示されます。それから、日影シミュレーションを行う場合は緯度・経度は当然ですが、TZOffsetを正しい値(日本の場合は9.0)に設定します。
>> Ruby Scripts
オブジェクト指向スクリプト言語 Ruby
>> http://www.ruby-lang.org/ja/
SeaGate HomePage
>> 緯度・経度取得
Comments: (3)
Trackback:
http://pub.ne.jp/tb.php/177131
公開されたスクリプトをSketchUpへ持っていったのですが、エラーがでました。
もちろん、拡張子は.rbのテキストファイルです。
何か原因がありますでしょうか?
$exStrings.GetStringと、その括弧を除けば
動作しました。理由は分かりませんけど・・。
これで日影の検討などできそうですね。
ここに掲載したスクリプトはGoogle SketchUpに付属するサンプルを参考に作成したのですが、Pluginsフォルダに"LangHandler.rb"等が必要なようですね。標準でインストールされると思っていました。
"LangHandler.rb"は多言語対応のために"string"ファイルに記述された適切な言語のメッセージを呼び出すために用いられているようです。Google SketchUpは英語版しかありませんから、awaji_aicさんが試されたように、"$exStrings.GetString"を外しても特に支障ないものと思います。