diff --git a/B05_Profile/B05_Profile_UI_Corridor.ts b/B05_Profile/B05_Profile_UI_Corridor.ts index 7f211e03..0b1c10a6 100644 --- a/B05_Profile/B05_Profile_UI_Corridor.ts +++ b/B05_Profile/B05_Profile_UI_Corridor.ts @@ -76,7 +76,7 @@ function fnv1a(text: string): string { * (2026-08-23 사용자 보고: "원복이 안 된 것 같다가 갑자기 반영됨"). 판번호를 해시에 * 섞어 두면 배포와 동시에 저장본이 만료된다. */ -const BUILD_VERSION = 18; // 조작값 캐시 반영 · 비탈 실루엣 순서 복구(2026-08-24). +const BUILD_VERSION = 19; // 유출측 비탈 배열 방향 정규화 — Z 반전 수정(2026-08-24). /** 종횡단 정본에서 코리도에 영향을 주는 입력만 요약해 해시 — 갱신 감지 기준. */ export function corridorHash(detail: SectionDetailResponse, routePoints: RoutePoint[]): string { diff --git a/B05_Profile/B05_Profile_UI_Corridor_Station.ts b/B05_Profile/B05_Profile_UI_Corridor_Station.ts index d7c288bc..3869aeb4 100644 --- a/B05_Profile/B05_Profile_UI_Corridor_Station.ts +++ b/B05_Profile/B05_Profile_UI_Corridor_Station.ts @@ -410,6 +410,13 @@ export function classifyStation(section: CrossSection): StationPieces | null { // 범위 밖이라 종전 정렬을 유지한다. if (side !== outletSide) { silhouette = [...silhouette].sort((a, b) => a.offset_m - b.offset_m); + } else if (silhouette[0].offset_m > silhouette[silhouette.length - 1].offset_m) { + // 뒤쪽 코드(`slopeRelative`)가 도로측 끝점을 **배열 위치**로 집는다 — 오름차순 + // 편거리 배열을 전제한다. 유출이 우측이면 수집 순서(도로 → 바깥)가 내림차순이라 + // 바깥 끝을 도로측으로 잡아 **비탈 Z가 뒤집힌다**(2026-08-24 사용자 3D 제보). + // 정렬로 되돌리면 계단 순서가 다시 깨지므로 **뒤집기만** 한다 — 점 순서(체인)는 + // 그대로이고 배열 방향만 오름차순이 된다. + silhouette = [...silhouette].reverse(); } const kind: CorridorKind = basinCut && side === inletSide ? "cut" : side === "left" ? leftRole : rightRole;