You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.1 KiB
83 lines
2.1 KiB
import type Viewport from '@/core/engine/Viewport'
|
|
import * as THREE from 'three'
|
|
|
|
let pmFn, otFn, lvFn
|
|
|
|
/**
|
|
* 鼠标移动时,将鼠标位置的坐标转换为设计图上的坐标,并设置到 designer.mousePos 属性中
|
|
*/
|
|
export default class MouseMoveInspect {
|
|
viewport: Viewport
|
|
canvas: HTMLCanvasElement
|
|
|
|
constructor() {
|
|
}
|
|
|
|
init(viewport: Viewport) {
|
|
this.viewport = viewport
|
|
this.canvas = this.viewport.renderer.domElement as HTMLCanvasElement
|
|
|
|
pmFn = this.mouseMove.bind(this)
|
|
otFn = this.mouseLv.bind(this)
|
|
lvFn = this.mouseLv.bind(this)
|
|
this.canvas.addEventListener('pointermove', pmFn)
|
|
this.canvas.addEventListener('pointerout', otFn)
|
|
this.canvas.addEventListener('mouseleave', lvFn)
|
|
}
|
|
|
|
dispose() {
|
|
this.canvas.removeEventListener('pointermove', pmFn)
|
|
pmFn = undefined
|
|
this.canvas.removeEventListener('pointerout', otFn)
|
|
otFn = undefined
|
|
this.canvas.removeEventListener('mouseleave', lvFn)
|
|
lvFn = undefined
|
|
}
|
|
|
|
mouseLv(event: MouseEvent) {
|
|
this.viewport.state.mouse.x = NaN
|
|
this.viewport.state.mouse.z = NaN
|
|
window['CurrentMouseInfo'] = {
|
|
x: NaN,
|
|
z: NaN,
|
|
isShiftKey: false,
|
|
isCtrlKey: false,
|
|
isAltKey: false,
|
|
isMetaKey: false
|
|
}
|
|
}
|
|
|
|
mouseMove = _.throttle(function(this: MouseMoveInspect, event: MouseEvent) {
|
|
|
|
const pointv = new THREE.Vector2()
|
|
pointv.x = event.offsetX / this.viewport.renderer.domElement.offsetWidth
|
|
pointv.y = event.offsetY / this.viewport.renderer.domElement.offsetHeight
|
|
|
|
const mouse = new THREE.Vector2()
|
|
mouse.set((pointv.x * 2) - 1, -(pointv.y * 2) + 1)
|
|
|
|
// 当前鼠标所在的点
|
|
const point = this.viewport.getClosestIntersection(event)
|
|
if (!point) {
|
|
return
|
|
}
|
|
|
|
this.viewport.state.mouse.x = point.x
|
|
this.viewport.state.mouse.z = point.z
|
|
|
|
window['CurrentMouseInfo'] = {
|
|
viewport: this.viewport,
|
|
x: point.x,
|
|
z: point.z,
|
|
isShiftKey: event.shiftKey,
|
|
isCtrlKey: event.ctrlKey,
|
|
isAltKey: event.altKey,
|
|
isMetaKey: event.metaKey,
|
|
mouse: mouse
|
|
}
|
|
|
|
}, 1)
|
|
|
|
animate(): void {
|
|
}
|
|
}
|
|
|