From 7ded6be4d17828005b60042cd46960f2252237cc Mon Sep 17 00:00:00 2001 From: umsangdon Date: Sat, 22 Aug 2026 12:33:41 +0900 Subject: [PATCH] =?UTF-8?q?fix(B06):=20I=ED=98=95=20=EC=A7=91=EC=88=98?= =?UTF-8?q?=EC=A0=95=20=EA=B4=80=20=EC=9C=A0=EC=9E=85=20=EB=81=9D=EC=9D=84?= =?UTF-8?q?=20=EC=9B=90=EC=A7=80=EB=B0=98=20=EA=B5=90=EC=A0=90=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EC=A0=88=EB=8B=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 관 계산 시작점은 지반에 맞췄지만 그림의 끝은 벽 안쪽 변에서 잘려 꼭짓점이 지반과 어긋나 보였다(2026-08-22 사용자 — 파란 관선이 녹색 지반선과 만나야 함). - I형은 마감면 기준점을 관 하단선-원지반 교점으로 이동(기울기는 벽과 나란히 유지). invert가 토피 상한에 걸려 지반보다 낮아도 그림의 관은 지반 위에서 시작한다. - 검증: 13+15.7 I형 실화면 SVG — 관 유입 하단 꼭짓점 vs 지반 보간 0.1px 차(접점). Co-Authored-By: Claude Opus 5 (1M context) --- .../B06_Section_UI_Cross_Culvert_Geom.ts | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) 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,