# encoding: UTF-8
m = Sketchup.active_model
YMID = 8142.55
root = m.entities.grep(Sketchup::Group).find{|g| g.name=="하부마운트커버_v6_20260919"}
acc=[]; mn=[1e9]*3; mx=[-1e9]*3; zs=[]; ys=[]; tot=0.0
walk = lambda do |g,tr|
  g.entities.grep(Sketchup::Group).each do |s|
    t = s.transformation*tr
    if s.entities.grep(Sketchup::Group).length>0 then walk.call(s,t)
    else
      acc << [s.name, s.volume, s.manifold?]
      s.entities.grep(Sketchup::Face).each do |f|
        n=f.normal.transform(t); pts=f.vertices.map{|v| v.position.transform(t)}
        pts.each{|p| ys << (p.y*25.4).round(2); 3.times{|k| v2=[p.x,p.y,p.z][k]*25.4; mn[k]=v2 if v2<mn[k]; mx[k]=v2 if v2>mx[k]}}
        if n.z > 0.999
          zz=pts.map{|p| (p.z*25.4).round(2)}.uniq
          if zz.length==1 && zz[0] > 118.0 then tot += f.area*645.16; zs << zz[0] end
        end
      end
    end
  end
end
walk.call(root, root.transformation)
vol = acc.map{|a| a[1]}.inject(:+)
puts "솔리드=#{acc.length} nonsolid=#{acc.reject{|a| a[2]}.map{|a| a[0]}.inspect}"
puts "BBOX (#{mn.map{|v| v.round(1)}.join(',')})..(#{mx.map{|v| v.round(1)}.join(',')})"
puts "전체 단면 깊이(결합면122 - 최저점) = #{(122.0-mn[2]).round(1)}mm"
puts "체적=#{(vol*16387.064/1e6).round(2)}L 중량=#{(vol*16387.064/1e6*7.85).round(1)}kg"
puts "결합면: Z=#{zs.uniq.inspect} 면적=#{(tot/100).round(1)}cm2 -> #{zs.uniq.length==1 ? '수평 통과' : '불일치'}"
ys.uniq!
puts "좌우대칭 mismatch=#{ys.reject{|y| ys.any?{|o| ((2*YMID-y)-o).abs<0.05}}.length}/#{ys.length}"
puts "격자/앵글/채널/리브=#{acc.count{|a| a[0]=~/격자|앵글|채널|리브|늑골|척추/}}"
# M16 소켓 하방 접근 확인 : 볼트열 Y7518 에서 최근접 하방 구조물까지
puts "M16 볼트열 Y=7518 / 스커트 외면 Y=7567.2 -> 소켓 여유 #{(7567.2-7518.0).round(1)}mm (M16 소켓 반경 16 필요)"
puts "== 간섭 =="
m.entities.each do |e|
  next unless e.is_a?(Sketchup::Group)||e.is_a?(Sketchup::ComponentInstance)
  next if e.hidden?
  nm=e.name.to_s; nm=e.definition.name.to_s if nm.empty?
  next if nm=="하부마운트커버_v6_20260919"
  b=e.bounds
  next if b.min.x*25.4>mx[0]||b.max.x*25.4<mn[0]||b.min.y*25.4>mx[1]||b.max.y*25.4<mn[1]||b.min.z*25.4>mx[2]||b.max.z*25.4<mn[2]
  puts "  #{nm.inspect} Z#{(b.min.z*25.4).round(1)}~#{(b.max.z*25.4).round(1)} Y#{(b.min.y*25.4).round(1)}~#{(b.max.y*25.4).round(1)}"
end
m.selection.clear; m.selection.add(root); m.active_view.zoom(root)
puts "SEL=#{m.selection.length} hidden=#{m.entities.grep(Sketchup::Group).select{|g| g.hidden?}.length}개 MODIFIED=#{m.modified?}"
"V6V"
