fix(B06): 유출 기슭막이가 지반에서 뜨던 문제
벽 밑을 관 축(유입 → 자연 사면 끝 직선) 위에 얹고 있었다. 성토측 지반이 관 물매보다 가파른 구간에서는 축이 지반 위로 떠올라 벽이 공중에 떴다 — 13+15.7 유출 벽은 자동 자리에서도 전면 0.14m, 바깥으로 2m 밀면 배면까지 0.16m 떴다. 관 끝은 원지반 위에 놓는다는 원칙대로 벽 밑을 **그 자리 원지반**(역경사는 유입 invert로 클램프)으로 바꿨다. 관 물매는 그 자리에 맞춰 다시 잡힌다. 유입 벽은 원래 지반을 따르고 있어 멀쩡했다 — 좌우가 달라 보인 이유가 이것이다. 표기 길이도 목표값이 아니라 **실제 그려진 관**의 올림값으로 바꿨다(자리 제약에 걸려 못 늘린 경우 도면보다 길게 적혔다). 검증: 이동 ±3m 전 구간 배면 근입 +0.500 고정(종전 −0.16~+0.59), 계획고 스윕 24케이스 문제 0. tsc 통과, pytest 148 pass. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -414,14 +414,13 @@ export function computeCulvertLayout(
|
||||
};
|
||||
buildWall(culvert.inlet, inlet, inletInfo.outward, basinReason);
|
||||
// 유출 벽 자리 — 유입과 같은 규칙(사면선이 벽 이음선 상단점을 지나는 자리, 물매는
|
||||
// 1:1.2~2.0 범위에서 역산). 벽 밑은 관 축을 따라간 invert다 — 관이 벽을 관통하므로
|
||||
// 벽 바닥은 관 자리를 따라야 한다.
|
||||
const axisRun0 = outletAnchor.offset - inlet.offset;
|
||||
const axisRise0 = outletAnchor.elevation - inlet.elevation;
|
||||
const invertAt = (offset: number): number =>
|
||||
Math.abs(axisRun0) > 1e-9
|
||||
? inlet.elevation + axisRise0 * ((offset - inlet.offset) / axisRun0)
|
||||
: inlet.elevation;
|
||||
// 1:1.2~2.0 범위에서 역산).
|
||||
//
|
||||
// 벽 밑 = 그 자리의 **원지반**. 종전처럼 관 축(inlet → 사면 끝 직선) 위에 얹으면
|
||||
// 성토측 지반이 관 물매보다 가파른 구간에서 축이 지반 위로 떠올라 **벽이 뜬다**
|
||||
// (2026-08-21 사용자 지적). 관 끝은 원지반 위라는 원칙대로 지반을 따르면 벽이
|
||||
// 지반에 앉고 관 물매가 그 자리에 맞춰진다. 역경사는 유입 invert로 클램프.
|
||||
const invertAt = (offset: number): number => Math.min(groundAt(offset), inlet.elevation);
|
||||
let outletWallAnchor = outletAnchor;
|
||||
let outletPlacement: FillWallPlacement | null = null;
|
||||
if (designAt) {
|
||||
@@ -573,7 +572,8 @@ export function computeCulvertLayout(
|
||||
rebuild();
|
||||
if (!outletWall) break;
|
||||
}
|
||||
lengthM = target;
|
||||
// 표기 길이 = **실제 그려진 관**의 올림값(목표를 적으면 도면보다 길게 적힌다).
|
||||
lengthM = Math.max(1, Math.ceil(cutLength(pipeCorners) - 1e-6));
|
||||
slopePct =
|
||||
Math.abs(outlet.offset - pipeStart.offset) > 1e-9
|
||||
? ((pipeStart.elevation - outlet.elevation) / Math.abs(outlet.offset - pipeStart.offset)) *
|
||||
|
||||
Reference in New Issue
Block a user