25 lines
1.9 KiB
Markdown
25 lines
1.9 KiB
Markdown
---
|
|
name: phantom ridge (RG-N) 다운스트림 cull
|
|
description: createInnerLinesFromSkeleton 종료 직전 zero-length + dead-end ridge 2단계 cull 로 SK builder drift phantom 제거
|
|
type: 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)` 직전).
|