feat(B06): 집수정 관 끝선·두께 0.2·구조물 형식 드롭다운
2026-08-22 사용자 요청 3건: - 관 끝선 = I형 벽의 안쪽(물받는 쪽) 변 복사(기슭막이와 동일 방식). 관 시작점(하단): ㄴ·ㄷ형은 측벽 안쪽 변×바닥 윗면 교차점, I형은 내공 1.0m 유지. - 집수정 부재(벽·바닥판) 두께 0.2m(BASIN_MEMBER_THICKNESS_M). - 유입 구조물 형식 드롭다운: 자동(규칙)/기슭막이+배관/집수정 I·ㄴ·ㄷ형. 집수정 클릭 선택 가능, 선택 시 조정창에 드롭다운(집수정은 ◀▶ 숨김). 세션 보관(inletstruct)·revet 선택 시 양측성토 로직 복귀·manual 사유. - 집수정 구성을 _Cross_Culvert_Basin.ts로 분리(700줄 제한 — Geom 690줄). I형 바닥판 제거(벽뿐 — 정의 정합). - 검증: 13+15.7 모듈(auto/revet/I/L/U 전부 기대 형상·관유입 자리 일치) + UI 실조작(집수정 클릭→드롭다운 revet/U/auto 전환, 부재 수 2→0→3→2, 세션 왕복) + 스크린샷 대조. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -308,3 +308,39 @@ export function solveWallVertical(
|
||||
const floatGap = Math.max(0, desiredTop - limitHeight - groundBase);
|
||||
return { height, baseElevation: groundBase + floatGap, floatGapM: floatGap };
|
||||
}
|
||||
|
||||
/** 교점을 마감면 **선분 안**으로 자른다 — 선분 밖(벽 하단 아래 등)으로 새지 않게. */
|
||||
export function clampToFace(
|
||||
point: OffsetPoint,
|
||||
face: { base: OffsetPoint; direction: { offset: number; elevation: number } },
|
||||
): OffsetPoint {
|
||||
const dot =
|
||||
(point.offset - face.base.offset) * face.direction.offset +
|
||||
(point.elevation - face.base.elevation) * face.direction.elevation;
|
||||
const len2 =
|
||||
face.direction.offset * face.direction.offset +
|
||||
face.direction.elevation * face.direction.elevation;
|
||||
const t = len2 > 1e-12 ? Math.min(Math.max(dot / len2, 0), 1) : 0;
|
||||
return {
|
||||
offset: face.base.offset + face.direction.offset * t,
|
||||
elevation: face.base.elevation + face.direction.elevation * t,
|
||||
};
|
||||
}
|
||||
|
||||
/** 설계선을 따라 [from → to] 구간의 경사길이(m)를 잰다 — 성토사면 길이 측정용. */
|
||||
export function slopeLengthAlong(
|
||||
designAt: (offset: number) => number,
|
||||
from: number,
|
||||
to: number,
|
||||
): number {
|
||||
const steps = 60;
|
||||
let length = 0;
|
||||
let prevElev = designAt(from);
|
||||
for (let i = 1; i <= steps; i += 1) {
|
||||
const o = from + ((to - from) * i) / steps;
|
||||
const e = designAt(o);
|
||||
length += Math.hypot((to - from) / steps, e - prevElev);
|
||||
prevElev = e;
|
||||
}
|
||||
return length;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user