From 2cad971f6ae9c9d723bd01723313f5ba5f478a12 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Sat, 29 Aug 2026 13:07:04 +0900 Subject: [PATCH] =?UTF-8?q?fix(B06):=20=EC=97=B0=EC=9E=A5=20=EB=B0=96=20?= =?UTF-8?q?=EB=8B=A4=EB=8B=A8=EC=9D=80=20=EA=B3=84=EC=82=B0=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EB=B9=BC=20=EC=84=B1=ED=86=A0=EB=A9=B4=EC=9D=B4=20?= =?UTF-8?q?=EB=94=B0=EB=9D=BC=EC=98=A4=EA=B2=8C=20=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 증상(사용자): 독립 기슭막이 우측 다단이 구간값에 따라 옆 측점에서 없어지는데, 그 위 기준벽 이후 성토면은 갱신되지 않는다. 원인: 링크 카드가 다단을 **다 세워 놓고 그림만 지웠다**(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) --- .../B06_Section_UI_Cross_Culvert_Wire.ts | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/B06_Section/B06_Section_UI_Cross_Culvert_Wire.ts b/B06_Section/B06_Section_UI_Cross_Culvert_Wire.ts index 7c66da84..65969bc3 100644 --- a/B06_Section/B06_Section_UI_Cross_Culvert_Wire.ts +++ b/B06_Section/B06_Section_UI_Cross_Culvert_Wire.ts @@ -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 전용" // 규정을 갈아엎는다). 차이는 노견 확장 구간이 흡수하므로 성토선은 이 측점