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.
40 lines
1018 B
40 lines
1018 B
import type Viewport from '@/designer/Viewport.ts'
|
|
import type { ITool } from '@/designer/model2DEditor/tools/ITool.ts'
|
|
|
|
let pmFn
|
|
|
|
/**
|
|
* 鼠标移动时,将鼠标位置的坐标转换为设计图上的坐标,并设置到 designer.mousePos 属性中
|
|
*/
|
|
export default class MouseMoveInspect implements ITool {
|
|
viewport: Viewport
|
|
canvas: HTMLCanvasElement
|
|
|
|
constructor() {
|
|
}
|
|
|
|
init(viewport: Viewport) {
|
|
this.viewport = viewport
|
|
this.canvas = this.viewport.renderer.domElement as HTMLCanvasElement
|
|
|
|
pmFn = this.mouseMove.bind(this)
|
|
this.canvas.addEventListener('pointermove', pmFn)
|
|
}
|
|
|
|
destory() {
|
|
this.canvas.removeEventListener('pointermove', pmFn)
|
|
pmFn = undefined
|
|
}
|
|
|
|
mouseMove = _.throttle(function(this: MouseMoveInspect, event: MouseEvent) {
|
|
// 当前鼠标所在的点
|
|
const point = this.viewport.getClosestIntersection(event)
|
|
if (!point) {
|
|
return
|
|
}
|
|
|
|
this.viewport.state.mouse.x = point.x
|
|
this.viewport.state.mouse.z = point.z
|
|
|
|
}, 1)
|
|
}
|