From f6fd494699bcfee4457b415fcbbc02b753a3ff28 Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Sat, 19 Apr 2025 16:04:26 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 src/hooks/useTaskViewInfo/useTaskViewInfo.js                  |   81 ++++++++++++++++++++++++++++++++++++++++
 src/views/SignMachineNest/MachineRight/InspectionRaskList.vue |   11 +++++
 2 files changed, 91 insertions(+), 1 deletions(-)

diff --git a/src/hooks/useTaskViewInfo/useTaskViewInfo.js b/src/hooks/useTaskViewInfo/useTaskViewInfo.js
new file mode 100644
index 0000000..54d4e18
--- /dev/null
+++ b/src/hooks/useTaskViewInfo/useTaskViewInfo.js
@@ -0,0 +1,81 @@
+import * as Cesium from 'cesium'
+import aircraftGltf from '@/assets/gltf/aircraft.gltf'
+import CreateFrustum from '@/utils/cesium/frustum/CreateFrustum'
+
+export function useTaskViewInfo (viewer, wsInfo, removeEntitys) {
+  const newViewer = unref(viewer)
+
+  let viewInfoFrustum
+  // 设置视椎
+  const setCreateFrustum = (host) => {
+    if (!host) return
+    viewInfoFrustum?.clear()
+
+    const attitude_head = 180 + host.attitude_head
+    const gimbal_pitch = 90 - Number(host?.payloads[0]?.gimbal_pitch) || 0
+
+    viewInfoFrustum = new CreateFrustum(newViewer, {
+      position: {
+        longitude: host.longitude,
+        latitude: host.latitude,
+        altitude: host.height,
+      },
+      width: 30,
+      height: 30,
+      fov: 20.0,
+      near: 3.0,
+      far: 250.0,
+      roll: gimbal_pitch,
+      pitch: 0,
+      heading: attitude_head,
+    })
+  }
+
+  function setAircraftGltf () {
+    const host = deviceOsdInfo.value?.data?.host
+    const aircraftEntity = newViewer.entities.getById('aircraftGltf')
+    const position = Cesium.Cartesian3.fromDegrees(host.longitude, host.latitude, host.height)
+    if (aircraftEntity) {
+      aircraftEntity.position = new Cesium.ConstantPositionProperty(position)
+      return
+    }
+
+    newViewer.entities.add({
+      id: 'aircraftGltf',
+      position,
+      model: {
+        uri: aircraftGltf, // 或 .glb
+        scale: 1.0, // 缩放比例
+        minimumPixelSize: 64, // 最小像素尺寸(保证模型远处可见)
+        maximumScale: 128, // 最大缩放(可选)
+      },
+    })
+  }
+
+  // 视椎加载处理
+  const deviceOsdInfo = computed(() => wsInfo.value?.device_osd)
+
+  watch(deviceOsdInfo, () => {
+    const host = deviceOsdInfo.value?.data?.host
+
+    if ([14, 0].includes(host.mode_code)) {
+      mapEntityRemove()
+      return
+    }
+
+    setCreateFrustum(host)
+    setAircraftGltf()
+  })
+
+  const mapEntityRemove = () => {
+    viewInfoFrustum?.clear()
+
+    newViewer.entities.removeById('aircraftGltf')
+
+    removeEntitys && removeEntitys()
+  }
+
+  onUnmounted(() => {
+    mapEntityRemove()
+  })
+}
\ No newline at end of file
diff --git a/src/views/SignMachineNest/MachineRight/InspectionRaskList.vue b/src/views/SignMachineNest/MachineRight/InspectionRaskList.vue
index 34d4d33..e3f3323 100644
--- a/src/views/SignMachineNest/MachineRight/InspectionRaskList.vue
+++ b/src/views/SignMachineNest/MachineRight/InspectionRaskList.vue
@@ -78,7 +78,12 @@
 import { useStore } from 'vuex'
 import { useTaskWayline } from '@/hooks/useTaskWayline/useTaskWayline'
 import { useTaskDetails } from '@/hooks/useTaskDetails/useTaskDetails'
+import { useTaskViewInfo } from '@/hooks/useTaskViewInfo/useTaskViewInfo'
+import { useDroneWS } from '@/hooks/useDroneWS'
+let viewer = null
+
 let { taskDetails, workspace_id, getTaskDetails } = useTaskDetails()
+let { wsInfo, removeWS } = useDroneWS(workspace_id) //ws信息,是一个ref对象
 
 const store = useStore()
 // 设备任务详情
@@ -207,6 +212,8 @@
 }
 
 onMounted(async () => {
+	viewer = window.$viewer
+
 	await getJobList()
 
 	// tableList.value = [
@@ -337,7 +344,9 @@
 	}
 })
 
-useTaskWayline(window.$viewer, taskDetails)
+const { removeEntitys } = useTaskWayline(viewer || window.$viewer, taskDetails)
+
+useTaskViewInfo(viewer || window.$viewer, wsInfo, removeEntitys)
 </script>
 
 <style lang="scss" scoped>

--
Gitblit v1.9.3