1.9 KiB
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) 로 표시.
원인:
- SK builder 가 zero-length ridge 를 face 처리 중 emit (예:
ridge (61,-526)→(61,-526)). - 이 zero-length 라인이 동일 endpoint 에 degree +2 를 부여 → 진짜 dead-end ridge 의 degree 를 1→3 으로 부풀려 위장.
- dedup(line 1583) 으로는 단일 entry 라 못 잡음.
- 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) 직전).