Google Sketchupのデータのダンプ (Proof of Concept)

C:\Program Files\Google\Google SketchUp 6\Plugins\ に以下のRubyスクリプトnk_dump.rb として保存し,さらに C:\Program Files\Google\Google SketchUp 6\Tools\sketchup.rbPlugins\ にコピーする.

require "sketchup.rb"

unless file_loaded?("nk_dump.rb")

  def nk_dump
    m = Sketchup.active_model
    File.open("#{m.title}.dat", "w") {|f|
      m.active_entities.each{|e|
        case e
        when Sketchup::Edge
          f.print("Edge: ")
	  f.puts(e.start.position.to_s + "--" + e.end.position.to_s)
        when Sketchup::Face
          f.print("Face: ")
          f.puts(e.vertices.map{|v| v.position.to_s + "--" }.join )
	else
          f.print("unsupported: ")
	  f.puts(e.inspect)
        end
      }
    }
  end

  tools = $suStrings.GetString("Tools")
  add_separator_to_menu(tools)
  UI.menu(tools).add_item($suStrings.GetString("nk_dump")) { nk_dump }

  file_loaded("nk_dump.rb")
end

こういう立体図形(くぼみ付きの,1辺1インチの立方体)を作ってから

「ツール」メニューに新設された "nk_dump" をクリックするとこういうデータが(同じフォルダに,拡張子 .dat で)書き出される:

Edge: (0", 1", 0")--(0", 0", 0")
Edge: (0", 0", 0")--(1", 0", 0")
Edge: (1", 0", 0")--(1", 1", 0")
Edge: (1", 1", 0")--(0", 1", 0")
Face: (1", 0", 0")--(0", 0", 0")--(0", 1", 0")--(1", 1", 0")--
Face: (0", 0", 1")--(1", 0", 1")--(1", 1", 1")--(0", 1", 1")--(0.2", 0.2", 1")--(0.2", 0.8", 1")--(0.8", 0.8", 1")--(0.8", 0.2", 1")--
Edge: (0", 0", 1")--(1", 0", 1")
Edge: (0", 1", 1")--(0", 0", 1")
Edge: (1", 1", 1")--(0", 1", 1")
Edge: (1", 0", 1")--(1", 1", 1")
Edge: (0", 0", 0")--(0", 0", 1")
Edge: (1", 0", 0")--(1", 0", 1")
Face: (0", 0", 0")--(1", 0", 0")--(1", 0", 1")--(0", 0", 1")--
Edge: (0", 1", 0")--(0", 1", 1")
Face: (0", 1", 0")--(0", 0", 0")--(0", 0", 1")--(0", 1", 1")--
Edge: (1", 1", 0")--(1", 1", 1")
Face: (1", 1", 0")--(0", 1", 0")--(0", 1", 1")--(1", 1", 1")--
Face: (1", 0", 0")--(1", 1", 0")--(1", 1", 1")--(1", 0", 1")--
Edge: (0.2", 0.2", 1")--(0.8", 0.2", 1")
Edge: (0.8", 0.2", 1")--(0.8", 0.8", 1")
Edge: (0.8", 0.8", 1")--(0.2", 0.8", 1")
Edge: (0.2", 0.8", 1")--(0.2", 0.2", 1")
Face: (0.2", 0.8", 0.5")--(0.2", 0.2", 0.5")--(0.8", 0.2", 0.5")--(0.8", 0.8", 0.5")--
Edge: (0.2", 0.8", 0.5")--(0.2", 0.2", 0.5")
Edge: (0.2", 0.2", 0.5")--(0.8", 0.2", 0.5")
Edge: (0.8", 0.2", 0.5")--(0.8", 0.8", 0.5")
Edge: (0.8", 0.8", 0.5")--(0.2", 0.8", 0.5")
Edge: (0.2", 0.2", 1")--(0.2", 0.2", 0.5")
Edge: (0.2", 0.8", 1")--(0.2", 0.8", 0.5")
Face: (0.2", 0.8", 1")--(0.2", 0.2", 1")--(0.2", 0.2", 0.5")--(0.2", 0.8", 0.5")--
Edge: (0.8", 0.2", 1")--(0.8", 0.2", 0.5")
Face: (0.2", 0.2", 1")--(0.8", 0.2", 1")--(0.8", 0.2", 0.5")--(0.2", 0.2", 0.5")--
Edge: (0.8", 0.8", 1")--(0.8", 0.8", 0.5")
Face: (0.8", 0.2", 1")--(0.8", 0.8", 1")--(0.8", 0.8", 0.5")--(0.8", 0.2", 0.5")--
Face: (0.8", 0.8", 1")--(0.2", 0.8", 1")--(0.2", 0.8", 0.5")--(0.8", 0.8", 0.5")--

これで有限要素法もへっちゃら!(ぇー