From c8eeb15b8119e591a5589859bfc8069c421673c5 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Tue, 4 Aug 2026 19:08:15 +0900 Subject: [PATCH] =?UTF-8?q?fix(B05):=20=ED=99=95=EC=A0=95=EB=90=9C=20?= =?UTF-8?q?=EA=B5=AC=EC=A1=B0=EB=AC=BC=20=EC=B8=A1=EC=A0=90=EC=9D=98=20?= =?UTF-8?q?=ED=8E=B8=EC=A7=91=20=EB=B2=84=ED=8A=BC=20=EC=9D=B4=EC=A4=91=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 확정을 거친 구조물 측점은 종단 정본(alignment.stations)에 이미 병합돼 있는데 사이드바 목록(irregular)에서 또 추가돼 ▲▼가 2개씩 생겼다(같은 자리에 겹쳐 있다가 겹침 회피 캐스케이드가 옆으로 벌리면서 드러남). 같은 chainage(소수 3자리)는 한 번만 버튼을 단다. 검증: 버튼 27→23개(배관 4곳 중복 제거), 근접 측점 비킴은 유지. Co-Authored-By: Claude Opus 5 (1M context) --- B05_wf2_Route/B05_wf2_Route_UI_Profile_Edit.ts | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/B05_wf2_Route/B05_wf2_Route_UI_Profile_Edit.ts b/B05_wf2_Route/B05_wf2_Route_UI_Profile_Edit.ts index 180395ba..8ab19cb4 100644 --- a/B05_wf2_Route/B05_wf2_Route_UI_Profile_Edit.ts +++ b/B05_wf2_Route/B05_wf2_Route_UI_Profile_Edit.ts @@ -241,16 +241,25 @@ export function createEditOverlay(options: EditOverlayOptions): HTMLElement { * 비정규 측점(구조물)이 규칙 측점 바로 옆에 서면 ▲▼가 서로 덮였다(2026-08-04 사용자 * 보고) — 앞 버튼과 최소 간격(BUTTON_CLEARANCE_PX)을 강제하며 오른쪽으로 밀어낸다. * 측점선 자체는 그대로라 버튼만 살짝 비켜선다. + * + * 확정을 거친 구조물 측점은 종단 정본(alignment.stations)에 **이미 병합**돼 있어 + * 사이드바 목록(irregular)과 이중으로 잡힌다 — 같은 chainage(소수 3자리)는 한 번만 + * 버튼을 단다(2026-08-04 사용자 보고: 구조물 측점 버튼이 2개씩 생김). */ + const alignmentStationKeys = new Set( + alignment.stations.map((station) => chainageKey(station.chainage_m)), + ); const stationPlacements = [ ...alignment.stations.map((station) => ({ chainage: station.chainage_m, plan: station.plan_elevation_m, })), - ...irregular.map((station) => ({ - chainage: station.chainage_m, - plan: planElevationAtSample(alignment, station.chainage_m), - })), + ...irregular + .filter((station) => !alignmentStationKeys.has(chainageKey(station.chainage_m))) + .map((station) => ({ + chainage: station.chainage_m, + plan: planElevationAtSample(alignment, station.chainage_m), + })), ] .sort((a, b) => a.chainage - b.chainage) .map(