feat(B05): 계획노선 편집 창 — 측점 라벨 글자 · 호를 눌러도 고름(22-2 · 22-3)

- 누르기(Pointer)에 라벨 상자를 넘기고 눈금 다음에 라벨 · 호 갈래를 더함
- 호를 누르면 교각점을 누른 것과 같은 곡선 · 같은 패널(끌기 없음)
- 우선순위 점 · 손잡이 > 눈금 > 라벨 > 호 > 등고선

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EauA2ATmqNRbeV48s9CcBr
This commit is contained in:
2026-09-29 19:53:00 +09:00
co-authored by Claude Sonnet 5.5
parent 998660c342
commit b492a9195a
@@ -17,10 +17,12 @@ import {
type Vertex,
} from "./B05_Profile_UI_RouteEdit_Curve";
import {
arcAtScreen,
handleAtScreen,
nodeAtScreen,
segmentAtScreen,
stationAtScreen,
stationLabelBoxes,
} from "./B05_Profile_UI_RouteEdit_Input";
import {
curveShortfalls,
@@ -186,6 +188,7 @@ export function bindRouteEditPointer(params: RouteEditPointerParams): RouteEditP
px,
py,
STATION_HIT_PX,
stationLabelBoxes(canvas),
);
if (chainage === null) return false;
void params.crossPreview.open(chainage);
@@ -193,6 +196,19 @@ export function bindRouteEditPointer(params: RouteEditPointerParams): RouteEditP
})()
) {
/* 횡단 창이 떴다 — 더 집지 않는다. */
} else if (
// 호(곡선 부분)를 누르면 그 곡선을 고른다 — 교각점을 누른 것과 같다(끌기만 없다). 점·눈금 다음.
((): boolean => {
const node = arcAtScreen(state.curveInfo, toScreen, px, py);
if (node < 0) return false;
params.setPicked(node);
params.measure.clear();
params.syncCurveBar();
params.draw();
return true;
})()
) {
/* 곡선을 골랐다 — 등고선은 안 집는다. */
} else if (state.contours) {
// 노드도 손잡이도 아니면 **등고선**을 집는다 — 노선 편집이 늘 먼저다(계획서 0-9 ⑦).
// 빈 자리를 누르면 -1 이 되어 고른 것이 풀린다.