# encoding: UTF-8
# 선택 엔티티를 '하부프레임커버' 그룹으로 묶기 (내부 그룹 구조 유지)
m = Sketchup.active_model
sel = m.selection.to_a
puts "선택수=#{sel.size}"
if sel.empty?
  puts "선택 0개 - 중단"
else
  sel.each do |e|
    nm = (e.respond_to?(:name) && !e.name.to_s.empty?) ? e.name : '(무명)'
    nm += " <def:#{e.definition.name}>" if e.is_a?(Sketchup::ComponentInstance)
    b = e.bounds
    puts "  #{e.class} #{nm} bbox x %.2f..%.2f y %.2f..%.2f z %.2f..%.2f" %
      [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]
  end
  top = sel.select { |e| e.parent == m.entities || e.parent.is_a?(Sketchup::Model) }
  puts "최상위 소속 선택물=#{top.size} / 전체=#{sel.size}"
  tgt = top.empty? ? sel : top
  m.start_operation('하부프레임커버 그룹화', true)
  g = m.entities.add_group(tgt)
  g.name = '하부프레임커버'
  m.commit_operation
  b = g.bounds
  puts "그룹 생성: #{g.name} 자식수=#{g.entities.count} bbox x %.2f..%.2f y %.2f..%.2f z %.2f..%.2f" %
    [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]
  puts "포함 부재:"
  g.entities.each do |e|
    next unless e.is_a?(Sketchup::Group) || e.is_a?(Sketchup::ComponentInstance)
    nm = (e.respond_to?(:name) && !e.name.to_s.empty?) ? e.name : '(무명)'
    nm += " <def:#{e.definition.name}>" if e.is_a?(Sketchup::ComponentInstance)
    bb = e.bounds
    puts "  - #{nm} (하위그룹 #{(e.is_a?(Sketchup::Group) ? e.entities : e.definition.entities).grep(Sketchup::Group).size}개 유지) bbox x %.1f..%.1f y %.1f..%.1f z %.1f..%.1f" %
      [bb.min.x.to_mm,bb.max.x.to_mm,bb.min.y.to_mm,bb.max.y.to_mm,bb.min.z.to_mm,bb.max.z.to_mm]
  end
  loose = g.entities.count{|e| !(e.is_a?(Sketchup::Group) || e.is_a?(Sketchup::ComponentInstance))}
  puts "그룹 외 낱개 엔티티=#{loose}"
  m.save
  puts "SAVED #{File.mtime(m.path)} TOP=#{m.entities.count}"
end
nil
