diff --git a/D03_PlanAnalysis/D03_PlanAnalysis_UI_Map.ts b/D03_PlanAnalysis/D03_PlanAnalysis_UI_Map.ts index 088abdd8b..3ff5cda5c 100644 --- a/D03_PlanAnalysis/D03_PlanAnalysis_UI_Map.ts +++ b/D03_PlanAnalysis/D03_PlanAnalysis_UI_Map.ts @@ -124,6 +124,8 @@ export interface PlanMapEvents { onMeasure: () => void; /** 도구줄 끝 지형 칸(624-4 · 칩 + LAS 올리기 = `D03_PlanAnalysis_UI_LidarUpload`). */ terrain: HTMLElement; + /** 도구줄 「추천노선」 = 가이드 선 메뉴(636-2 · `D03_PlanAnalysis_UI_Guide`). */ + recommend?: HTMLElement; } export interface PlanTools { @@ -248,6 +250,7 @@ export function createPlanMap(events: PlanMapEvents): PlanMap { slopes: markButton("slopes"), measure: measureButton, terrain: events.terrain, + recommend: events.recommend, }), }); const toolbar = tools.root; diff --git a/D03_PlanAnalysis/D03_PlanAnalysis_UI_Page.ts b/D03_PlanAnalysis/D03_PlanAnalysis_UI_Page.ts index e2f9d9e6a..a93cc7782 100644 --- a/D03_PlanAnalysis/D03_PlanAnalysis_UI_Page.ts +++ b/D03_PlanAnalysis/D03_PlanAnalysis_UI_Page.ts @@ -50,6 +50,7 @@ import { type TerrainStart, } from "./D03_PlanAnalysis_Api"; import { openPlan3d } from "./D03_PlanAnalysis_UI_3D"; +import { createPlanGuide } from "./D03_PlanAnalysis_UI_Guide"; import { bindPlanInput, createPlanKit } from "./D03_PlanAnalysis_UI_Kit"; import { createPlanLayers } from "./D03_PlanAnalysis_UI_Layers"; import { createPlanTerrain } from "./D03_PlanAnalysis_UI_LidarUpload"; @@ -213,8 +214,15 @@ export async function renderD03PlanAnalysis(root: HTMLElement): Promise { work, onChange: () => (void backdrop.reterrain(), refresh()), }); + // 가이드 추천선(636-2) — 지점 차례 · 지형 칩 원천 · 보기만 + const guide = createPlanGuide({ + points: () => points, + grid: () => terrain.surface(surface)?.grid ?? null, + redraw: () => map.redraw(), + }); const map = createPlanMap({ terrain: terrain.root, + recommend: guide.root, onUndo: undo, onRedo: redo, on3d: open3d, @@ -317,7 +325,10 @@ export async function renderD03PlanAnalysis(root: HTMLElement): Promise { /** 겹 차례 = 키트(바탕 겹 아래 · 재기 · 보기 가운데 = 고르기 위 · 핀 그림 · 우클릭 메뉴 맨 위). */ const layerList = (): PlanMapLayer[] => - kit.layers(backdrop.layers, [...(measuring ? [measure.layer] : []), viewWatch]); + kit.layers( + [...backdrop.layers, guide.layer], + [...(measuring ? [measure.layer] : []), viewWatch], + ); /** 점들이 받은 범위 안인가. */ const inside = (list: Vertex[]): boolean => @@ -574,6 +585,7 @@ export async function renderD03PlanAnalysis(root: HTMLElement): Promise { heightAt: z, layers: backdrop.state, terrain: terrain.state, + guide: guide.state, }; // 키 = 등록부(588-3 · 한글 자판도 자판 자리로) · 되돌리기 · 다시하기 · 재기 끔 = 키트 `onKey` 먼저 const onKey = (event: KeyboardEvent): void => {