From 9edf11745cad91d546920926a7bdb2d868b604f7 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Sat, 22 Aug 2026 10:19:18 +0900 Subject: [PATCH] =?UTF-8?q?feat(B06):=20=EC=A7=91=EC=88=98=EC=A0=95=20I?= =?UTF-8?q?=ED=98=95=20=EB=B2=BD=EC=9D=84=20=EB=85=B8=EA=B2=AC=20=EB=81=9D?= =?UTF-8?q?=20=EC=A0=91=EC=A0=90=EC=9C=BC=EB=A1=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - I형 벽 자리 = 상단 도로측 꼭짓점이 노견 끝 지점에 닿는 자리 (2026-08-22 사용자 확정 — 우측 집수정이면 상단 좌측점이 접점). 벽이 도로측으로 1:0.3 기울므로 하단은 그만큼 계류측 바깥. 종전 '관 유입단에서 내공 1.0m' 자리 폐지. - 유입 배관 위치는 유지(노견 끝 + 1.0m) — 벽이 안으로 오면서 관 끝이 벽을 지나 집수정 안으로 들어간다. 마감면은 벽 변 복사 대신 관 끝 자리에서 벽과 나란한 기울기로 절단. - L형 바닥판·ㄷ형 반전벽 구조는 유지(명칭 재조정은 추후). - 검증: 13+15.7 SVG 실좌표 — 벽 상단이 설계선 노견 꺾임점 접점, 관 끝이 벽 바깥면 통과. Co-Authored-By: Claude Opus 5 (1M context) --- .../B06_Section_UI_Cross_Culvert_Geom.ts | 37 +++++++++---------- 1 file changed, 17 insertions(+), 20 deletions(-) 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; } // 형상(사용자 스케치 확정 — 좌측 벽 기준, 우측은 반전): 배면(도로측) 수직, 전면