init
This commit is contained in:
		
							
								
								
									
										193
									
								
								src/Event/index.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										193
									
								
								src/Event/index.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,193 @@ | ||||
| /** | ||||
|  * @name: index | ||||
|  * @author: Administrator | ||||
|  * @date: 2022-06-14 14:44 | ||||
|  * @description:index | ||||
|  * @update: 2022-06-14 14:44 | ||||
|  */ | ||||
|  | ||||
| export default class MouseEvent { | ||||
|   constructor(sdk) { | ||||
|     this.sdk = sdk | ||||
|     this.viewer = sdk.viewer | ||||
|     this.handler = new Cesium.ScreenSpaceEventHandler( | ||||
|       this.viewer.canvas | ||||
|     ) | ||||
|   } | ||||
|  | ||||
|   /*事件*/ | ||||
|   mouse_left(cb) { | ||||
|     // //左键点击事件 | ||||
|     this.handler && this.handler.setInputAction((movement) => { | ||||
|       let cartesian = this.getcartesian(movement) | ||||
|       // cartesian = this.earth.czm.viewer.scene.pickPosition(movement.position) | ||||
|       // if (!cartesian) { | ||||
|       //   cartesian = this.viewer.scene.camera.pickEllipsoid( | ||||
|       //     movement.position, | ||||
|       //     this.viewer.scene.globe.ellipsoid | ||||
|       //   ) | ||||
|       // } | ||||
|       // if (cartesian) { | ||||
|       //   cb(movement, cartesian) | ||||
|       // } | ||||
|       if (cartesian) { | ||||
|         cb(movement, cartesian) | ||||
|       } | ||||
|     }, Cesium.ScreenSpaceEventType.LEFT_CLICK) | ||||
|   } | ||||
|  | ||||
|   mouse_left_down(cb) { | ||||
|     // //左键按下事件 | ||||
|     this.handler && this.handler.setInputAction((movement) => { | ||||
|       let cartesian = this.getcartesian(movement) | ||||
|       if (cartesian) { | ||||
|         cb(movement, cartesian) | ||||
|       } | ||||
|     }, Cesium.ScreenSpaceEventType.LEFT_DOWN) | ||||
|   } | ||||
|   mouse_left_up(cb) { | ||||
|     // //左键抬起事件 | ||||
|     this.handler && this.handler.setInputAction((movement) => { | ||||
|       let cartesian = this.getcartesian(movement) | ||||
|       if (cartesian) { | ||||
|         cb(movement, cartesian) | ||||
|       } | ||||
|     }, Cesium.ScreenSpaceEventType.LEFT_UP) | ||||
|   } | ||||
|  | ||||
|   mouse_move(cb, allowNull = false) { | ||||
|     this.handler && this.handler.setInputAction((movement) => { | ||||
|       let cartesian = this.getcartesian(movement) | ||||
|  | ||||
|       if (cartesian || allowNull) { | ||||
|         cb(movement, cartesian) | ||||
|       } | ||||
|     }, Cesium.ScreenSpaceEventType.MOUSE_MOVE) | ||||
|   } | ||||
|  | ||||
|   mouse_right(cb, allowNull = false) { | ||||
|     this.handler && this.handler.setInputAction((movement) => { | ||||
|       let cartesian = this.getcartesian(movement) | ||||
|       if (cartesian || allowNull) { | ||||
|         cb(movement, cartesian) | ||||
|       } | ||||
|     }, Cesium.ScreenSpaceEventType.RIGHT_CLICK) | ||||
|   } | ||||
|  | ||||
|   mouse_right_down(cb, allowNull = false) { | ||||
|     this.handler && this.handler.setInputAction((movement) => { | ||||
|       let cartesian = this.getcartesian(movement) | ||||
|       if (cartesian || allowNull) { | ||||
|         cb(movement, cartesian) | ||||
|       } | ||||
|     }, Cesium.ScreenSpaceEventType.RIGHT_DOWN) | ||||
|   } | ||||
|  | ||||
|   mouse_right_up(cb, allowNull = false) { | ||||
|     this.handler && this.handler.setInputAction((movement) => { | ||||
|       let cartesian = this.getcartesian(movement) | ||||
|       if (cartesian || allowNull) { | ||||
|         cb(movement, cartesian) | ||||
|       } | ||||
|     }, Cesium.ScreenSpaceEventType.RIGHT_UP) | ||||
|   } | ||||
|  | ||||
|   mouse_wheel(cb) { | ||||
|     this.handler && this.handler.setInputAction(() => { | ||||
|       cb() | ||||
|     }, Cesium.ScreenSpaceEventType.WHEEL) | ||||
|   } | ||||
|  | ||||
|   getcartesian(movement) { | ||||
|     // if (movement.endPosition) { | ||||
|     //   movement.endPosition.y -= 2 | ||||
|     // } | ||||
|     let position = movement.position || movement.endPosition | ||||
|     if(movement.position1 && movement.position2) { | ||||
|       position = { | ||||
|         x: (movement.position1.x + movement.position2.x) / 2, | ||||
|         y: (movement.position1.y + movement.position2.y) / 2, | ||||
|       } | ||||
|     } | ||||
|     let cartesian = this.viewer.scene.pickPosition(position) | ||||
|     if (!cartesian) { | ||||
|       const ray = this.viewer.camera.getPickRay(position); //相交的射线 | ||||
|       let pickedObjects = this.viewer.scene.drillPickFromRay(ray, 10); | ||||
|       let result = {} | ||||
|       for (let i = 0; i < pickedObjects.length; i++) { | ||||
|         if (pickedObjects[i].position) { | ||||
|           result = pickedObjects[i] | ||||
|           break | ||||
|         } | ||||
|       } | ||||
|       cartesian = result.position | ||||
|       if(!cartesian) { | ||||
|         cartesian = this.viewer.scene.globe.pick(ray, this.viewer.scene); | ||||
|       } | ||||
|     } | ||||
|     return cartesian | ||||
|     // return this.earth.czm.viewer.scene.pickPosition(position) | ||||
|   } | ||||
|  | ||||
|   //鼠标右键+键盘ctrl | ||||
|   mouse_right_keyboard_ctrl(cb) { | ||||
|     // //左键点击事件 | ||||
|     this.handler && this.handler.setInputAction( | ||||
|       (movement) => { | ||||
|         let cartesian = this.getcartesian(movement) | ||||
|         if (cartesian) { | ||||
|           cb(movement, cartesian) | ||||
|         } | ||||
|       }, | ||||
|       Cesium.ScreenSpaceEventType.RIGHT_CLICK, | ||||
|       Cesium.KeyboardEventModifier.CTRL | ||||
|     ) | ||||
|   } | ||||
|  | ||||
|   // 手势-双指触摸开始 | ||||
|   gesture_pinck_start(cb) { | ||||
|     this.handler && this.handler.setInputAction((movement) => { | ||||
|       let cartesian = this.getcartesian(movement) | ||||
|       if (cartesian) { | ||||
|         cb(movement, cartesian) | ||||
|       } | ||||
|     }, Cesium.ScreenSpaceEventType.PINCH_START) | ||||
|   } | ||||
|  | ||||
|   //手势-双指触摸开始+键盘ctrl | ||||
|   gesture_pinck_start_keyboard_ctrl(cb) { | ||||
|     this.handler && this.handler.setInputAction( | ||||
|       (movement) => { | ||||
|         let cartesian = this.getcartesian(movement) | ||||
|         if (cartesian) { | ||||
|           cb(movement, cartesian) | ||||
|         } | ||||
|       }, | ||||
|       Cesium.ScreenSpaceEventType.PINCH_START, | ||||
|       Cesium.KeyboardEventModifier.CTRL | ||||
|     ) | ||||
|   } | ||||
|  | ||||
|   // 手势-双指触摸结束 | ||||
|   gesture_pinck_end(cb) { | ||||
|     this.handler && this.handler.setInputAction((movement) => { | ||||
|       cb() | ||||
|     }, Cesium.ScreenSpaceEventType.PINCH_END) | ||||
|   } | ||||
|  | ||||
|   // 手势-双指触摸修改 | ||||
|   gesture_pinck_move(cb) { | ||||
|     this.handler && this.handler.setInputAction((movement) => { | ||||
|       // let cartesian = this.getcartesian(movement) | ||||
|       // if (cartesian) { | ||||
|       //   cb(movement, cartesian) | ||||
|       // } | ||||
|     }, Cesium.ScreenSpaceEventType.PINCH_MOVE) | ||||
|   } | ||||
|  | ||||
|   destroy() { | ||||
|     if (this.handler) | ||||
|       this.handler.destroy() //关闭事件句柄 | ||||
|     this.handler = null | ||||
|   } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user