dwgcompare — 겹쳐보기 전면 교체 + 재비교 오탐 근본수정 + 사용 매뉴얼 (2026-08-06, 2차)
페페 지시: "현재 업그레이드 된 것은 확인했다. 아직 실제 사용자가 쓰는 환경에서 차이점을 인식하는데 보완할 부분이 있다. 일단 겹쳐서 보기가 잘 작동이 안 되는 거 같다. 내가 생각하는 겹쳐서 보기는 신도면이 있고 그 위에 구도면을 전체색상을 한 가지로 통일(빨간색). 도면을 겹쳤을 때 바로 차이나는 부분에 원 마킹 표시, 목록 작성. 사용자가 목록 클릭해서 해당 좌표 확인. 이 시스템이 맞는 거 같다. 수정보완하고 사용 매뉴얼을 작성해서 DEVPLAN에 페이지 생성해줘."
1. 왜 "겹쳐보기가 안 되는 것처럼" 보였나 — 원인 3개
| # | 원인 | 실제 증상 |
|---|---|---|
| ① | 변경분만 겹쳤다 — PaintOverlay가 「변경으로 판정된 엔티티」만 복제(상한 3,000) |
빨강이 드문드문 찍힐 뿐 "겹쳐 보인다"는 느낌이 없다 |
| ② | 변경 0건이면 조기 return — Clusters.Count==0에서 겹쳐보기 전에 빠져나감 |
체크박스를 켜고 돌렸는데 화면에 아무것도 안 생긴다 |
| ③ | 색이 한 색으로 안 통일 — 최상위 엔티티만 ColorIndex=1, 블록 내부는 원래 색 |
겹쳐 놔도 어느 쪽이 구도면인지 눈으로 안 갈린다 |
페페가 말한 그림(신도면 위에 구도면 전체를 빨강 한 색으로)과 구현이 달랐던 것이다. 마킹·목록·목록클릭이동은 이미 있었고 요구와 일치.
2. 고친 것
겹쳐보기 = 구도면 전체를 빨강 한 색으로 (PaintOverlayFull)
- 구도면 모델공간 전 엔티티를 복제(상한 3,000 → 300,000 = 사실상 무제한, 폭주 방지선만).
- 🔑
DuplicateRecordCloning.MangleName이 핵심. 기존Ignore는 이름이 같은 레이어·블록정의를 신도면 것으로 재사용하므로, 그 색을 빨강으로 바꾸면 신도면까지 빨개진다. MangleName은 충돌 심볼을 전부 새 레코드로 복제해 우리가 마음대로 칠해도 신도면이 무사하다. - 색 통일 3중 — ①복제된 레이어 색을 빨강(ByLayer 엔티티가 따라옴) ②최상위 엔티티
ColorIndex=1(명시색도 덮음) ③복제된 블록 정의 내부 엔티티까지 빨강(실무 도면은 블록 내부가 명시색인 경우가 흔하다). - 모델공간엔 블록 참조 1개만 놓는다(
_DWGC_OLD$SNAPSHOT). 이유 2 = ⓐ실수로 빨간 선을 클릭해 끌고 가는 사고 차단(레이어도 잠금) ⓑ재비교 때 지울 게 참조 1개뿐(수만 개를 훑어 지우지 않는다). - 복제 심볼엔 접두어
_DWGC_OLD$→ [마크 지우기]가 이름만 보고 잔재(레이어·블록정의)를Purge로 걷어낸다. 세션이 끊겨도 정리된다. - 변경 0건이어도 겹쳐 그린다(②의 조기 return 제거).
목록 클릭 = 그 자리로 확대
옛 동작은 중심만 옮기는 팬이라, 도면 전체 뷰에서 클릭하면 마크가 점만 하게 남아 "어디로 갔는지 모르겠다"가 됐다. 이제 마크 지름의 6배로 확대(화면비 유지) + 3초 노랑 강조. 팔레트 체크박스 「클릭 시 확대」(기본 켬)로 옛 동작도 선택 가능.
🔴 덤으로 잡은 진짜 버그 — 같은 세션에서 두 번 비교하면 없던 변경 3건
- 실측: 같은 파일 복사본끼리 1회차 변경 0 → 2회차 변경 3(전부 「블록 모양 바뀜」). 겹쳐보기와 무관(끄고 돌려도 재현).
- 원인 = 첫 접근과 두 번째 접근의 값이 다르다(지연 로딩). 1회차 읽기가 곧 워밍업이 되어 2회차 지문만 달라졌다.
- 수정 = 지문 뜨기 전
Warmup(db)— 블록 정의 내부를 한 번 훑어GeometricExtents를 만져 놓는다. 모델·배치공간은 본읽기가 어차피 순회하므로 제외, 겹쳐보기 스냅샷 블록(_DWGC_OLD$*)도 제외(안 하면 재비교마다 도면 하나를 더 읽는 꼴). - 결과: 2회차 3건 → 0건. 비용 7.9초 → 10.4초.
3. 검증 (accoreconsole 헤드리스, 실도면 16.5MB / 28,205 엔티티)
DWGC_BENCH에 겹쳐보기 자가점검 2줄 신설 — 「구도면 전체가 왔나 / 전부 빨강인가 / 신도면 레이어 색이 그대로인가」.
| 항목 | 결과 |
|---|---|
| 구도면 모델공간 28,214 → 겹쳐 그림 | 28,214 (전량) |
| 빨강 아닌 것 | 0 |
| 모델공간에 놓인 겹쳐보기 엔티티 | 1 (블록 참조) |
| 신도면 레이어 색 변화 | 0건 ← MangleName이 제대로 먹은 증거 |
| 변경 0건 상태에서 겹쳐보기 | 실행됨(옛 코드는 건너뜀) |
| 같은 파일 재비교 1회차/2회차 | 0건 / 0건 (수정 전 0 / 3) |
| 소요 | 겹쳐보기 없이 10.4초, 있으면 36.9초(2회차 69.6초) |
| 메모리 피크 | 2.5~2.9GB (작업 후 반환) |
DLL 65,536B, 4곳 MD5 7336DEC6 일치(bin·dwgcompare installer·pcadtools installer·%LocalAppData%\MDCAD) + 통합툴 zip 재생성(137,803B).
4. 사용 매뉴얼 페이지
devplan /dwgcompare.html 신설(허브 카드 dwgcompare 등록·project_state 등록). 내용 = 3단계 사용법 카드 · 색의 뜻 표(빨강=구도면 전체, 마크 5색) · 버튼 4개 · 옵션 6개 · "이럴 땐 이렇게" 6가지(빨강이 안 보인다 / 변경이 수백 건 / 원이 도면을 덮는다 / 오래 걸린다 / 어딘지 모르겠다 / 지저분해졌다) · 주의(저장 전 [마크 지우기], 메모리, 블록 정의 한계) · 명령어 · 원리 요약. 게이트 = check_theme FAIL 0 · check_font FAIL 0 · 실브라우저 1512×950 확인(콘솔은 favicon 404뿐).
5. 남은 것
- 페페 육안 — AutoCAD 재시작 →
DWGC→ 구도면 고르고 [비교 실행] → ①빨강이 도면 전체에 겹치는지 ②목록 클릭 시 확대되는지 ③[겹쳐보기] 토글 ④[마크 지우기] 후 레이어 목록이 깨끗한지. - 성능 — 2.8만 엔티티에서 겹쳐보기 37초(재비교 70초). 페페 도면이 7.6만(30MB)이면 2~3배. 급하면 「구도면 겹쳐보기」를 끄고 돌리는 경로를 매뉴얼에 적어 뒀다. 더 줄이려면 겹쳐보기를 [비교 실행]과 분리해 버튼으로 빼는 안이 있다(미착수).
- 이월 — 구도면 여러 파일 합쳐 비교(신=합본 vs 구=분리 파일). 지금은 절반이 통째로 "추가"로 뜬다.