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 = [];