feat(지도): 634-2 · 634-3 아이콘 표 두 장 · 묶음 메뉴 · 한 행 배선 · 호버 = 표(요구 546)
- 겹 표(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>
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import { createIconButton } from "@ui/ui_template_elements";
|
||||
import { createMapTools, mapToolButton } from "@ui/ui_template_map_tools";
|
||||
import { createPickMenu, type PickMenu } from "@ui/ui_template_context_menu";
|
||||
import { createMapToolRow, createMapTools, mapToolButton } from "@ui/ui_template_map_tools";
|
||||
import { mapToolGroups } from "../A00_Common/map/map_toolbar";
|
||||
import { createSidePanels } from "@ui/ui_template_side_panels";
|
||||
import { bindFootprintToggle } from "./B05_Profile_UI_RouteEdit_Footprint";
|
||||
@@ -20,9 +21,10 @@ import { bottomRowNarrow, infoLiftPx } from "./logic/B05_Profile_RouteEdit_InfoL
|
||||
* **배치**(352-1) — 지도가 칸 전체 · 머리 줄 · 테두리 없음. 도구는 3D 와 같은 떠 있는 유리 단추
|
||||
* (지도 왼쪽 위 · ☰ 비킴), [?] 조작 설명은 도구줄 아래 2열, 상태·범례는 왼쪽 아래, 잰 값은 오른쪽
|
||||
* 아래. 횡단 두 판은 지도 오른쪽을 덮는 판(아래 종단 판이 그 위).
|
||||
* 한 행(634-3 · `createMapToolRow`) = 왼쪽 공용 겹 줄(`_Layers` · 끝 = 그래픽 카드 단추) · 오른쪽 도구줄 — 영역마다 가로 밀기.
|
||||
* 도구줄 차례 = 공용 표(624-3 · `A00_Common/map/map_toolbar` 「b05」) — [?] | ↶ ↷ | 3D ⟲ ⟳ | 1m 등고선 · 측점 · 기울기 ·
|
||||
* 절/성토선 · 거리 재기 | 측점 스냅 · 간격 | 예정노선 변경 · 원본(626-3) | 추천 노선 보기(626-1) | 설계 지형 칩(626-1). 아래 줄 = 공용 겹 줄(`_Layers` ·
|
||||
* 끝 = 그래픽 카드 단추) · 범례 = 상태 글판 위. 단추는 공용 지도 도구줄(568-2 · `ui_template_map_tools`) 아이콘 — 긴 설명은 마우스 글.
|
||||
* 절/성토선 · 거리 재기 | 측점 스냅 · 간격(고르기 메뉴) | 예정노선 변경 · 원본(626-3) | 추천 노선 보기(626-1) | 설계 지형 칩(626-1).
|
||||
* 범례 = 상태 글판 위. 마우스 글 = 공용 표 호버제목(634-2 · 페이지 덮어쓰기 없음).
|
||||
*
|
||||
* 자리(345-3) — 모달이 아니라 종단 보기 가운데 위 본문(옛 3D 자리)에 붙는다. 덮개 · 전체 화면 ·
|
||||
* 닫기 단추는 걷었다 · [취소] · [확인] · [노선 반영] · [저장 전으로]는 없앰(346-3 · 352-2 — 노선은 페이지
|
||||
@@ -64,6 +66,8 @@ export interface RouteEditChrome {
|
||||
minorContourButton: HTMLButtonElement;
|
||||
/** [측점 스냅] 켬끔(요구 224-2) — `aria-pressed` · `is-active` 는 본체가 맞춤. */
|
||||
stationSnapButton: HTMLButtonElement;
|
||||
/** 스냅 간격 고르기 메뉴(하나 · 634-3) — 누름 배선 = `onPick`(`_SnapStep`). */
|
||||
snapStep: PickMenu & { onPick: (fn: (value: string | null) => void) => void };
|
||||
/** 예정노선 그리기 켬끔(626-3 · 배선 = `B05_Profile_UI_ExpectedDraw`). */
|
||||
expectedDrawButton: HTMLButtonElement;
|
||||
/** 예정노선(원본 · 파일입력) 옅은 점선 켬끔(626-3 · 535-1). */
|
||||
@@ -129,17 +133,19 @@ export function createRouteEditChrome(
|
||||
<div class="b05-routeedit__busy" hidden><span></span></div>
|
||||
<aside class="b05-routeedit__side-wrap"></aside>`;
|
||||
parent.append(overlay);
|
||||
// 스냅 간격 고르기 — 단추 아님(도구줄에 요소로 끼움).
|
||||
const extras = document.createElement("div");
|
||||
extras.innerHTML = `
|
||||
<label class="b05-routeedit__terrain b05-routeedit__snap-step"
|
||||
title="측점 스냅 간격 — 곡선 가운데(MC)를 이 간격 배수에 맞춥니다(측점 No. = 측점 간격)">간격
|
||||
<select class="ui-select ui-select--sm" data-size="32" data-act="snap-step">
|
||||
<option value="10">10 m</option>
|
||||
<option value="station">측점 No.</option>
|
||||
</select>
|
||||
</label>`;
|
||||
const snapStep = extras.firstElementChild as HTMLElement;
|
||||
// 스냅 간격 = 고르기 메뉴 하나(634-3 · 요구 546) — 누름 배선은 `_SnapStep`.
|
||||
let pickSnapStep: (value: string | null) => void = () => {};
|
||||
const snapStep = createPickMenu({
|
||||
icon: "spacing",
|
||||
title: "스냅 간격",
|
||||
items: [
|
||||
{ value: "10", label: "10 m" },
|
||||
{ value: "station", label: "측점 No." },
|
||||
],
|
||||
onPick: (value) => pickSnapStep(value),
|
||||
});
|
||||
snapStep.root.dataset.act = "snap-step";
|
||||
snapStep.root.classList.add("b05-routeedit__snap-step");
|
||||
const terrain = createRouteTerrain(projectId);
|
||||
let gl: RouteEditGl | null = null;
|
||||
let redrawScene: (() => void) | null = null;
|
||||
@@ -152,37 +158,19 @@ export function createRouteEditChrome(
|
||||
const mapTools = createMapTools({
|
||||
label: "평면 도구",
|
||||
hint: { lines: HINT_LINES, open: hintOpen, onToggle: (open) => (hintOpen = open) },
|
||||
// 마우스 글 = 공용 표 호버제목(634-2) · 막힘 까닭만 페이지(`mapToolTip`)
|
||||
groups: mapToolGroups("b05", {
|
||||
undo: mapToolButton("undo", { title: "되돌리기 (Ctrl+Z)", disabled: true }),
|
||||
redo: mapToolButton("redo", { title: "다시하기 (Ctrl+Y)", disabled: true }),
|
||||
undo: mapToolButton("undo", { disabled: true }),
|
||||
redo: mapToolButton("redo", { disabled: true }),
|
||||
...(tools[0] ? { view3d: tools[0] } : {}), // 부른 쪽 단추([3D])
|
||||
"contour-minor": mapToolButton("contour-minor", {
|
||||
title: "1m 등고선 — 1m 간격 등고선을 얇고 옅게 겹칩니다 (확대하면 보임)",
|
||||
disabled: true,
|
||||
}),
|
||||
stations: mapToolButton("stations", {
|
||||
title: "측점 — 측점 눈금 · 번호를 평면에 보이기 · 숨기기 (시점 · 종점 이름표는 늘 보임)",
|
||||
}),
|
||||
slopes: mapToolButton("slopes", {
|
||||
title: "기울기 — 측점 사이 기울기(%)를 평면에 보이기 · 숨기기 (확대해야 보임)",
|
||||
}),
|
||||
footprint: mapToolButton("footprint", {
|
||||
title: "절/성토선 — 도로 끝 · 비탈 끝(깎기 붉음 · 쌓기 청록)을 평면에 겹칩니다",
|
||||
}),
|
||||
measure: mapToolButton("measure", {
|
||||
title: "거리 재기 — 노선 위 두 점을 눌러 거리·기울기를 잽니다 (Shift+클릭도 같음)",
|
||||
}),
|
||||
"station-snap": mapToolButton("station-snap", {
|
||||
title:
|
||||
"측점 스냅 — 켜면 고친 곡선의 가운데(MC)를 고른 간격 배수에 맞춥니다 — 일반측점(20 m)은 그대로 · MC 가 일반측점 위가 아니면 「No.N+10 (MC)」 특별측점을 더함 · 손대지 않은 곡선은 그 자리 유지 · 고정 교각점은 그대로 · 못 맞춘 곡선은 상태줄 「측점 밖 곡선」 · [저장] 때 저장",
|
||||
}),
|
||||
"snap-step": snapStep,
|
||||
"contour-minor": mapToolButton("contour-minor", { disabled: true }),
|
||||
"snap-step": snapStep.root,
|
||||
recommend: preview.root,
|
||||
terrain: terrain.root,
|
||||
}),
|
||||
});
|
||||
mapTools.hint!.classList.add("b05-routeedit__hint"); // 가이드 촬영 · 엿보기 숨김이 잡음
|
||||
// 공용 지도 겹(624-3) — 도구줄 아래 줄 · 범례는 상태 글판 맨 위
|
||||
// 공용 지도 겹(624-3) — 한 행 왼쪽(634-3 · 도구줄은 오른쪽) · 범례는 상태 글판 맨 위
|
||||
const wrap = overlay.querySelector<HTMLElement>(".b05-routeedit__canvas-wrap")!;
|
||||
const layers = createRouteEditLayers({
|
||||
projectId,
|
||||
@@ -190,9 +178,8 @@ export function createRouteEditChrome(
|
||||
onGl: () => gl?.toggle(),
|
||||
redraw,
|
||||
});
|
||||
const toolRows = document.createElement("div");
|
||||
toolRows.className = "b05-routeedit__tools";
|
||||
toolRows.append(mapTools.root, layers.bar);
|
||||
const toolRows = createMapToolRow(layers.bar, mapTools.root);
|
||||
toolRows.classList.add("b05-routeedit__tools");
|
||||
overlay.querySelector('[data-slot="map-tools"]')!.replaceWith(toolRows);
|
||||
|
||||
// 횡단 미리보기 = 패널 양식(382-1 · 손잡이 · 머리 · 폭 끌기 · 열림 · 폭 기억) · 자리는 지도 위 덮개 그대로 ·
|
||||
@@ -292,6 +279,7 @@ export function createRouteEditChrome(
|
||||
measureButton,
|
||||
minorContourButton,
|
||||
stationSnapButton,
|
||||
snapStep: Object.assign(snapStep, { onPick: (fn: typeof pickSnapStep) => (pickSnapStep = fn) }),
|
||||
expectedDrawButton: mapTools.button("expected-draw")!,
|
||||
expectedOriginalButton: mapTools.button("expected-original")!,
|
||||
terrain,
|
||||
|
||||
Reference in New Issue
Block a user