feat(B06): 기슭막이 하단을 수평 기초로 — 높이는 상~하단 전체로 표기
- 하단선 = 수평(기초공사 기준 — 2026-08-22 사용자 확정). 깊이는 벽 발자국 안 원지반(또는 관 invert) 최저점 − 0.5m. 종전 지반 추종 경사 하단 폐지. - 전면 1:0.3 경사선을 하단까지 연장 — 바닥이 깊어진 만큼 발끝이 바깥으로. 발끝 지반이 더 낮으면 한 번 더 내림(2-pass). - WallLayout.height = 상단~하단 전체 높이(근입 포함)로 변경 — 툴팁 H 표기 기준. 설계 파라미터(폭·기움)는 invert 기준 높이 유지. - 검증: 4+4.3(H 2.0/2.1)·13+15.7(H 1.9) 하단 수평·관 감싸기 SVG 실좌표 확인. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -385,26 +385,39 @@ export function computeCulvertLayout(
|
||||
const topBack: OffsetPoint = { offset: backOffset, elevation: topElevation };
|
||||
// 상단 변: 사다리꼴 상단(t/2) + 띠(t). 이음선은 상단 변 중간점에서 1:0.3으로 바닥까지.
|
||||
const topFront = topJoint + outward * thickness;
|
||||
// 근입: 하단선은 **원지반을 수직으로 0.5m 내린 선**이다(2026-08-21 사용자 확정).
|
||||
// 종전에는 수평 바닥이라 사면에서 앞 모서리가 떴다.
|
||||
// 기슭막이는 **배관을 묻고 보강하는 구조물 — 관을 감싸야 한다**(2026-08-22 사용자
|
||||
// 확정): 하단은 어떤 경우에도 관 하단(invert = anchor.elevation) 아래 0.5m를
|
||||
// 확보한다. 관이 지반보다 낮게 묻힌 자리는 invert−0.5가 지반−0.5보다 깊고,
|
||||
// 바닥이 원지반에서 뜬 벽(floatGapM>0)도 관 기준 0.5는 그대로 내려간다
|
||||
// (뜬 공간은 별도 지지 구조물 — 추가 예정).
|
||||
const bottomAt = (offset: number): number =>
|
||||
(floatGapM > 1e-6 ? anchor.elevation : Math.min(groundAt(offset), anchor.elevation)) -
|
||||
// 하단선: **수평**(2026-08-22 사용자 확정 — 기초공사는 수평 기초라 지반을 따라
|
||||
// 기울지 않는다). 깊이는 벽 발자국 안 기준선(원지반 또는 관 invert)의 **최저점**
|
||||
// 아래 0.5m — 기슭막이는 관을 감싸는 구조물이라 관 하단(invert) 아래 0.5m는 어떤
|
||||
// 경우에도 확보한다. 바닥이 원지반에서 뜬 벽(floatGapM>0)은 관 invert 기준 0.5만
|
||||
// 내려간다(뜬 공간은 별도 지지 구조물 — 추가 예정).
|
||||
// 전면(계류측) 경사선(1:0.3)은 그대로 하단까지 **연장**한다 — 바닥이 깊어진 만큼
|
||||
// 전면 발끝이 바깥으로 나간다. 발끝 지반이 더 낮으면 한 번 더 내린다(2-pass).
|
||||
const frontXAt = (elevation: number): number =>
|
||||
topFront + outward * REVET_LEAN_RATIO * (topElevation - elevation);
|
||||
let bottomElevation =
|
||||
(floatGapM > 1e-6
|
||||
? anchor.elevation
|
||||
: Math.min(groundAt(backOffset), groundAt(frontBase), anchor.elevation)) -
|
||||
REVET_EMBED_DEPTH_M;
|
||||
const bottomBack: OffsetPoint = { offset: backOffset, elevation: bottomAt(backOffset) };
|
||||
const bottomFront: OffsetPoint = { offset: frontBase, elevation: bottomAt(frontBase) };
|
||||
if (floatGapM <= 1e-6) {
|
||||
const toeGround = Math.min(groundAt(frontXAt(bottomElevation)), anchor.elevation);
|
||||
bottomElevation = Math.min(bottomElevation, toeGround - REVET_EMBED_DEPTH_M);
|
||||
}
|
||||
const bottomBack: OffsetPoint = { offset: backOffset, elevation: bottomElevation };
|
||||
const bottomFront: OffsetPoint = {
|
||||
offset: frontXAt(bottomElevation),
|
||||
elevation: bottomElevation,
|
||||
};
|
||||
const wall: WallLayout = {
|
||||
role: spec.role,
|
||||
form: spec.revet_form ?? null,
|
||||
lengthM: spec.revet_length_m ?? null,
|
||||
backOffset,
|
||||
outerOffset: frontBase,
|
||||
outerOffset: bottomFront.offset,
|
||||
base: anchor.elevation,
|
||||
height,
|
||||
// 높이 = **상단~하단(수평 기초) 전체 높이**(2026-08-22 사용자 확정 — 종전에는
|
||||
// 관 invert~상단만 적었다). 설계 파라미터(경사·폭)는 invert 기준 높이로 유지.
|
||||
height: topElevation - bottomElevation,
|
||||
floatGapM,
|
||||
outward,
|
||||
topBack,
|
||||
|
||||
@@ -35,6 +35,7 @@ export interface WallLayout {
|
||||
/** 전면(계류측) 바닥 offset. */
|
||||
outerOffset: number;
|
||||
base: number;
|
||||
/** 벽 전체 높이(m) = 상단 ~ 수평 기초 하단(2026-08-22 사용자 확정 — 근입 포함). */
|
||||
height: number;
|
||||
/**
|
||||
* 바닥이 원지반에서 뜬 간격(m, 2026-08-22 사용자 확정). 손으로 안쪽에 당겨 높이
|
||||
@@ -49,7 +50,8 @@ export interface WallLayout {
|
||||
topBack: OffsetPoint;
|
||||
/** 이음선 상단점(평행사변형↔사다리꼴 상단 교차점) — 성토 사면선이 여기서 끝난다. */
|
||||
topJoint: OffsetPoint;
|
||||
/** 하단선 양 끝 — **원지반을 수직 0.5m 내린 선**이라 사면에서는 기울어 있다. */
|
||||
/** 하단선 양 끝 — **수평 기초**(2026-08-22 사용자 확정): 발자국 최저 지반(또는 관
|
||||
* invert) − 0.5m 표고의 수평선. 전면 발끝은 1:0.3 경사선을 하단까지 연장한 자리다. */
|
||||
bottomBack: OffsetPoint;
|
||||
bottomFront: OffsetPoint;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user