fix(B06): 추가 기슭막이 바닥을 원지반에 앉힘
연계(추가) 기슭막이가 성토사면과 안 맞는다는 지적(3-5)을 수치로 재니, 어긋난 곳은 접점이 아니라 바닥이었음 — 상단은 1:1.2 성토선에 붙는데 키는 요청값 그대로라 지형이 모자라면 바닥이 떴음(실측 0.12~0.87m). 자리는 그대로 두고 키를 지반까지 맞춤 — 지반이 낮으면 형태 높이 한계까지 키우고, 높으면 최소 높이까지 줄임. 조정창 되받기 값도 조정된 높이로 나감. 검증: 264.06 0.394 → 0.000m(키 1.00 → 1.39), 821.62 0.427 → 0.000, 914.93 0.122 → 0.000. 731.31 은 0.873 → 0.373 으로 줄되 남음(돌쌓기(메) 높이 한계 2.0m — 경고 유지가 맞음). 테스트 390 통과. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -312,8 +312,9 @@ export function buildOutletExtras(input: OutletExtrasInput): OutletExtrasResult
|
||||
),
|
||||
limit,
|
||||
);
|
||||
/** 기준선(근입 위)~상단 — 도형·자리 계산은 종전대로 이 값으로 한다. */
|
||||
const exposed = height - REVET_EMBED_DEPTH_M;
|
||||
/** 기준선(근입 위)~상단 — 도형·자리 계산은 종전대로 이 값으로 한다.
|
||||
* 지형이 요청 높이만큼 안 나오면 아래 스캔 뒤 **낮춰서** 바닥을 지반에 앉힌다. */
|
||||
let exposed = height - REVET_EMBED_DEPTH_M;
|
||||
|
||||
/** 자리 x(벽 하단 중점)에 지반 안착 + 상단이 성토선에 닿는 데 필요한 높이. */
|
||||
const heightAt = (x: number): number => {
|
||||
@@ -416,26 +417,36 @@ export function buildOutletExtras(input: OutletExtrasInput): OutletExtrasResult
|
||||
if (!placeable(appliedX, appliedD)) break; // 자동 자리조차 매몰 — 이 단은 불가.
|
||||
appliedD = Math.round(appliedD * 10) / 10;
|
||||
appliedX = Math.round(appliedX * 10) / 10;
|
||||
appliedAdjusts.push({
|
||||
x: appliedX,
|
||||
d: appliedD,
|
||||
h: adjust.h != null ? height : null,
|
||||
m: adjust.m,
|
||||
});
|
||||
|
||||
const topElevation = autoTop - appliedD;
|
||||
const anchorX = autoOffset + outward * appliedX;
|
||||
const base = topElevation - exposed; // 근입 0.5 위 기준선
|
||||
// 바닥을 **원지반에 앉힌다**(2026-09-06 사용자 지적: 연계 기슭막이가 사면과 안 맞음).
|
||||
// 상단은 1:1.2 성토선에 붙어 있어야 하므로 자리는 그대로 두고 **키만** 지반까지
|
||||
// 맞춘다 — 지반이 낮으면 키우고(형태 한계까지), 높으면 줄인다(최소 높이까지).
|
||||
// 예전에는 요청 높이를 그대로 써 바닥이 최대 0.87m 떠 있었다(실측 264.06·731.31).
|
||||
const groundBase = groundAt(anchorX);
|
||||
const fitted = Math.min(
|
||||
Math.max(topElevation - groundBase, EXTRA_WALL_MIN_HEIGHT_M - REVET_EMBED_DEPTH_M),
|
||||
limit - REVET_EMBED_DEPTH_M,
|
||||
);
|
||||
const appliedExposed = Number.isFinite(fitted) ? fitted : exposed;
|
||||
const base = topElevation - appliedExposed; // 근입 0.5 위 기준선
|
||||
const wall = buildExtraWall(
|
||||
i,
|
||||
{ offset: anchorX, elevation: base },
|
||||
outward,
|
||||
exposed,
|
||||
appliedExposed,
|
||||
material,
|
||||
Math.max(0, base - groundAt(anchorX)),
|
||||
Math.max(0, base - groundBase),
|
||||
form,
|
||||
);
|
||||
walls.push(wall);
|
||||
// 되받기 — 지반에 맞춰 조정한 값이 **실제 적용 높이**다(조정창이 그대로 받아 적는다).
|
||||
appliedAdjusts.push({
|
||||
x: appliedX,
|
||||
d: appliedD,
|
||||
h: adjust.h != null ? appliedExposed + REVET_EMBED_DEPTH_M : null,
|
||||
m: adjust.m,
|
||||
});
|
||||
// 성토선: src → (수평 선반 x>0이면 선반 끝) → 이음선 상단점. 사면길이 = 경사부.
|
||||
const shelfRun = Math.max(0, appliedX - FILL_SLOPE_RATIO_MIN * appliedD);
|
||||
const shelf: OffsetPoint | null =
|
||||
|
||||
Reference in New Issue
Block a user