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")
*1:1.8.0 ベース
*2:インストールディレクトリ/ruby/docs/ 以下に html があります