Google SketchUp の API は ruby !
http://sketchup.google.com/
http://sketchup.google.com/support/bin/search.py?query=ruby
先日公開された Google SketchUp の API はなんと ruby*1 ! ということで rubyist の間では話題になってたりなかったりします。ということで早速使ってみて RSS を読み込んで表示する単純な Plugin を書いてみました。表示はこんな感じ。
API のドキュメントがまとまっている*2 し、サンプルコードもあるので ruby 使える人ならすぐにでも Plugin 書くことができると思います。使い方も簡単で Plugins ディレクトリに .rb ファイルを放り込むだけ。また window -> ruby Console から対話型のコンソールを使えるので簡単な動作テストが簡単にできるでしょう。
しかし、RSS を読み込むのに大きな問題点があったのです。それは SketchUp に組み込んである ruby では socket 周りが使えない、つまり http でデータの取得ができないのです。セキュリティ考えると解る気もしますが…。
というわけでどうしようもないので `` 使って windows にインストールしてある ruby 叩いてます…。また RSS::Parser も windows にインストールしてある ruby ライブラリの Path を LOADPATH に追加して使ってるので、下記 Plugin を動かすのに windows の ruby が必要だったりします。うーん。
とはいえ、ruby 使って簡単に操作や SketchUp 上のオブジェクトの作成ができるので、ruby 大好きな人は弄ってみると面白いと思いますよ。
以下 RSS 表示スクリプト。Plugins ディレクトリに rssreader.rb という名前で保存してから起動すると、Draw メニューの中に RSSReader というサブメニューが追加されていると思います。
require 'sketchup.rb' $LOAD_PATH << 'C:\ruby\lib\ruby\1.8' require 'rss/1.0' require 'rss/2.0' class RSSReader def initialize @model = Sketchup.active_model @entities = @model.entities @boxes = 0 end def input uri = inputbox(['URL'], ['http://d.hatena.ne.jp/secondlife/rss'], "RSS URL").first rss_draw uri end def draw(title) @entities.add_text( title, [100 * (@boxes % 4), 10 + @boxes / 4 * 100,-1] ) @boxes += 1 end def rss_draw(uri) source = `ruby -r 'open-uri' -e 'puts open("#{uri}").read'` RSS::Parser.parse(source).items.each do |item| draw item.title end end end if( not file_loaded?("rssreader.rb") ) add_separator_to_menu($exStrings.GetString("Draw")) UI.menu($exStrings.GetString("Draw")).add_item($exStrings.GetString("RSSReader")) { RSSReader.new.input } end file_loaded("rssreader.rb")