| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- /*
- * @Author: Caven
- * @Date: 2019-12-31 16:58:31
- * @Last Modified by: Caven
- * @Last Modified time: 2020-02-04 13:27:36
- */
-
- import Cesium from '@/namespace'
- import Event from './Event'
-
- class MouseEvent extends Event {
- constructor(viewer) {
- super()
- this._viewer = viewer
- this._handler = new Cesium.ScreenSpaceEventHandler(this._viewer.canvas)
- this._registerEvent()
- this.on(Cesium.ScreenSpaceEventType.LEFT_CLICK, this._clickCallback, this)
- this.on(
- Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK,
- this._dbclickCallback,
- this
- )
- this.on(
- Cesium.ScreenSpaceEventType.RIGHT_CLICK,
- this._rightClickCallback,
- this
- )
- this.on(
- Cesium.ScreenSpaceEventType.MOUSE_MOVE,
- this._mouseMoveCallback,
- this
- )
- }
-
- /**
- * Register Cesium mouse events
- */
- _registerEvent() {
- for (let key in Cesium.ScreenSpaceEventType) {
- let type = Cesium.ScreenSpaceEventType[key]
- this._eventCache[type] = new Cesium.Event()
- this._handler.setInputAction(movement => {
- this._eventCache[type].raiseEvent(movement)
- }, type)
- }
- }
-
- /**
- *
- * @param {*} target
- * gets the target information for the mouse event
- */
- _getTargetInfo(target) {
- let overlay = undefined
- let layer = undefined
- let feature = undefined
- if (target.id && target.id instanceof Cesium.Entity) {
- layer = target.id.layer
- if (layer && layer.getOverlay) {
- overlay = layer.getOverlay(target.id.id)
- }
- //todo
- } else if (target.id instanceof Cesium.Cesium3DTileFeature) {
- // todo
- }
- return { layer: layer, overlay: overlay, feature: feature }
- }
-
- /**
- * @param {*} type
- * @param {*} target
- */
- _raiseEvent(type, target, position = null) {
- let stopPropagation = false
- if (target) {
- let targetInfo = this._getTargetInfo(target)
- let overlay = targetInfo.overlay
- if (overlay && overlay.overlayEvent) {
- let event = overlay.overlayEvent.getEvent(type)
- if (event && event.numberOfListeners > 0) {
- event.raiseEvent({
- layer: targetInfo.layer,
- overlay: overlay,
- feature: targetInfo.feature,
- position: position
- })
- stopPropagation = true
- }
- }
- }
- if (!stopPropagation) {
- let event = this._viewer.viewerEvent.getEvent(type)
- if (event && event.numberOfListeners > 0) {
- event.raiseEvent({ position: position, overlay: undefined })
- }
- }
- }
-
- /**
- *
- * @param {*} movement
- * default click event callback
- */
- _clickCallback(movement) {
- if (!movement || !movement.position) {
- return
- }
- let target = this._viewer.scene.pick(movement.position)
- let cartesian = this._viewer.scene.pickPosition(movement.position)
- this._raiseEvent(Cesium.ScreenSpaceEventType.LEFT_CLICK, target, cartesian)
- }
-
- /**
- *
- * @param {*} movement
- * default dbclick event callback
- */
- _dbclickCallback(movement) {
- if (!movement || !movement.position) {
- return
- }
- let target = this._viewer.scene.pick(movement.position)
- let cartesian = this._viewer.scene.pickPosition(movement.position)
- this._raiseEvent(
- Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK,
- target,
- cartesian
- )
- }
-
- /**
- * @param {*} movement
- * default rightclick event callback
- */
- _rightClickCallback(movement) {
- if (!movement || !movement.position) {
- return
- }
- let target = this._viewer.scene.pick(movement.position)
- let cartesian = this._viewer.scene.pickPosition(movement.position)
- this._raiseEvent(Cesium.ScreenSpaceEventType.RIGHT_CLICK, target, cartesian)
- }
-
- /**
- *
- * @param {*} movement
- * default mousemove event callback
- */
- _mouseMoveCallback(movement) {
- if (!movement || !movement.endPosition) {
- return
- }
- let target = this._viewer.scene.pick(movement.endPosition)
- this._viewer.canvas.style.cursor = target ? 'pointer' : 'default'
- let cartesian = this._viewer.scene.pickPosition(movement.endPosition)
- this._raiseEvent(Cesium.ScreenSpaceEventType.MOUSE_MOVE, target, cartesian)
- }
- }
-
- export default MouseEvent
|