({
@@ -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}`
}