# encoding: UTF-8
m = Sketchup.active_model
def r1(v); (v*25.4).round(1); end
sel = m.selection
puts "SEL COUNT=#{sel.length}"
sel.each_with_index do |e,i|
  nm = e.respond_to?(:name) ? e.name.to_s : ""
  nm = e.definition.name.to_s if nm.empty? && e.respond_to?(:definition)
  puts "[#{i}] #{e.class} name=#{nm.inspect}"
  next unless e.respond_to?(:bounds)
  b=e.bounds
  puts "    bbox (#{r1(b.min.x)},#{r1(b.min.y)},#{r1(b.min.z)})..(#{r1(b.max.x)},#{r1(b.max.y)},#{r1(b.max.z)}) size #{((b.max.x-b.min.x)*25.4).round(1)}x#{((b.max.y-b.min.y)*25.4).round(1)}x#{((b.max.z-b.min.z)*25.4).round(1)}"
  if e.respond_to?(:transformation)
    t=e.transformation
    puts "    scale #{t.xscale.round(5)}/#{t.yscale.round(5)}/#{t.zscale.round(5)} solid=#{(e.manifold? rescue 'n/a')} hidden=#{e.hidden?}"
  end
  next unless e.respond_to?(:definition)
  ents = e.definition.entities
  puts "    ents=#{ents.length} faces=#{ents.grep(Sketchup::Face).length} edges=#{ents.grep(Sketchup::Edge).length} grp=#{ents.grep(Sketchup::Group).length} cmp=#{ents.grep(Sketchup::ComponentInstance).length}"
  ents.grep(Sketchup::Group).each{|s| sb=s.bounds; puts "      sub #{s.name.inspect} (#{r1(sb.min.x)},#{r1(sb.min.y)},#{r1(sb.min.z)})..(#{r1(sb.max.x)},#{r1(sb.max.y)},#{r1(sb.max.z)}) solid=#{(s.manifold? rescue '?')}"}
  ents.grep(Sketchup::ComponentInstance).each{|s| sb=s.bounds; puts "      cmp #{s.definition.name.inspect} (#{r1(sb.min.x)},#{r1(sb.min.y)},#{r1(sb.min.z)})..(#{r1(sb.max.x)},#{r1(sb.max.y)},#{r1(sb.max.z)})"}
  if ents.grep(Sketchup::Face).length > 0
    tr = e.transformation
    h = Hash.new(0.0)
    ents.grep(Sketchup::Face).each{|f| n=f.normal.transform(tr); h[[n.x.round(2),n.y.round(2),n.z.round(2)]] += f.area*645.16}
    h.sort_by{|k,v| -v}[0,8].each{|k,v| puts "      n=#{k.inspect} area=#{(v/100).round(1)}cm2"}
    loops = 0; ents.grep(Sketchup::Face).each{|f| f.loops.each{|lp| loops+=1 unless lp.outer?}}
    puts "      내부루프(구멍)=#{loops}"
    zs = ents.grep(Sketchup::Face).select{|f| f.normal.transform(tr).z.abs>0.99}.map{|f| r1(f.bounds.center.transform(tr).z)}.uniq.sort
    xs = ents.grep(Sketchup::Face).select{|f| f.normal.transform(tr).x.abs>0.99}.map{|f| r1(f.bounds.center.transform(tr).x)}.uniq.sort
    ys = ents.grep(Sketchup::Face).select{|f| f.normal.transform(tr).y.abs>0.99}.map{|f| r1(f.bounds.center.transform(tr).y)}.uniq.sort
    puts "      수평면Z=#{zs.inspect}"
    puts "      수직면X=#{xs.inspect}"
    puts "      수직면Y=#{ys.inspect}"
  end
end
"RD3"
