pickUp.js 实体点击事件

/*
 * @title:
 * @Author: yang shao tang
 * @Date: 2023-09-21 10:59:04
 * @LastEditors: yang shao tang
 * @LastEditTime: 2023-11-22 17:47:33
 * @FilePath: \FPYZT1.0\src\utils\pickUp.js
 * @Description:
 *
 */
import Vue from 'vue';
import store from '@/store';
// 定义一个全局变量handler,用于存储Cesium.ScreenSpaceEventHandler对象
let handler = '';
const vm = new Vue();
export default class pickUp {
  constructor() {
    // 初始化pickUp类的构造函数,在构造函数中创建ScreenSpaceEventHandler对象并将其赋值给handler
    handler = new Cesium.ScreenSpaceEventHandler(earth.czm.viewer.scene.canvas);
    // 调用MouseMoveEvent方法,绑定鼠标移动事件
    this.MouseMoveEvent();
    // 调用EntityPickEvent方法,绑定实体拾取事件
    this.EntityPickEvent();
  }
  /**
   * @description: 实体拾取
   * @return {*}
   */
  EntityPickEvent(callback = (pick) => {}) {
    // EntityPickEvent方法用于绑定实体拾取事件,默认提供一个回调函数callback用于处理拾取结果
    // 添加LEFT_CLICK事件监听器
    this.addEventListener('LEFT_CLICK', (e) => {
      let result = {
        // 拾取结果类型
        type: '',
        // 拾取结果数据
        data: '',
      };
      // 使用Cesium.Scene的pick方法进行拾取操作
      const pick = earth.czm.viewer.scene.pick(e.position);

      // 如果拾取结果为空,则直接返回
      if (!Cesium.defined(pick)) {
        return;
      } else {
        if (pick.id && pick.id._bjxtdOwner) {
          if (pick.id._bjxtdOwner.customProp === 'initSearch') {
            // 修改查询分析中坐标修改第一个点位弹窗
            vm.$bus.$emit('updateInfoStatus')
          }
        }
      }
      // 拾取结果为实体
      result.type = 'Entity';
      // 将拾取结果赋值给result.data
      result.data = pick;
      // 调用回调函数,传递拾取结果
      return callback(result);
    });
  }
  /**
   * @description: 鼠标移动
   * @return {*}
   */
  MouseMoveEvent() {
    // MouseMoveEvent方法用于绑定鼠标移动事件
    this.addEventListener('MOUSE_MOVE', (e) => {
      // 获取鼠标移动的位置
      const pick = earth.czm.viewer.scene.pick(e.endPosition);
      if (!pick || !pick.id || !pick.id.popupType) {
        // 如果拾取结果为空,则将鼠标样式设为默认值
        document.querySelector('body').style.cursor = 'default';
        return;
      }
      try {
        if (Cesium.defined(pick)) {
          if (pick.id && pick.id.popupType) {
            // 如果拾取结果的id存在popupType属性,则将鼠标样式设为小手样式
            document.querySelector('body').style.cursor = 'pointer';
          }
        } else {
          // 如果拾取结果为空,则将鼠标样式设为默认值
          document.querySelector('body').style.cursor = 'default';
        }
      } catch (error) {}
    });
  }

  // WheelMent(){
  //   this.addEventListener('WHEEL', (e) => {
  //     viewer.camera.changed.addEventListener(() => {
  //       cameraAlt = viewer.camera.positionCartographic.height.toFixed(2);
  //       console.log(cameraAlt);
  //     });
  //   });
  // }

  /**
   * 绑定事件
   * @param {String} type 事件类型
   * @param {Function} fun 事件处理函数
   */
  addEventListener(type, fun, modifier) {
    // 使用ScreenSpaceEventHandler的setInputAction方法绑定事件处理函数
    handler.setInputAction(fun, Cesium.ScreenSpaceEventType[type]);
  }

  /**
   * 删除事件
   * @param {String} type 事件类型
   */
  removeEventListener(type, modifier) {
    // 使用ScreenSpaceEventHandler的removeInputAction方法移除事件处理函数
    handler.removeInputAction(Cesium.ScreenSpaceEventType[type]);
  }
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值