# encoding: UTF-8
m = Sketchup.active_model
def mmv(p); [(p.x*25.4).round(1),(p.y*25.4).round(1),(p.z*25.4).round(1)]; end
targets = []
m.entities.each do |e|
  next unless e.is_a?(Sketchup::Group) || e.is_a?(Sketchup::ComponentInstance)
  nm = e.name.to_s
  nm = e.definition.name.to_s if nm.empty?
  targets << [nm, e] if nm =~ /14T절곡/ || nm == "그룹#28"
end
puts "targets=#{targets.map{|a,b| a}.inspect}"
targets.each do |nm, e|
  b=e.bounds; tr=e.transformation
  puts "== #{nm} =="
  puts "  bbox #{mmv(b.min)}..#{mmv(b.max)} (X#{((b.max.x-b.min.x)*25.4).round(1)} Y#{((b.max.y-b.min.y)*25.4).round(1)} Z#{((b.max.z-b.min.z)*25.4).round(1)})"
  ents = e.definition.entities
  grp = Hash.new(0.0)
  ents.grep(Sketchup::Face).each do |f|
    n = f.normal.transform(tr)
    grp[[n.x.round(2), n.y.round(2), n.z.round(2)]] += f.area*645.16
  end
  grp.sort_by{|k,v| -v}[0,6].each{|k,v| puts "   n=#{k.inspect} area=#{(v/100).round(1)}cm2"}
  zs = ents.grep(Sketchup::Face).select{|f| f.normal.transform(tr).z.abs > 0.99}.map{|f| (f.bounds.center.transform(tr).z*25.4).round(1)}.uniq.sort
  xs = ents.grep(Sketchup::Face).select{|f| f.normal.transform(tr).x.abs > 0.99}.map{|f| (f.bounds.center.transform(tr).x*25.4).round(1)}.uniq.sort
  puts "   수평면 Z=#{zs.inspect}"
  puts "   수직면 X=#{xs.inspect}"
  h=0; ents.grep(Sketchup::Face).each{|f| f.loops.each{|lp| h+=1 unless lp.outer?}}
  puts "   내부루프수=#{h}  solid=#{(e.manifold? rescue 'n/a')}"
end
"CAND3"
