# encoding: UTF-8
m = Sketchup.active_model
YMID=8142.55
root=m.entities.grep(Sketchup::Group).find{|g| g.name=="하부마운트커버_v4R_20260919"}
acc=[]; mn=[1e9]*3; mx=[-1e9]*3; ys=[]; zs=[]; 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{|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
walk.call(root,root.transformation)
vol=acc.map{|a| a[1]}.inject(:+); ys.uniq!
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(',')})  단면깊이=#{(122.0-mn[2]).round(1)}mm"
puts "중량=#{(vol*16387.064/1e6*7.85).round(1)}kg"
puts "결합면 Z=#{zs.uniq.inspect} 면적=#{(tot/100).round(1)}cm2 -> #{zs.uniq.length==1 ? '수평 통과' : '불일치'}"
puts "좌우대칭 mismatch=#{ys.reject{|y| ys.any?{|o| ((2*YMID-y)-o).abs<0.05}}.length}/#{ys.length}"
puts "격자/앵글/채널/리브=#{acc.count{|a| a[0]=~/격자|앵글|채널|리브|늑골|척추/}}"
puts "용접선 Y=7600/8685.1 (다리 위 / 스커트 아래 동일 Y = 상하대칭), M16 볼트 Y=7518 -> 이격 #{(7600.0-7518.0).round(1)}mm, 밀착면 내측끝 7567.2 -> 이격 #{(7600.0-7567.2).round(1)}mm"
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=="하부마운트커버_v4R_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} v4hidden=#{m.entities.grep(Sketchup::Group).find{|g| g.name=='하부마운트커버_v4_20260919'}.hidden?}"
puts "v5/v6 잔여=#{m.entities.grep(Sketchup::Group).select{|g| g.name=~/v5|v6/}.map{|g| g.name}.inspect}"
"V4RV"
