From dc91a5e831b7cf3c18c952d25cbfaa1705a1003c Mon Sep 17 00:00:00 2001 From: umsangdon Date: Wed, 2 Sep 2026 11:27:25 +0900 Subject: [PATCH] =?UTF-8?q?fix(B05):=20BOX=EC=95=94=EA=B1=B0=20=ED=8C=A8?= =?UTF-8?q?=EC=B9=98=EB=8F=84=20=EC=A0=88=EC=B7=A8=20=EC=98=81=EC=97=AD=20?= =?UTF-8?q?=EC=95=88=EC=AA=BD=EC=9C=BC=EB=A1=9C=20=EC=9E=90=EB=A5=B8?= =?UTF-8?q?=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 패치 리본을 절취 영역 안쪽만 남기는 규칙(`patchClip`)이 세월교에만 걸려 있었다. `_Corridor_Cut.ts` 가 표식 없는 패치는 손대지 않고 그대로 돌려주므로 BOX암거 패치는 한 번도 안 잘려 절취 영역 밖으로 넘쳤다. BOX도 `wing-box` 커브로 절취 영역을 내므로 같은 반대 규칙이 성립한다. 기슭막이(배수관 세트)는 날개 사다리꼴이 없어 제외. 기하가 바뀌므로 `BUILD_VERSION` 88 → 89 (형식은 안 바뀌어 `ENVELOPE_VERSION` 은 그대로). 검증(wdw · 저장본 실측): - 수정 전 — BOX 패치 리본 두 벌(198.4~203.5m)에 셀 마스크 없음. `patchClip` 3개. - 수정 후 — 두 벌 모두 마스크 생김(남은 셀 46/282 · 43/282). `patchClip` 5개. - 3D 화면(TOP, 지형 끔) — BOX 자리 성토면이 구조물에 맞물려 끊기고, 넘침도 구멍도 없음. - `tsc --noEmit` 통과, `pytest tmp/tests/ -q` 356 passed / 0 failed. Co-Authored-By: Claude Opus 5 (1M context) --- B05_Profile/B05_Profile_UI_Corridor.ts | 6 +++++- B05_Profile/B05_Profile_UI_Corridor_Carve.ts | 7 ++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/B05_Profile/B05_Profile_UI_Corridor.ts b/B05_Profile/B05_Profile_UI_Corridor.ts index 7af0fba7..6fad466f 100644 --- a/B05_Profile/B05_Profile_UI_Corridor.ts +++ b/B05_Profile/B05_Profile_UI_Corridor.ts @@ -214,7 +214,11 @@ function fnv1a(text: string): string { // 다음 단 시작점은 윗단 하단 수평선 +근입과 전면 경사선의 교차점(2026-08-22 규칙 승계). // 88 = 독립 기슭막이 기준을 **맨 위 단**으로 되돌리고 추가 단은 아래로 붙인다(배관 세트와 // 같은 규칙). 기준 자리는 사용자 이동값(기준 올림·좌우)을 탄다(2026-08-28 사용자). -const BUILD_VERSION = 88; +// 89 = BOX암거 패치도 **절취 영역 안쪽으로 자른다**(2026-09-02). 그 규칙이 세월교에만 +// 걸려 있어 BOX 패치는 한 번도 안 잘리고 영역 밖으로 넘쳤다 — 실측에서 BOX 패치 +// 리본 두 벌(198.4~203.5m)에 셀 마스크가 없었다. BOX도 `wing-box` 커브로 절취 +// 영역을 내므로 같은 반대 규칙이 성립한다. +const BUILD_VERSION = 89; /** 종횡단 정본에서 코리도에 영향을 주는 입력만 요약해 해시 — 갱신 감지 기준. */ export function corridorHash(detail: SectionDetailResponse, routePoints: RoutePoint[]): string { diff --git a/B05_Profile/B05_Profile_UI_Corridor_Carve.ts b/B05_Profile/B05_Profile_UI_Corridor_Carve.ts index 76b61438..359f937c 100644 --- a/B05_Profile/B05_Profile_UI_Corridor_Carve.ts +++ b/B05_Profile/B05_Profile_UI_Corridor_Carve.ts @@ -264,6 +264,7 @@ export function buildStructurePatchRibbons( * 날개 사다리꼴 자체가 없다. BOX·기슭막이는 종전 경로를 그대로 탄다. */ const isFord = section.ford != null; + const isBox = section.box != null; const frameOf = (chainageM: number): RouteFrame | null => { const frame = frameAt(chainageM); if (!frame || !boxAxis) return frame; @@ -374,7 +375,11 @@ export function buildStructurePatchRibbons( chainages: buffer.map((row) => row.chainage), positions, patch: true, - ...(isFord ? { patchClip: true } : {}), + // 절취 영역 안쪽으로 자르는 규칙은 세월교에만 걸려 있었다 — BOX암거 패치는 + // 한 번도 안 잘려 절취 영역 밖으로 넘쳤다(2026-09-02 실측: BOX 패치 리본 + // 두 벌에 셀 마스크가 없었다). BOX도 `wing-box` 커브로 절취 영역을 내므로 + // 같은 규칙을 태운다. 기슭막이(배수관 세트)는 날개 사다리꼴 자체가 없어 제외. + ...(isFord || isBox ? { patchClip: true } : {}), }); } buffer = [];