From a0e6289e8f55e4f01803bbba76c9e7ee5dcc8be6 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Sun, 2 Aug 2026 00:58:55 +0900 Subject: [PATCH] =?UTF-8?q?fix(B05):=20=EA=B4=80=EC=9D=84=20=EC=98=AE?= =?UTF-8?q?=EA=B2=A8=EB=8F=84=20=EC=98=9B=20=EC=9E=90=EB=A6=AC=20=EA=B5=AC?= =?UTF-8?q?=EC=A1=B0=EB=AC=BC=20=EC=84=B8=EB=A1=9C=EC=84=A0=EC=9D=B4=20?= =?UTF-8?q?=EB=82=A8=EB=8D=98=20=EB=AC=B8=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 구조물 측점이 두 곳에 있었다. 화면 정본인 사이드바 목록과, 경로 확정 때 종단 정본 파일에 병합된 kind="irregular" 측점이다. 그래프와 3D가 둘을 겹쳐 그려서 관을 옮기면 사이드바 목록만 따라가고 확정 당시 자리는 그대로 남았다. 그래프(_UI_Profile_Panel.draw)와 3D(_UI_Page.renderStationLines) 모두 종단 정본의 비정규 측점을 걷어내고 사이드바 목록만 얹는다. 저장분은 진입 시 restoreSections가 목록으로 되살리고, 관 항목은 배수유역도가 정본 (pipe_points.json)에 맞춰 갈아 끼운다. Co-Authored-By: Claude Opus 5 (1M context) --- B05_wf2_Route/B05_wf2_Route_UI_Page.ts | 8 ++++++-- B05_wf2_Route/B05_wf2_Route_UI_Profile_Panel.ts | 16 ++++++++-------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/B05_wf2_Route/B05_wf2_Route_UI_Page.ts b/B05_wf2_Route/B05_wf2_Route_UI_Page.ts index bbe7b025..2f5cd140 100644 --- a/B05_wf2_Route/B05_wf2_Route_UI_Page.ts +++ b/B05_wf2_Route/B05_wf2_Route_UI_Page.ts @@ -390,13 +390,17 @@ export async function renderB05Route(root: HTMLElement): Promise { } function renderStationLines(detail: SectionDetailResponse): void { + // 확정 때 종단 정본에 병합해 둔 비정규 측점은 그리지 않는다. 화면의 정본은 사이드바 목록이고 + // 관을 옮기면 그 목록만 따라오므로, 둘을 겹쳐 그리면 옮기기 전 자리가 그대로 남는다 + // (2026-08-02 사용자 보고). 저장분은 진입 시 `restoreSections`가 목록으로 되살린다. + const regular = detail.longitudinal.stations.filter((station) => station.kind !== "irregular"); const injected = interpolateIrregularStations( - detail.longitudinal.stations, + regular, irregularStations, detail.longitudinal.length_m, ); // 측점 바 양 끝 램프용 상단측: 사용자 변경분 → solve 자동 판정 순으로 적용. - const withUphill = [...detail.longitudinal.stations, ...injected].map((station) => ({ + const withUphill = [...regular, ...injected].map((station) => ({ ...station, uphill_side: uphillOverrides.get(uphillKey(station.chainage_m)) ?? station.uphill_side ?? null, diff --git a/B05_wf2_Route/B05_wf2_Route_UI_Profile_Panel.ts b/B05_wf2_Route/B05_wf2_Route_UI_Profile_Panel.ts index adbc7f73..2f2d670e 100644 --- a/B05_wf2_Route/B05_wf2_Route_UI_Profile_Panel.ts +++ b/B05_wf2_Route/B05_wf2_Route_UI_Profile_Panel.ts @@ -472,15 +472,15 @@ export function createRouteProfilePanel( : (longitudinal.design_profiles ?? []); // 그래프에는 비정규 측점을 일반 측점처럼(세로선+라벨) 섞어 넣는다. const graphData = normalizedLongitudinal(longitudinal); + // 종단 정본(확정 시 병합분)에 들어 있는 비정규 측점은 걷어낸다 — 화면의 정본은 사이드바 + // 목록이고, 관을 옮기면 그 목록만 따라온다. 둘을 겹쳐 그리면 옮기기 전 자리의 세로선이 + // 그대로 남는다(2026-08-02 사용자 보고). + const regular = graphData.stations.filter((station) => station.kind !== "irregular"); const injected = irregularGraphStations(irregularStations, maxChainageOf(longitudinal)); - const graphLongitudinal = injected.length - ? { - ...graphData, - stations: [...graphData.stations, ...injected].sort( - (a, b) => a.chainage_m - b.chainage_m, - ), - } - : graphData; + const graphLongitudinal = { + ...graphData, + stations: [...regular, ...injected].sort((a, b) => a.chainage_m - b.chainage_m), + }; let yAxis: { padLeft: number; ticks: Array<{ y: number; label: string }> } | null = null; chartWrap.append( createLongitudinalProfile(