diff --git a/B06_Section/B06_Section_UI_Page.ts b/B06_Section/B06_Section_UI_Page.ts index 12d96b38..e3557f2c 100644 --- a/B06_Section/B06_Section_UI_Page.ts +++ b/B06_Section/B06_Section_UI_Page.ts @@ -714,14 +714,23 @@ export async function renderB06ProfileCross(root: HTMLElement): Promise { // 확정 이력의 표준 횡단면 설정값 복원(진행 중 세션 편집값이 있으면 패널이 무시). if (storedOptions?.standard_cross_section) standardPanel?.applyStored(storedOptions.standard_cross_section); - // 입력칸의 기준값은 **표시 기본 12m**(2026-08-19 사용자 지시, 위에서 이미 넣었다 — - // 계산·보유 샘플 폭은 백엔드 기본 20m 유지)이고, 사용자가 값을 지정해 확정한 이력 - // (data.options)이 있을 때만 그 값으로 바꾼다(2026-08-08 사용자 지시). 예전에는 - // options가 없으면 보유 샘플의 최대 offset을 계산해 덮었는데, 옛 기본값(15m)으로 - // 만들어진 노선이 15.0으로 보여 기준값 구실을 못 했다. - // 표시값이 보유 샘플 폭보다 크면 [전체 측점 반영]이 알아서 재생성한다(applyPanelToAll). - const storedHalfWidth = storedOptions?.cross_half_width_m ?? 0; - if (storedHalfWidth > 0) crossHalfWidthField.input.value = storedHalfWidth.toFixed(1); + /* 입력칸의 기준값은 **표시 기본 12m**(2026-08-19 사용자 지시, 위에서 이미 넣었다). + * + * ⚠ `data.options.cross_half_width_m`은 종단·횡단을 만들 때 쓴 **샘플링(계산) + * 반폭**이지 사용자가 고른 표시 폭이 아니다(엔진이 offsets 범위를 만들 때 쓰고 + * 그대로 저장한다). 그 값으로 입력칸을 덮으면 표시 기본값이 언제나 계산 기본 + * 20m으로 되돌아온다 — 2026-08-19 사용자 보고의 원인이 이것이다. 그래서 여기서는 + * 읽지 않고, 사용자가 실제로 고른 표시 폭만 되살린다: + * ① 측점 개별 표시 반폭의 저장값(design.display_half_width_m) 대표값 + * ② 세션에 남은 마지막 조절값(같은 노선으로 돌아왔을 때) + * 표시값이 보유 샘플 폭보다 크면 [전체 측점 반영]이 알아서 재생성한다. */ + const savedDisplayWidths = sectionDetail.cross_sections + .map((section) => section.design?.display_half_width_m) + .filter((width): width is number => typeof width === "number" && width > 0); + if (savedDisplayWidths.length) { + // 측점마다 다를 수 있다 — 전역 입력칸에는 가장 넓은 값을 올린다(잘림 방지). + crossHalfWidthField.input.value = Math.max(...savedDisplayWidths).toFixed(1); + } // 세션에 보관된 표시 반폭이 있으면 그것이 우선한다(사용자가 마지막으로 지정한 값). const sessionDisplayKey = displaySessionKey(); if (sessionDisplayKey) {