# encoding: UTF-8
m = Sketchup.active_model
sel = m.selection
puts "선택수=#{sel.count}"
sel.each_with_index do |e, i|
  nm = (e.respond_to?(:name) ? e.name.to_s : '')
  nm = "(무명)" if nm.empty?
  nm += " <def:#{e.definition.name}>" if e.is_a?(Sketchup::ComponentInstance)
  b = e.bounds
  puts "[#{i}] #{e.class} #{nm} bbox x %.2f..%.2f y %.2f..%.2f z %.2f..%.2f (%.1f x %.1f x %.1f)" %
    [b.min.x.to_mm,b.max.x.to_mm,b.min.y.to_mm,b.max.y.to_mm,b.min.z.to_mm,b.max.z.to_mm,
     (b.max.x-b.min.x).to_mm,(b.max.y-b.min.y).to_mm,(b.max.z-b.min.z).to_mm]
  next unless e.is_a?(Sketchup::Group) || e.is_a?(Sketchup::ComponentInstance)
  ents = e.is_a?(Sketchup::Group) ? e.entities : e.definition.entities
  tr = e.transformation
  puts "    solid=#{e.respond_to?(:manifold?) ? e.manifold? : '?'} faces=#{ents.grep(Sketchup::Face).size} vol=%.0fmm3" % ((e.respond_to?(:volume) ? e.volume.to_f : 0)*(25.4**3))
  fs = ents.grep(Sketchup::Face).sort_by{|f| -f.area}
  fs.first(6).each_with_index do |f,j|
    n = f.normal.transform(tr)
    fb = Geom::BoundingBox.new; f.vertices.each{|v| fb.add(v.position.transform(tr))}
    puts "    면[%d] area=%.0fmm2 n=(%.3f,%.3f,%.3f) loops=%d verts=%d x %.1f..%.1f y %.1f..%.1f z %.1f..%.1f" %
      [j, f.area*645.16, n.x,n.y,n.z, f.loops.size, f.outer_loop.vertices.size,
       fb.min.x.to_mm,fb.max.x.to_mm,fb.min.y.to_mm,fb.max.y.to_mm,fb.min.z.to_mm,fb.max.z.to_mm]
    f.loops.reject{|l| l.outer?}.each do |l|
      lb=Geom::BoundingBox.new; l.vertices.each{|v| lb.add(v.position.transform(tr))}
      puts "        홀 c=(%.2f,%.2f,%.2f) Ø≈%.2f" % [((lb.min.x+lb.max.x)/2).to_mm,((lb.min.y+lb.max.y)/2).to_mm,((lb.min.z+lb.max.z)/2).to_mm,(lb.max.x-lb.min.x).to_mm]
    end
  end
end
nil
