diff --git a/B06_Section/B06_Section_UI_Cross_Culvert_Const.ts b/B06_Section/B06_Section_UI_Cross_Culvert_Const.ts index 5c701f01..97e50ddb 100644 --- a/B06_Section/B06_Section_UI_Cross_Culvert_Const.ts +++ b/B06_Section/B06_Section_UI_Cross_Culvert_Const.ts @@ -114,3 +114,10 @@ export const FILL_STRUCTURE_HEIGHT_M = 3.0; * 미는 경우는 이 하한으로 막는다. */ export const FILL_MIN_RISE_M = 0.3; + +/** + * 집수정 바닥 여유(m) — **관 하단 아래**로 두는 깊이. 상부 여유는 기슭막이와 같은 + * `REVET_FREEBOARD_M`(0.5)을 쓴다. 집수정 깊이 = 바닥 여유 + 관경 + 상부 여유 + * (2026-08-21 사용자 확정 — 종전에는 성토 경사선과의 교점으로 높이를 잡았다). + */ +export const BASIN_BOTTOM_CLEARANCE_M = 0.5; diff --git a/B06_Section/B06_Section_UI_Cross_Culvert_Geom.ts b/B06_Section/B06_Section_UI_Cross_Culvert_Geom.ts index 2b0c9201..b7635f5e 100644 --- a/B06_Section/B06_Section_UI_Cross_Culvert_Geom.ts +++ b/B06_Section/B06_Section_UI_Cross_Culvert_Geom.ts @@ -17,6 +17,7 @@ import type { CrossSection, CulvertSideSpec, SectionSample } from "./B06_Section_Api_Fetch"; import { + BASIN_BOTTOM_CLEARANCE_M, FILL_MIN_RISE_M, FILL_SLOPE_MAX_LENGTH_M, FILL_SLOPE_RATIO_MAX, @@ -24,6 +25,7 @@ import { MIN_PIPE_COVER_M, PITCHING_THICKNESS_M, REVET_EMBED_DEPTH_M, + REVET_FREEBOARD_M, REVET_LEAN_RATIO, REVET_THICKNESS_M, revetHeightLimit, @@ -211,22 +213,11 @@ export function computeCulvertLayout( // 형식 기본값 = ㄴ(L)형(2026-08-20 사용자 확정). 실무 내공 1.0m(울진 돌집수정). const shape: BasinShape = "L"; const innerWidth = 1.0; - const floorThickness = REVET_THICKNESS_M; - const roadTop = designAt ? designAt(anchor.offset) : anchor.elevation; - // 벽 높이: **상단 도로측 꼭지점이 성토 경사선(설계선)과 만나는 교점**까지 - // (2026-08-20 사용자 — 기슭막이와 같은 접점 규칙). 하한은 관경 + 0.45. - const basinMinHeight = diameter + REVET_THICKNESS_M; - let wallHeight = Math.max(roadTop - anchor.elevation, basinMinHeight); - if (designAt) { - const wallBaseProbe = anchor.offset + outward * innerWidth; - for (let h = basinMinHeight; h <= 4.0 + 1e-6; h += 0.05) { - // 상단 도로측 꼭지점(기움 반전 — 상단이 도로측으로 물러난다). - const topInner = wallBaseProbe - outward * REVET_LEAN_RATIO * h; - wallHeight = h; - if (anchor.elevation + h >= designAt(topInner)) break; - } - wallHeight = Math.max(wallHeight, basinMinHeight); - } + // 집수정 깊이 = **관 아래 여유 + 관경 + 관 위 여유**(2026-08-21 사용자 확정). + // 종전에는 성토 경사선과의 교점으로 높이를 잡아 지형에 따라 들쭉날쭉했다. + // 위 여유는 기슭막이와 같은 값(0.5)을 써서 좌·우 표현이 어긋나지 않게 한다. + const floorThickness = BASIN_BOTTOM_CLEARANCE_M; + const wallHeight = diameter + REVET_FREEBOARD_M; // 벽 단면은 기슭막이와 동일(두께 0.45). 기움은 **수직 기준 반전** — 상단이 // 도로측(내공 쪽)으로 1:0.3 물러난다(2026-08-20 사용자 정정). const wallOf = (baseOffset: number, dir: number): OffsetPoint[] => {