- 겹 표(map_layer_list) = 그룹1 22 줄 표 차례 · title = 호버제목 · group(수계망도 · 도로 · 토지·건물 · 제한·재해) · pages · 숨김 표 걷음 · 도로300m 한 줄(「도로」 묶음 · 기능 남김) - 겹 줄(map_layer_bar) = 단독 넷 | 묶음 넷(여럿 고르기 메뉴 · 켠 수 배지 · 안 닫힘) | 그래픽 카드 · sync 가 단추 · 메뉴 줄 막힘 · 글을 맞춤(why = 페이지 까닭) - 도구 표(map_toolbar) = 그룹2 17 줄 title · mapToolGroups 가 글을 표로 맞춤 · 기본 단추 생성 · 지형 칩 막힘 「수치지형도/라이다 — 까닭」 - 띠 = 한 자료 · 겹 둘(GL fillEdge 거름 · 옛 캔버스 · 범례 줄 따로) · B05 띠 받기(D03 과 같은 서버 길 · bandCollection 공용) - D03 = 겹 줄 · 도구줄 한 행(createMapToolRow) · 222px 기댐 · 줄바꿈 CSS 걷음 · 측점 · 기울기 호버 덮어쓰기 걷음 · LAS 올리기 호버 걷음 - B05 = 세로 두 줄 → 한 행 · 호버 덮어쓰기 걷음(도구줄 · 1m 등고선 · 3D · 추천) · 겹 막힘 querySelector 덮어쓰기 → 공용 sync · 임도(업로드) 보임 + 「받은 임도 자료 없음」 막힘 · 스냅 간격 날 select → 고르기 메뉴(하나) - 켬끔 기억 열쇠 · 측점 · 기울기 처음 값 · 그래픽 카드 취향 열쇠 둘 그대로 - 낡은 시험 고침(568_1 · 622_2 · 624_2 · 624_3 · 553_4 · 625_draw · b05_routeedit_initial · 626_3 · 390_4 · 346_2 · 353_1 · 581_2 · 584_1 · 584_3) — 표 꼴 row() · 호버 글 = 표 · 한 행 · 고르기 메뉴로 바뀐 글을 잡음 · 새 지킴 634_2 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
111 lines
4.8 KiB
TypeScript
111 lines
4.8 KiB
TypeScript
/* =============================================================================
|
|
* map_toolbar.ts
|
|
* 공용 지도 도구줄 표(PLAN 624-2 · 634-2 · 요구 530 · 546) — 예정노선(D03) · B05 평면이 같이 씀.
|
|
* 한 줄 = 요구 546 그룹2 표 한 줄 — 열쇠(`ui_template_map_tools` 단추 이름 · 아이콘) · 호버제목(`title`) · 할 일 · 보일 페이지.
|
|
* 묶음 = 나눔선 · 차례 = 도구줄 차례 · 단추 아닌 칸(간격 고르기 · 추천 노선 보기 · 지형 칩)은 페이지가 만든 요소.
|
|
* 마우스 글 = 이 표 `title` 하나(페이지 덮어쓰기 없음) · 막힘이면 페이지가 `mapToolTip(단추, 까닭)` → 「제목 — 까닭」.
|
|
* 누름 동작은 페이지 몫 — 만든 요소를 `parts` 로 넘기면 그 자리에 · 안 넘긴 단추는 기본 단추(돌리기 둘 = 공용 돌림이 `data-act` 로 찾음).
|
|
* [?] 도움말 단추 = `createMapTools` 의 `hint`(맨 앞 · 글 = 이 표 첫 줄).
|
|
* 쓰는 법 = `createMapTools({ label, hint, groups: mapToolGroups("d03", { undo: undoButton, terrain: chip.root }) })`.
|
|
* ========================================================================== */
|
|
|
|
import { mapToolButton, mapToolTip, type MapToolAct } from "@ui/ui_template_map_tools";
|
|
import type { MapPage } from "./map_layer_list";
|
|
|
|
export type MapToolKey = MapToolAct | "hint-toggle" | "snap-step" | "recommend" | "terrain";
|
|
|
|
export interface MapToolRow {
|
|
key: MapToolKey;
|
|
/** 호버제목(요구 546 표). */
|
|
title: string;
|
|
does: string;
|
|
pages: readonly MapPage[];
|
|
}
|
|
|
|
const BOTH: readonly MapPage[] = ["d03", "b05"];
|
|
const B05: readonly MapPage[] = ["b05"];
|
|
|
|
export const MAP_TOOLBAR: readonly (readonly MapToolRow[])[] = [
|
|
[{ key: "hint-toggle", title: "도움말", does: "조작 도움말 펼치기 · 접기(`hint`)", pages: BOTH }],
|
|
[
|
|
{ key: "undo", title: "되돌리기", does: "편집 한 걸음 되돌림(Ctrl+Z)", pages: BOTH },
|
|
{ key: "redo", title: "다시하기", does: "되돌린 걸음 다시(Ctrl+Y)", pages: BOTH },
|
|
],
|
|
[
|
|
{ key: "view3d", title: "3D", does: "3D 큰 창(동작 = 페이지 몫)", pages: BOTH },
|
|
{ key: "rotate-ccw", title: "좌 회전", does: "지도 반시계로 돌림(Ctrl+휠도)", pages: BOTH },
|
|
{ key: "rotate-cw", title: "우 회전", does: "지도 시계로 돌림", pages: BOTH },
|
|
],
|
|
[
|
|
{
|
|
key: "contour-minor",
|
|
title: "등고선 1m",
|
|
does: "라이다 1 m 등고선 켬끔(라이다일 때만 열림)",
|
|
pages: B05,
|
|
},
|
|
{ key: "stations", title: "측점", does: "측점 눈금 · 번호 켬끔", pages: BOTH },
|
|
{ key: "slopes", title: "길이·기울기", does: "구간 길이 · 기울기 글 켬끔", pages: BOTH },
|
|
{ key: "footprint", title: "절성토선", does: "도로 끝 · 비탈 끝 켬끔", pages: B05 },
|
|
{ key: "measure", title: "길이측정", does: "거리 재기(동작 = 페이지 몫 · A⑩)", pages: BOTH },
|
|
],
|
|
[
|
|
{
|
|
key: "station-snap",
|
|
title: "스냅",
|
|
does: "곡선 가운데(MC)를 간격 배수에 맞춤",
|
|
pages: B05,
|
|
},
|
|
{ key: "snap-step", title: "스냅 간격", does: "스냅 간격 고르기(고르기 메뉴)", pages: B05 },
|
|
],
|
|
[
|
|
{
|
|
key: "expected-draw",
|
|
title: "예정노선 변경",
|
|
does: "예정노선 변경 켬끔(626-3 · 걷음 = 635-3)",
|
|
pages: B05,
|
|
},
|
|
{
|
|
key: "expected-original",
|
|
title: "예정노선 원본",
|
|
does: "예정노선(원본) 옅은 점선 켬끔(626-3 · 걷음 = 635-3)",
|
|
pages: B05,
|
|
},
|
|
],
|
|
[
|
|
{
|
|
key: "recommend",
|
|
title: "추천노선",
|
|
does: "노선 추천 저장본 선 하나만 보기 · 끔(626-1 · 예정노선 = 636-2)",
|
|
pages: B05,
|
|
},
|
|
],
|
|
[{ key: "terrain", title: "수치지형도/라이다", does: "지형 원천 보기 · 고르기", pages: BOTH }],
|
|
];
|
|
|
|
const ROWS = MAP_TOOLBAR.flat();
|
|
|
|
/** 표 호버제목 — 페이지 칸(지형 칩 막힘 글 등)이 씀. */
|
|
export const mapToolTitle = (key: MapToolKey): string =>
|
|
ROWS.find((row) => row.key === key)?.title ?? key;
|
|
|
|
const isAct = (key: MapToolKey): key is MapToolAct =>
|
|
key !== "hint-toggle" && key !== "snap-step" && key !== "recommend" && key !== "terrain";
|
|
|
|
/** 그 페이지 도구줄 묶음 — 넘긴 요소 · 기본 단추(단추 열쇠만) · 마우스 글 = 표 · 빈 묶음 뺌. */
|
|
export function mapToolGroups(
|
|
page: MapPage,
|
|
parts: Partial<Record<MapToolKey, HTMLElement>> = {},
|
|
): HTMLElement[][] {
|
|
return MAP_TOOLBAR.map((group) =>
|
|
group
|
|
.filter((row) => row.pages.includes(page))
|
|
.flatMap((row): HTMLElement[] => {
|
|
const made = parts[row.key] ?? (isAct(row.key) ? mapToolButton(row.key) : null);
|
|
if (!made) return [];
|
|
made.dataset.tip = row.title;
|
|
mapToolTip(made);
|
|
return [made];
|
|
}),
|
|
).filter((group) => group.length);
|
|
}
|