fix(B06): I형 집수정 관 유입 끝을 원지반 교점에서 절단

- 관 계산 시작점은 지반에 맞췄지만 그림의 끝은 벽 안쪽 변에서 잘려
  꼭짓점이 지반과 어긋나 보였다(2026-08-22 사용자 — 파란 관선이
  녹색 지반선과 만나야 함).
- I형은 마감면 기준점을 관 하단선-원지반 교점으로 이동(기울기는 벽과
  나란히 유지). invert가 토피 상한에 걸려 지반보다 낮아도 그림의 관은
  지반 위에서 시작한다.
- 검증: 13+15.7 I형 실화면 SVG — 관 유입 하단 꼭짓점 vs 지반 보간
  0.1px 차(접점).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-22 12:33:41 +09:00
co-authored by Claude Opus 5
parent 8743ccf810
commit 7ded6be4d1
@@ -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,