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



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


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

RSS



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

Google SketchUpで日影アニメーション!?

以前、Google SketchUp緯度・経度や方位の指定を行うRubyスクリプトを作成しました。で、Google SketchUpでほぼ正確な日影のシミュレーションができるようになったわけですが、日影アニメーションも作成してみたいと思ったので少し考えておりました。SketchUpのページタブ(?)機能を使用すると、SketchUp上で日影アニメーションのようなことはできるのですが、ムービーを作れないかと。

で、またまた簡単なRubyスクリプトを作成してみました。ムービーといっても、拙作のShadow Simulatorのように日付と開始・終了時刻、時間間隔(分単位)を指定することにより、連続してJPEG形式の静止画ファイルを書き出すというものです。ですから、実際にムービーを作成するには、別途、Windows ムービー メーカーAVI Makerなどの静止画からムービーを作成するソフトウエアが必要になります。

以下のスクリプトをSketchUpのPluginsフォルダにShadowImages.rbという名前で保存してからSketchUpを起動すると、[Tools]メニューに[ShadowImages]というメニューが追加されます。スクリプトを実行する前に、影を表示し(当然!)、以前作成した緯度・経度や方位の指定を行うRubyスクリプト天越ブログさんの位置情報記入スクリプトなどで緯度・経度などを指定しておいてください。

スクリプトを実行して日付と開始・終了時刻、時間間隔(分単位)を指定すると、JPEG形式の静止画ファイルがマイドキュメントフォルダに"ShadowImages_0800.jpg"のような名前で作成されると思います。相変わらずRuby自体よくわかっていないのと、エラー処理なども特にしていませんので、うまく動作しい場合があるかもしれません。あと、大規模なあるいは複雑な形状の建物だとどうなるかわかりません。(^^ゞ 取り敢えずウチではうまく動いていて、それなりに役立っているような気が...

※ 以下のスクリプトはインデントが全角スペースになっています。半角スペースに置換して利用してください。すみません。

require 'sketchup.rb'

class ShadowImages

def initialize
  model = Sketchup.active_model
  shadowinfo = model.shadow_info

  prompts = ["Year", "Month", "Day", "StartTime", "EndTime", "Interval(min)"]
  values = [Time.now.year, Time.now.month, Time.now.day, 8, 16, 60]
  results = inputbox prompts, values, "ShadowImages"

  return if not results

  cyear = results[0]
  cmonth = results[1]
  cday = results[2]
  stime = results[3]
  etime = results[4]
  interval = results[5]

  path = ENV["USERPROFILE"] + "\\My Documents\\ShadowImages_"
  t = stime.prec_f

  while t <= etime.prec_f
    chour = t.truncate
    cmin = ((t - chour) * 60).truncate
    # csec = (((t - chour) * 60 - cmin) * 60).round
    csec = 0.0

    ctime = Time.gm cyear, cmonth, cday, chour, cmin, csec
    shadowinfo["ShadowTime"] = ctime

    Sketchup.set_status_text "Current Time: " + ctime.to_s
    # UI.messagebox "Current Time: " + ctime.to_s

    fname = sprintf("%02d", chour) + sprintf("%02d", cmin) + ".jpg"
    view = model.active_view
    view.write_image path + fname
    # view.write_image filename, <width>, <height>, <antialias>, <compressionFactor>

    t += interval.prec_f / 60
  end

  UI.messagebox "Finish!"

end

end

if (not file_loaded?("ShadowImages.rb"))
  add_separator_to_menu("Tools")
  UI.menu("Tools").add_item("ShadowImages") { ShadowImages.new }
end

file_loaded("ShadowImages.rb")

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

Trackback:

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