# encoding: UTF-8
begin
  puts "###DZW-SCAN-WIRE-20260920"
  m = Sketchup.active_model
  ents = lambda { |s| s.is_a?(Sketchup::Group) ? s.entities : s.definition.entities }
  sel = m.selection.to_a
  puts "선택 #{sel.length}개"
  if sel.empty?
    puts "STOP: 선택 0개"
  else
    sel.each_with_index do |e, i|
      nm = (e.respond_to?(:name) ? e.name.to_s : '')
      dn = e.is_a?(Sketchup::ComponentInstance) ? e.definition.name.to_s : ''
      if e.is_a?(Sketchup::Group) || e.is_a?(Sketchup::ComponentInstance)
        tr = e.transformation
        ps = []
        col = nil
        col = lambda do |en, t|
          en.grep(Sketchup::Edge).each { |ed| ed.vertices.each { |v| ps << v.position.transform(t) } }
          (en.grep(Sketchup::Group) + en.grep(Sketchup::ComponentInstance)).each { |q| col.call(ents.call(q), t * q.transformation) }
        end
        col.call(ents.call(e), tr)
        if ps.empty?
          puts "  [#{i}] #{e.class} '#{nm}#{dn}' 정점 없음"
          next
        end
        xs = ps.map { |p| p.x.to_mm }.minmax
        ys = ps.map { |p| p.y.to_mm }.minmax
        zs = ps.map { |p| p.z.to_mm }.minmax
        dims = [(xs[1] - xs[0]), (ys[1] - ys[0]), (zs[1] - zs[0])]
        srt = dims.sort
        puts "  [#{i}] #{e.class} '#{nm}#{dn}' X=#{xs.map { |v| v.round(1) }.inspect} Y=#{ys.map { |v| v.round(1) }.inspect} Z=#{zs.map { |v| v.round(1) }.inspect}"
        puts "       크기=[#{dims[0].round(1)},#{dims[1].round(1)},#{dims[2].round(1)}] 최장=#{srt[2].round(1)} 단면추정=#{srt[0].round(1)}x#{srt[1].round(1)} 정점#{ps.length} scale=[#{tr.xscale.round(4)},#{tr.yscale.round(4)},#{tr.zscale.round(4)}]"
      else
        puts "  [#{i}] #{e.class} (그룹/컴포넌트 아님)"
        if e.is_a?(Sketchup::Edge)
          a = e.start.position
          b = e.end.position
          puts "       Edge #{a.to_a.map { |v| v.to_mm.round(1) }.inspect} -> #{b.to_a.map { |v| v.to_mm.round(1) }.inspect} 길이=#{a.distance(b).to_mm.round(1)}"
        end
      end
    end
    ub = Geom::BoundingBox.new
    sel.each { |e| ub.add(e.bounds) }
    puts "선택 전체 bbox(부모계) min=#{ub.min.to_a.map { |v| v.to_mm.round(1) }.inspect} max=#{ub.max.to_a.map { |v| v.to_mm.round(1) }.inspect}"
  end
  puts "모델 수정 없음"
rescue Exception => e
  puts "EXC #{e.class}: #{e.message}"
  puts e.backtrace.first(5).join(" | ")
end
nil
