diff --git a/B06_Section/B06_Section_UI_Cross_Culvert_Geom.ts b/B06_Section/B06_Section_UI_Cross_Culvert_Geom.ts index 0702c1d2..ad76b249 100644 --- a/B06_Section/B06_Section_UI_Cross_Culvert_Geom.ts +++ b/B06_Section/B06_Section_UI_Cross_Culvert_Geom.ts @@ -265,8 +265,12 @@ export function computeCulvertLayout( }, ]; }; - // I형 벽 = 계류측(도로 바깥) 면 — 관 유입단에서 내공 1.0m 떨어져 선다. - const wallBase = anchor.offset + outward * innerWidth; + // I형 벽 자리 = **상단 도로측 꼭짓점이 노견 끝 지점에 닿는다**(2026-08-22 사용자 + // 확정 — 우측 집수정이면 상단 좌측점, 좌측이면 우측점이 접점). 벽 상단이 + // 도로측으로 1:0.3 물러나므로 하단(base)은 그만큼 계류측 바깥이다. + // anchor.offset = 노견 끝(관 유입단 기준점), 상단 표고는 invert+관경+여유고라 + // 관이 토피 상한(노면−관경−토피)에 묻힌 표준 단면에서는 노견 표고와도 일치한다. + const wallBase = anchor.offset + outward * (REVET_LEAN_RATIO * wallHeight); const parts: BasinLayout["parts"] = [{ kind: "wall", points: wallOf(wallBase, outward) }]; // ㄴ형 = I형 + 바닥판. 바닥은 **아래가 짧은 사다리꼴**(윗변이 길고 아랫변이 // 짧다 — 벽과 같은 1:0.3 물매가 양 끝에 붙는다). 위치는 **I형 벽 기준 반대측** @@ -340,28 +344,21 @@ export function computeCulvertLayout( trimMin = wallTopInner; trimMinElevation = anchor.elevation + wallHeight; } - // 관 유입 끝단 마감면 = 집수정 벽의 **계류측 변**을 그대로 복사(사용자 ③). - const faceBottom = { - offset: wallBase + outward * REVET_THICKNESS_M, - elevation: anchor.elevation - floorThickness, - }; - const faceTop = { - offset: wallBase - outward * REVET_LEAN_RATIO * wallHeight + outward * REVET_THICKNESS_M, - elevation: anchor.elevation + wallHeight, - }; - endFaces[spec.role] = { - base: faceBottom, - direction: { - offset: faceTop.offset - faceBottom.offset, - elevation: faceTop.elevation - faceBottom.elevation, - }, - }; - // 관은 집수정 내공을 가로질러 **안쪽 벽면까지** 물린다 — 벽 몸통 중간에서 끊기면 - // 접속이 어긋나 보인다(2026-08-20 사용자 ③). + // 유입 배관 위치는 **현재 유지**(2026-08-22 사용자 확정) — 관 유입단은 종전처럼 + // 노견 끝에서 내공 1.0m 자리다. 벽이 노견에 붙으면서 관 끝이 벽을 지나 집수정 + // 안으로 들어가므로, 마감면은 벽 변을 복사하지 않고 **관 끝 자리에서 벽과 나란한 + // 기울기**로 자른다(벽 변에 자르면 관이 벽 앞에서 끊겨 위치가 바뀐다). basinPipeEnd = { offset: anchor.offset + outward * innerWidth, elevation: anchor.elevation, }; + endFaces[spec.role] = { + base: { offset: basinPipeEnd.offset, elevation: anchor.elevation - floorThickness }, + direction: { + offset: -outward * REVET_LEAN_RATIO * (wallHeight + floorThickness), + elevation: wallHeight + floorThickness, + }, + }; return null; } // 형상(사용자 스케치 확정 — 좌측 벽 기준, 우측은 반전): 배면(도로측) 수직, 전면