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