# encoding: UTF-8
begin
  puts "###DZW-UNHIDE-ALL-20260920"
  m = Sketchup.active_model
  bk = 'E:/도진팩토리/3D스캔및티칭시스템/_자동화/autosave/BACKUP_before_unhideall.skp'
  m.save_copy(bk)
  puts "BACKUP=#{bk}"
  ents = lambda { |s| s.is_a?(Sketchup::Group) ? s.entities : s.definition.entities }
  lab = lambda do |s|
    nm = (s.respond_to?(:name) ? s.name.to_s : '')
    dn = s.is_a?(Sketchup::ComponentInstance) ? s.definition.name.to_s : ''
    nm.empty? ? (dn.empty? ? '(무명)' : "def:#{dn}") : nm
  end
  names = []
  cnt = { 'group' => 0, 'comp' => 0, 'face' => 0, 'edge' => 0 }
  m.start_operation('전체 hidden 해제', true)
  # 1) 태그(Layer) 전부 표시
  lay_on = []
  m.layers.each do |ly|
    unless ly.visible?
      ly.visible = true
      lay_on << ly.name
    end
  end
  # 2) 재귀 unhide
  walk = nil
  walk = lambda do |ent, path, depth|
    ent.grep(Sketchup::Face).each do |f|
      if f.hidden?
        f.hidden = false
        cnt['face'] += 1
      end
    end
    ent.grep(Sketchup::Edge).each do |e2|
      if e2.hidden?
        e2.hidden = false
        cnt['edge'] += 1
      end
    end
    (ent.grep(Sketchup::Group) + ent.grep(Sketchup::ComponentInstance)).each do |s|
      l = lab.call(s)
      if s.hidden?
        s.hidden = false
        if s.is_a?(Sketchup::Group)
          cnt['group'] += 1
        else
          cnt['comp'] += 1
        end
        names << "#{path}/#{l}"
      end
      walk.call(ents.call(s), "#{path}/#{l}", depth + 1) if depth < 6
    end
  end
  walk.call(m.entities, '', 0)
  m.commit_operation
  puts "태그 표시 ON: #{lay_on.length}개 #{lay_on.inspect}"
  puts "hidden 해제: 그룹 #{cnt['group']} / 컴포넌트 #{cnt['comp']} / 면 #{cnt['face']} / 에지 #{cnt['edge']} (그룹·컴포넌트 합 #{names.length}개)"
  names.first(60).each { |n| puts "  #{n}" }
  puts "  ...외 #{names.length - 60}개" if names.length > 60
  vw = m.active_view
  cam0 = vw.camera
  begin
    c = m.bounds.center
    vw.camera = Sketchup::Camera.new(Geom::Point3d.new(c.x - 7000.mm, c.y - 8000.mm, c.z + 4000.mm), c, Geom::Vector3d.new(0, 0, 1))
    vw.zoom_extents
    f = 'E:/도진팩토리/3D스캔및티칭시스템/_자동화/inbox/_unhide_all.png'
    vw.write_image(f, 1600, 1000, true)
    puts "캡처=#{f} 존재=#{File.exist?(f)}"
  rescue Exception => e3
    puts "캡처 실패 #{e3.message}"
  ensure
    vw.camera = cam0
  end
  ok = m.save
  puts "SAVE=#{ok.inspect} modified?=#{m.modified?.inspect}"
  puts "DONE"
rescue Exception => e
  puts "EXC #{e.class}: #{e.message}"
  puts e.backtrace.first(6).join(" | ")
end
nil
