fix(B05): 날개벽이 있는 측은 스트립 끝 횡단선 벽을 빼 중복을 없앤다

날개 사다리꼴 벽면이 이미 그 자리를 막는데 스트립 끝 횡단선 벽이 같은 자리에 한 장
더 서 있었다(2026-08-27 사용자). 날개벽을 낸 측은 끝 횡단선을 안 낸다.
날개가 없는 세트(파형강관 84.3·275.71)는 종전대로 끝 횡단선이 유일한 측벽이다.

- Plan: 세트마다 `wingWallSides`를 모아, 그 측은 `cut-wall`에 끝 횡단선을 안 담는다.
- BUILD_VERSION 58 → 59.

검증(실빌드 데이터):
- 벽 판 20 → **16장**(삼각형 40 → 32), 좌·우 동일.
- 세트별 벽 자리: 149.73·200.92는 날개 6마디만, 84.3·275.71은 끝 횡단선 2마디.
- 끝선(노견·성토 끝단) 위 판 0 유지, 벽 최대 높이 3.18m 불변.
- ISO 근접 캡처에서 구멍 없음 — 겹쳐 있던 판만 사라졌다.
- npm run typecheck 통과, prettier 적용.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-27 12:07:53 +09:00
co-authored by Claude Opus 5
parent 93945d356c
commit 86d1d6ac13
2 changed files with 6 additions and 2 deletions
+1 -1
View File
@@ -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 {
+5 -1
View File
@@ -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<Side>();
(["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]],