diff --git a/B06_Section/B06_Section_UI_Cross_Culvert_Geom.ts b/B06_Section/B06_Section_UI_Cross_Culvert_Geom.ts index e87fbe22..4ea3d438 100644 --- a/B06_Section/B06_Section_UI_Cross_Culvert_Geom.ts +++ b/B06_Section/B06_Section_UI_Cross_Culvert_Geom.ts @@ -475,6 +475,26 @@ export function computeCulvertLayout( }; }; deriveAxis(); + // I형 집수정: 관 유입 끝의 마감면을 **관 하단선이 원지반과 만나는 점**으로 옮긴다 + // (2026-08-22 사용자 — 관 파란선 시작 꼭짓점이 지반 녹색선 위에 있어야 한다). + // invert가 토피 상한에 걸려 지반보다 낮으면 벽 변에서 자른 꼭짓점이 지반과 떠서 + // 어긋나 보였다. 마감면 기울기(벽과 나란)는 유지하고 기준점만 교점으로 바꾼다. + if (basin && basinShape === "I" && endFaces.inlet) { + let prevDiff = pipeStart.elevation - groundAt(pipeStart.offset); + for (let t = 0.02; t <= 3; t += 0.02) { + const px = pipeStart.offset + axis.offset * t; + const pe = pipeStart.elevation + axis.elevation * t; + const diff = pe - groundAt(px); + if (Math.abs(diff) < 0.005 || Math.sign(diff) !== Math.sign(prevDiff)) { + endFaces.inlet = { + base: { offset: px, elevation: pe }, + direction: endFaces.inlet.direction, + }; + break; + } + prevDiff = diff; + } + } const endCorners = (role: "inlet" | "outlet", endPoint: OffsetPoint): PipeEnd => { const fallback: PipeEnd = { bottom: endPoint,