代码迁移
This commit is contained in:
196
src/Event/index.js
Normal file
196
src/Event/index.js
Normal file
@ -0,0 +1,196 @@
|
||||
/**
|
||||
* @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);
|
||||
}
|
||||
}
|
||||
// console.log(cartesian)
|
||||
// const updatedPositions = await Cesium.sampleTerrainMostDetailed(this.sdk.viewer.terrainProvider, Cesium.Cartographic.fromCartesian(cartesian, this.viewer.scene.globe.ellipsoid));
|
||||
// console.log(updatedPositions)
|
||||
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