fix(B06): 연장 밖 다단은 계산에서 빼 성토면이 따라오게 한다

증상(사용자): 독립 기슭막이 우측 다단이 구간값에 따라 옆 측점에서 없어지는데,
그 위 기준벽 이후 성토면은 갱신되지 않는다.

원인: 링크 카드가 다단을 **다 세워 놓고 그림만 지웠다**(trimLinkedLayout이
extraWalls만 걸러낸다). 성토부선(outletFill·basinFill)은 원래 단 수로 계산된
값이라 마지막 남은 벽 뒤가 비어 있었다.

고침: 이 측점까지 오지 않는 단은 계산에 들어가기 전에 뺀다(tierPrefix — 단은
위에서부터 쌓이므로 덮이는 앞부분만 남긴다). buildOutletExtras가 마지막 단 뒤
성토부선을 지반까지 다시 긋는다.

화면 실측(234.1 소유 → 240.0 링크, bextra0 후 6.0m → 1.5m): 링크 카드 벽 4 → 3,
유입부 성토부선 0.91+3.00 → 5.27 한 줄로 지반까지. 소유 카드는 불변.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-29 13:07:04 +09:00
co-authored by Claude Opus 5
parent 0d4e4c758d
commit 2cad971f6a
@@ -392,7 +392,23 @@ export function computeCardCulvert(
)?.revetShift ?? ownerInput;
// 연동을 풀어도 **같은 기슭막이**다 — 단 수는 소유 측점 것이고, 이 측점이 손댄
// 벽만 자기 값으로 선다(2026-08-30 사용자).
const ownerAdjusts = detached ? detachedAdjusts(section, ownerApplied, revetOffset) : ownerApplied;
const merged = detached ? detachedAdjusts(section, ownerApplied, revetOffset) : ownerApplied;
// 이 측점까지 오지 않는 단은 **계산에서부터** 뺀다. 다 세워 놓고 그림만 지우면
// (`trimLinkedLayout`) 성토부선은 원래 단 수로 계산된 채 남아, 마지막 단 뒤 성토면이
// 갱신되지 않는다(2026-08-30 사용자 지적: 우측 독립 기슭막이에서 단이 없어져도
// 그 위 성토면이 그대로). 단은 위에서부터 쌓이므로 **덮이는 앞부분만** 남긴다.
const tierPrefix = (kind: "extra" | "bextra", total: number): number => {
let count = 0;
while (count < total && spanCovers(tierSpanOf(link.source, `${kind}${count}`), link.deltaM)) {
count += 1;
}
return count;
};
const ownerAdjusts: WallAdjustSet = merged && {
...merged,
extras: merged.extras.slice(0, tierPrefix("extra", merged.extras.length)),
basinExtras: merged.basinExtras.slice(0, tierPrefix("bextra", merged.basinExtras.length)),
};
// 경사 해제 = **수평(Z 일원화)**. 3D 링만 눕히는 게 아니라 횡단도에서도 기준벽
// 상단 표고를 소유 측점과 같게 맞춘다(2026-08-30 사용자 확정 — 종전 "3D 전용"
// 규정을 갈아엎는다). 차이는 노견 확장 구간이 흡수하므로 성토선은 이 측점