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 { } }