qcast-front/.claude/memory/project_phantom_ridge_cull.md

1.9 KiB

name description type
phantom ridge (RG-N) 다운스트림 cull createInnerLinesFromSkeleton 종료 직전 zero-length + dead-end ridge 2단계 cull 로 SK builder drift phantom 제거 project

증상: 정확한 수치 입력 폴리곤(예: 12-vertex 계단형)에서 SK builder 가 0.0001 좌표 drift 로 phantom skeleton edge 를 emit. 화면에 length=0 또는 한쪽 끝이 매달린 ridge (사용자 표현 RG-8) 로 표시.

원인:

  1. SK builder 가 zero-length ridge 를 face 처리 중 emit (예: ridge (61,-526)→(61,-526)).
  2. 이 zero-length 라인이 동일 endpoint 에 degree +2 를 부여 → 진짜 dead-end ridge 의 degree 를 1→3 으로 부풀려 위장.
  3. dedup(line 1583) 으로는 단일 entry 라 못 잡음.
  4. logDeadEndLines (line 2919) 는 로그만 출력, 삭제 안 함.

수정 (B안):

  • createInnerLinesFromSkeleton 의 두 return 직전(현 line 2780~) 에 IIFE cull 블록 추가.
  • 1단계: lineName === 'ridge' 이고 dx<0.5 && dy<0.5 인 zero-length 라인 toRemove 등록.
  • 2단계: toRemove 제외한 라인들로 degree 재계산. ridge 한쪽 endpoint 가 degree=1 && roof corner 와 1mm 이상 떨어진 경우 toRemove.
  • canvas.remove + innerLines.splice 동기.
  • hip / eaves / roofLine 은 절대 cull 안 함 (lineName 가드).

Why: 사용자 보고 "정확한 수치로 그리면 SK 무너지는 케이스 재발". cd5eebd0 이전 SK builder 내부 수정이 이 케이스에는 안 통했고, builder 추가 수정 위험 높아 다운스트림 cull 로 흡수.

How to apply: RG-N 가짜 ridge 가 다시 나오면 콘솔의 [B안 cull] dead-end ridge 제거 N개 로그로 cull 작동 확인. 안 잡히면 1) 해당 라인 lineName 이 'ridge' 가 아닌지, 2) 인접 phantom 이 degree 를 더 부풀려 우회하는지 진단. cull 블록은 createInnerLinesFromSkeleton 끝(if (findPoints.length > 0) 직전).