# encoding: UTF-8
m = Sketchup.active_model
def r1(v); (v*25.4).round(1); end
parent = m.entities.grep(Sketchup::Group).find{|g| g.definition.name=="그룹#2"}
raise "그룹#2 없음" unless parent
tgt = parent.entities.grep(Sketchup::Group).select{|s| s.name == "SWD_06_b_t6_36x140"}
puts "대상 #{tgt.length}개 (삭제 전 기록):"
rec = tgt.map do |s|
  b=s.bounds
  info = {
    name: s.name,
    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)}",
    faces: s.entities.grep(Sketchup::Face).length,
    edges: s.entities.grep(Sketchup::Edge).length,
    vol: (s.volume*16387.064/1000).round(1),
    tr: s.transformation.to_a.map{|v| v.round(6)}
  }
  puts "  #{info[:name]} bbox #{info[:bbox]} 크기 #{info[:size]} faces=#{info[:faces]} edges=#{info[:edges]} #{info[:vol]}cm3"
  puts "    tr=#{info[:tr].inspect}"
  info
end
puts "그룹#2 하위 개수(삭제 전) = #{parent.entities.grep(Sketchup::Group).length}"
begin
  m.start_operation("SWD_06_b 단부거싯 2개 삭제", true)
  n=0
  tgt.each do |s|
    nm = s.name
    s.erase!
    n+=1
    puts "  [#{n}] #{nm} erase! 완료 / 하트비트: 그룹#2 하위=#{parent.entities.grep(Sketchup::Group).length}, 최상위ents=#{m.entities.length}"
  end
  m.commit_operation
  puts "삭제 #{n}개 완료 (단일 operation -> Ctrl+Z 1회로 복원)"
rescue Exception => ex
  m.commit_operation rescue nil
  puts "ERR #{ex.class}: #{ex.message}"
end
puts "== 삭제 후 그룹#2 잔여 구성 =="
parent.entities.grep(Sketchup::Group).each{|s| b=s.bounds
  puts "  #{s.name.inspect} #{((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)}"}
puts "SWD_06_b 잔여 = #{parent.entities.grep(Sketchup::Group).count{|s| s.name=='SWD_06_b_t6_36x140'}}개"
pb = parent.bounds
puts "그룹#2 bbox (#{r1(pb.min.x)},#{r1(pb.min.y)},#{r1(pb.min.z)})..(#{r1(pb.max.x)},#{r1(pb.max.y)},#{r1(pb.max.z)})"
m.active_view.zoom(parent)
puts "MODIFIED=#{m.modified?} SEL=#{m.selection.length}"
"DEL3"
