diff --git a/src/App.vue b/src/App.vue index bf26738..75d28a8 100644 --- a/src/App.vue +++ b/src/App.vue @@ -255,9 +255,11 @@ async function getTerrainPosition(cartographic: Cartographic) { - +
+ +
@@ -292,7 +294,25 @@ async function getTerrainPosition(cartographic: Cartographic) {
-
航点列表 ({{ store.pointList.length }})
+
+ 航点列表 ({{ store.pointList.length }}) +
+ + +
+
({ @@ -21,7 +22,8 @@ export const useStore = defineStore('main', { lensMode: 'wide' as LensMode, pointList: [] as WayPointInfo[], gimbalPitch: 0, // 云台俯仰角(度) - yawAngle: 0 // 偏航角(度) + yawAngle: 0, // 偏航角(度) + waylineMode: 'edit' as WaylineMode }), actions: { updateZoomFactor(zoomFactor: number) { @@ -36,6 +38,9 @@ export const useStore = defineStore('main', { updateGimbalData(pitch: number, yaw: number) { this.gimbalPitch = pitch; this.yawAngle = yaw; + }, + setWaylineMode(mode: WaylineMode) { + this.waylineMode = mode; } } }) diff --git a/src/wayline.ts b/src/wayline.ts index c2247e1..691eba0 100644 --- a/src/wayline.ts +++ b/src/wayline.ts @@ -134,6 +134,7 @@ export class Wayline { setupDragEvent(): void { const handler = new ScreenSpaceEventHandler(viewer.scene.canvas) + const store = useStore() let isDragging = false let isLifting = false @@ -142,6 +143,7 @@ export class Wayline { const scene = viewer.scene handler.setInputAction((click: ScreenSpaceEventHandler.PositionedEvent) => { + if (store.waylineMode === 'preview') return const object = scene.pick(click.position) if (object && object.id) { // 检查是否点击了高度调整按钮 @@ -160,6 +162,7 @@ export class Wayline { }, ScreenSpaceEventType.LEFT_DOWN) handler.setInputAction((click: ScreenSpaceEventHandler.PositionedEvent) => { + if (store.waylineMode === 'preview') return const object = scene.pick(click.position) if (object && object.id && (object.id as any).wayPoint && (object.id as any).wayPoint.selected) { isLifting = true @@ -186,6 +189,10 @@ export class Wayline { }, ScreenSpaceEventType.LEFT_UP, KeyboardEventModifier.ALT) handler.setInputAction((movement: ScreenSpaceEventHandler.MotionEvent) => { + if (store.waylineMode === 'preview') { + scene.canvas.style.cursor = 'default' + return + } const object = scene.pick(movement.endPosition) if (object && object.id) { if ((object.id as any).heightAdjustButton) { @@ -231,6 +238,7 @@ export class Wayline { }, ScreenSpaceEventType.MOUSE_MOVE) handler.setInputAction((movement: ScreenSpaceEventHandler.MotionEvent) => { + if (store.waylineMode === 'preview') return if (isLifting && draggingWayPoint) { const lngLat = Cartographic.fromCartesian(draggingWayPoint.position) @@ -247,6 +255,7 @@ export class Wayline { setupMovementEvent(): void { const { minimapViewer, uavEntity } = this + const store = useStore() const camera = minimapViewer.camera const keyState: KeyState = { q: false, @@ -264,6 +273,7 @@ export class Wayline { window.addEventListener('keydown', (event: KeyboardEvent) => { if (event.code === 'Space') { + if (store.waylineMode === 'preview') return const position = minimapViewer.camera.position.clone() this.createWayPoint(position) } diff --git a/src/waypoint.ts b/src/waypoint.ts index 77fdb68..363d49d 100644 --- a/src/waypoint.ts +++ b/src/waypoint.ts @@ -382,8 +382,10 @@ function generateHeightAdjustButtonSvgDataUrl(): string { ` + const encoded = encodeURIComponent(svg) .replace(/'/g, '%27') .replace(/"/g, '%22') + return `data:image/svg+xml,${encoded}` }