Merge remote-tracking branch 'origin/main_laptop_1' into sub_laptop_1

# Conflicts:
#	B06_Section/B06_Section_Api_Types.ts
This commit is contained in:
2026-09-07 18:09:36 +09:00
19 changed files with 438 additions and 14 deletions
+11 -1
View File
@@ -81,6 +81,9 @@ export interface CrossDesignOptions {
standard: StandardCrossSectionSpec;
rockBoundaryOffsetM?: number | null;
twoStageSlope?: boolean;
/** 이 측점만 쓰는 절토 경사비(1:n 의 n) — 카드에서 넣은 사용자 값. 없으면 표준값.
* 짝: 파이썬 `compute_cross_design(cut_slope_ratio=…)`. */
cutSlopeRatio?: number | null;
ditchEnabled?: boolean | null;
/** 세월교 월류 높이만큼 노면을 통째로 내린다(m). */
surfaceDropM?: number;
@@ -252,7 +255,14 @@ export function computeCrossDesign(
if (ditchType === "l_type" && presetKey !== "rock") {
throw new Error("L형 측구는 암(리핑암/발파암) 구간에서만 선택할 수 있습니다.");
}
const group = resolveGroup(presetKey, options.standard);
let group = resolveGroup(presetKey, options.standard);
// 측점 하나만 다른 절토 경사(2026-09-07 사용자 지시) — 표준 그룹의 경사비만 갈아 끼운다.
// ⚠ 여기서 갈아야 아래 기하·소단이 전부 새 경사를 따른다. 계산이 끝난 뒤 값만 베껴
// 붙이면 설계선은 옛 경사로 그려지고 숫자만 새것이 되어 어긋난다.
const userCutRatio = options.cutSlopeRatio;
if (typeof userCutRatio === "number" && Number.isFinite(userCutRatio) && userCutRatio > 0) {
group = { ...group, cut_slope_ratio: userCutRatio };
}
const pavedGroup = resolveGroup("paved", options.standard);
// 포장 중첩: 횡단경사와 포장층 두께만 포장 그룹을 따른다.
const crossSlopePct = paved ? pavedGroup.cross_slope_pct : group.cross_slope_pct;