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() }) }