diff --git a/B05_Profile/B05_Profile_UI_Corridor.ts b/B05_Profile/B05_Profile_UI_Corridor.ts index 18a98a20..c33a07f6 100644 --- a/B05_Profile/B05_Profile_UI_Corridor.ts +++ b/B05_Profile/B05_Profile_UI_Corridor.ts @@ -108,7 +108,7 @@ function fnv1a(text: string): string { // 복원되어 화면·데이터가 하나도 안 바뀌었다. 기하를 고치면 **반드시** 올릴 것. // 56 = 측벽에서 **노견 쪽·성토 끝단 쪽 리본 경계 벽을 뺀다** — 거기서 잘린 게 // 아니라 리본이 끝난 자리다(2026-08-27 사용자). -const BUILD_VERSION = 58; +const BUILD_VERSION = 59; /** 종횡단 정본에서 코리도에 영향을 주는 입력만 요약해 해시 — 갱신 감지 기준. */ export function corridorHash(detail: SectionDetailResponse, routePoints: RoutePoint[]): string { diff --git a/B05_Profile/B05_Profile_UI_Corridor_Plan.ts b/B05_Profile/B05_Profile_UI_Corridor_Plan.ts index 6ddd47d9..7aa2cfa8 100644 --- a/B05_Profile/B05_Profile_UI_Corridor_Plan.ts +++ b/B05_Profile/B05_Profile_UI_Corridor_Plan.ts @@ -387,6 +387,8 @@ export function buildPlanCurves( leftX: section.frame.left_xy[0], leftY: section.frame.left_xy[1], }; + /** 날개벽 벽면을 낸 측 — 그 측 스트립 끝 횡단선은 겹치므로 안 낸다(2026-08-27 사용자). */ + const wingWallSides = new Set(); (["left", "right"] as const).forEach((side) => { push("structure", side, structureFootprintLoops(set, side, roadEdgeOf(side), planZ, axis)); // 날개벽만 — 성토 끝선까지 이어진 사다리꼴(2026-08-26 사용자). 성토 끝선은 @@ -397,6 +399,7 @@ export function buildPlanCurves( push("wing-box", side, wing.loops); // 날개 사다리꼴의 벽 자리 — 성토 끝선 변은 빠져 있다(2026-08-27 사용자). push("cut-wall", side, wing.walls); + if (wing.walls.length) wingWallSides.add(side); }); for (const silhouette of structureSilhouettes(section)) { @@ -510,7 +513,8 @@ export function buildPlanCurves( const spans = projected.filter( (pair): pair is [[number, number, number], [number, number, number]] => pair !== null, ); - if (spans.length >= 2) { + // 날개벽이 있는 측은 그 벽면이 같은 자리를 이미 막는다 — 끝 횡단선은 중복이다. + if (spans.length >= 2 && !wingWallSides.has(side)) { push("cut-wall", side, [ [spans[0][0], spans[0][1]], [spans[spans.length - 1][0], spans[spans.length - 1][1]],