feat(B06): 집수정 I형 벽을 노견 끝 접점으로 이동

- I형 벽 자리 = 상단 도로측 꼭짓점이 노견 끝 지점에 닿는 자리
  (2026-08-22 사용자 확정 — 우측 집수정이면 상단 좌측점이 접점).
  벽이 도로측으로 1:0.3 기울므로 하단은 그만큼 계류측 바깥.
  종전 '관 유입단에서 내공 1.0m' 자리 폐지.
- 유입 배관 위치는 유지(노견 끝 + 1.0m) — 벽이 안으로 오면서 관 끝이
  벽을 지나 집수정 안으로 들어간다. 마감면은 벽 변 복사 대신 관 끝
  자리에서 벽과 나란한 기울기로 절단.
- L형 바닥판·ㄷ형 반전벽 구조는 유지(명칭 재조정은 추후).
- 검증: 13+15.7 SVG 실좌표 — 벽 상단이 설계선 노견 꺾임점 접점,
  관 끝이 벽 바깥면 통과.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-22 10:19:18 +09:00
co-authored by Claude Opus 5
parent f78096ad17
commit 9edf11745c
@@ -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;
}
// 형상(사용자 스케치 확정 — 좌측 벽 기준, 우측은 반전): 배면(도로측) 수직, 전면