3.4 KiB
3.4 KiB
| name | description | type |
|---|---|---|
| SHOULDER_ABSORBED 임계는 모든 가드에서 동일하게 < 10 | skeleton-utils.js 의 흡수 판정 임계는 OVER_EPS=0.5 → planeSize=5 대응 위해 < 10. 가드 추가 시 동일 값. | project |
규칙: wallBaseLine.attributes.planeSize 로 흡수 판정하는 모든 가드는 임계 < 10 사용.
관련 가드 (2026-04-27 기준):
skeleton-utils.js:1608SHOULDER_ABSORBED skip —< 10skeleton-utils.js:1475-1481SHOULDER-ADJACENT processInBoth HIP_SKIP —< 10(이전< 1이었으나 통일)skeleton-utils.js:1797SHOULDER-ADJACENTleft_outOUT_SKIP —< 10skeleton-utils.js:1923SHOULDER-ADJACENTright_outOUT_SKIP —< 10skeleton-utils.js:2084SHOULDER-ADJACENTtop_outOUT_SKIP —< 10skeleton-utils.js:2207SHOULDER-ADJACENTbottom_outOUT_SKIP —< 10skeleton-utils.js:1517-1546(processInBoth) SK-VERTEX-PROXIMITY HIP_SKIP_VERTEX_MISS — target 이skPolygonPoints(createInnerLinesFromSkeleton 6번째 인자, drawSkeletonRidgeRoof 에서changRoofLinePoints, drawSkeletonRidgeRoofFromBaseLines 에서rawPoints전달) 의 vertex 5px 이내 아니면 skip. 2-hop 흡수 (인접 pair 가 stretched 되어 prev/next planeSize 가드를 통과하는 케이스) 도 차단. ※ closure 가 아닌 인자로 전달 — processInBoth 는 createInnerLinesFromSkeleton 안, changRoofLinePoints 는 skeletonBuilder 스코프라 직접 참조 시 ReferenceError.
Why:
useMovementSetting.js의OVER_EPS=0.5캔버스 단위 →calcLinePlaneSize가× 10곱하므로 잔여 길이=0.5 시 planeSize=5.- 가드 임계가
< 1이면 planeSize=5 흡수가 가드 통과 → phantom HIP/extensionLine. - 정상 baseLine 은 통상 50+ →
< 10이어도 false positive 없음. - 임계가 두 곳에서 다르면 한쪽만 흡수 인식하고 다른 쪽은 정상 처리 → 직사각형으로 합쳐진 폴리곤에 공중에 뜬 HIP 빗변(예: H-6) 출현.
How to apply:
- 흡수 판정 가드를 새로 추가할 때 임계는 항상
< 10(또는 SHOULDER_ABSORBED skip 라인의 임계와 명시적으로 동기화). OVER_EPS가 변경되면 임계도 재계산: 임계 ≥OVER_EPS × 10 + 안전마진(5).- 가드들의 임계는 코드 가까이에 비교용 주석으로 cross-reference 유지.
증상 사례:
- (1) ㅗ 폴리곤에서 B-2 (bottom-left horizontal) 를 위로 이동해 B-4 (bottom-right horizontal) 와 평행/연속시킴.
- 직사각형으로 흡수돼야 하는데 (700,548)→(750,598) 위치에 H-6 (HIP extensionLine) 가 phantom 으로 그려짐.
- 원인: pair#3 vertical step 흡수(planeSize=5) → pair#4 인접 가드
< 1통과 → processInBoth HIP 생성. - 수정: processInBoth HIP_SKIP 가드 임계
< 10으로 통일.
- (2) bump (돌출부) 폴리곤에서 left wall 을 바깥으로 이동해 인접 pair 흡수 → roofline 밖에 H-12 출현 +
updateAndAddLine NOT FOUND.- 원인 1: pair#6 흡수 후 pair#7 의
_out분기가 dissolved 된 옛 roof.points 코너 참조. - 원인 2 (1차 수정 후 잔류): pair#0 (top_in, processInBoth) 의 END 가 흡수된 pair#6 의 옛 roof 코너 (587,-108) 를 참조 → target=(587,-31) 이 새 SK 외부에 phantom HIP 생성.
- 수정 1:
_out4 경로에 인접 흡수 가드 추가. - 수정 2: processInBoth 의 createHipLine 호출 전 SK-VERTEX-PROXIMITY 검사 추가. target 이
changRoofLinePointsvertex 5px 이내 아니면 skip.
- 원인 1: pair#6 흡수 후 pair#7 의