SeaGate Blog
本館 別館 ブログ
プロフィール
スポンサーサイト
SeaGateコレクション



アーカイブ
ブックマーク
検索


カウンター
合計: 1440633
本日: 228
昨日: 331
コントロールパネル
BROACHのアカウントをお持ちの場合、こちらからログインして下さい

RSS



Powered By
プロバイダーぷらら | Broach v1.3.2 (1522)

Ruby on Google SketchUP

SketchUpRubyでマクロを作成してユーザ独自のコマンドなどを作成することができます。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 SketchUpGoogle Earthと組み合わせて使用することを前提にしているせいかこの項目がなく、日影シミュレーションのようなことができるにも関わらず、与条件などが不透明なのが残念でした。

また、Google SketchUpGoogle Earthと同時起動すると重いので、Google Earthなしで場所の指定などができれば何かと便利ですし、Google Earthからビューをインポートするとタイムゾーンのオフセット値が間違っている場合があって、時間がズレてしまいます。(本来このような用途は想定していないでしょうから仕方がありませんが...まぁ、もう少し無料版で遊んだらPro 5を買いたいと思います。)

で、Rubyは全く初めてなのですが、手始めにサンプルを組み合わせてこれらの項目を確認・設定できる簡単なスクリプトを作成してみました。こんな形でRubyに触れることになるとは予想もしませんでしたが...これからRubyをもう少し勉強してみたいと思います。

require 'sketchup.rb'

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)に設定します。

SketchUp DOWNLOADS
>> Ruby Scripts
オブジェクト指向スクリプト言語 Ruby
>> http://www.ruby-lang.org/ja/
SeaGate HomePage
>> 緯度・経度取得

このエントリーをはてなブックマークに追加  Clip to Evernote  Spring it! 
SeaGate: 2006.6.3 | コメント (3) | トラックバック (0) | リンク (0) | ▲TOP

Comments: (3)

 awaji_aic: 2006.6.23 09:10:00
こんにちは。
公開されたスクリプトをSketchUpへ持っていったのですが、エラーがでました。
もちろん、拡張子は.rbのテキストファイルです。
何か原因がありますでしょうか?
 awaji_aic:  16:44:47
分かりました。私の環境では
$exStrings.GetStringと、その括弧を除けば
動作しました。理由は分かりませんけど・・。
これで日影の検討などできそうですね。
 SeaGate:  23:19:47
awaji_aicさん、こんにちわ。
ここに掲載したスクリプトはGoogle SketchUpに付属するサンプルを参考に作成したのですが、Pluginsフォルダに"LangHandler.rb"等が必要なようですね。標準でインストールされると思っていました。
"LangHandler.rb"は多言語対応のために"string"ファイルに記述された適切な言語のメッセージを呼び出すために用いられているようです。Google SketchUpは英語版しかありませんから、awaji_aicさんが試されたように、"$exStrings.GetString"を外しても特に支障ないものと思います。

Trackback:

このエントリーのトラックバックURL:
http://pub.ne.jp/tb.php/177131
inserted by FC2 system