diff --git a/B06_Section/B06_Section_UI_Cross_Box_Geom.ts b/B06_Section/B06_Section_UI_Cross_Box_Geom.ts index 610138cb..9f47aeae 100644 --- a/B06_Section/B06_Section_UI_Cross_Box_Geom.ts +++ b/B06_Section/B06_Section_UI_Cross_Box_Geom.ts @@ -8,7 +8,7 @@ * · 상판 윗면 = **노면 − 복토 0.5m**(별표2 교차 참조), 구체는 수평 설치(교본 3장). * · 저판은 **날개벽 투영**(길이×cos각)만큼 계류 상·하류로 길어진다 — 세월교와 같은 산식. * · 내공(유로)은 비워 둔다 — 관 위 성토 채움처럼 면을 칠하지 않는다. - * · **성토선은 박스 최상단 모서리를 지난다**(2026-08-25 사용자). 물매 1:1.2 고정이라 + * · **성토선은 박스 최상단 모서리에서 끝난다**(2026-08-25 사용자). 물매 1:1.2 고정이라 * 박스가 노견 밖으로 나간 만큼 노견을 수평 연장하고 거기서 사면을 시작한다 — * 기슭막이 "벽이 밖으로 나간 만큼 노폭 연장" 규칙과 같다. 그래서 박스 길이를 * 늘리면 노견부가 저절로 길어지고 사면 각도는 그대로다. @@ -36,8 +36,8 @@ export interface BoxLayout { /** 구체 바닥과 계류 하상(원지반 최저)의 고저차(m). +면 구체가 하상 위로 떠 있다. */ bedGapM: number; /** - * 양측 성토선 — 노견 → (박스가 나간 만큼 수평 연장) → 박스 최상단 모서리 → - * 1:1.2로 원지반까지. 물매는 고정이고 길이만 지형이 정한다. + * 양측 성토선 — 노견 → (박스가 나간 만큼 수평 연장) → 박스 최상단 모서리에서 끝. + * 물매 1:1.2 고정이며, 모서리 밖은 구체 개구부라 선을 잇지 않는다. */ fillLines: OffsetPoint[][]; label: { at: OffsetPoint; text: string }; @@ -128,18 +128,9 @@ export function computeBoxLayout( const points: OffsetPoint[] = [{ offset: edgeOffset, elevation: roadZ }]; // 박스가 더 길면 노견을 수평으로 늘린다(각도 불변 — 2026-08-25 사용자). if ((start - edgeOffset) * outward > 0.01) points.push({ offset: start, elevation: roadZ }); + // 모서리에서 끝난다 — 그 밖은 구체 개구부·날개벽이라 성토가 아니다 + // (2026-08-25 사용자: 박스와 만난 뒤의 성토선은 필요 없다). points.push(corner); - // 모서리 밖은 같은 물매로 원지반과 만날 때까지. - let toe = corner; - for (let drop = 0.05; drop <= 30; drop += 0.05) { - const probe: OffsetPoint = { - offset: corner.offset + outward * drop * FILL_SLOPE_RATIO_MIN, - elevation: corner.elevation - drop, - }; - toe = probe; - if (probe.elevation <= groundAt(probe.offset)) break; - } - points.push(toe); return points; };