|
|
@ -10,9 +10,9 @@ import EventBus from '@/runtime/EventBus.ts' |
|
|
*/ |
|
|
*/ |
|
|
export default class DragControl2 implements IControls { |
|
|
export default class DragControl2 implements IControls { |
|
|
private viewport: Viewport |
|
|
private viewport: Viewport |
|
|
private enabled: boolean = true |
|
|
private _is_enabled: boolean = true |
|
|
|
|
|
private domElement: HTMLElement |
|
|
private isDragging: boolean = false |
|
|
public isDragging: boolean = false |
|
|
private isPointerDown: boolean = false |
|
|
private isPointerDown: boolean = false |
|
|
private dragStartMouse: THREE.Vector2 = new THREE.Vector2() |
|
|
private dragStartMouse: THREE.Vector2 = new THREE.Vector2() |
|
|
|
|
|
|
|
|
@ -28,48 +28,50 @@ export default class DragControl2 implements IControls { |
|
|
domElement.addEventListener('pointerleave', this.onPointerLeave) |
|
|
domElement.addEventListener('pointerleave', this.onPointerLeave) |
|
|
|
|
|
|
|
|
domElement.style.cursor = 'auto' |
|
|
domElement.style.cursor = 'auto' |
|
|
|
|
|
this.domElement = domElement |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* 设置启用/禁用 |
|
|
* 设置启用/禁用 |
|
|
*/ |
|
|
*/ |
|
|
set enable(value: boolean) { |
|
|
public set enabled(value: boolean) { |
|
|
this.enabled = value |
|
|
this._is_enabled = value |
|
|
if (!value) { |
|
|
if (!value) { |
|
|
this.cleanupDrag() |
|
|
this.cleanupDrag() |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
get enable(): boolean { |
|
|
public get enabled(): boolean { |
|
|
return this.enabled |
|
|
return this._is_enabled |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* 卸载资源 |
|
|
* 卸载资源 |
|
|
*/ |
|
|
*/ |
|
|
dispose(): void { |
|
|
dispose(): void { |
|
|
const domElement = this.viewport.renderer.domElement |
|
|
if (this.domElement) { |
|
|
domElement.removeEventListener('pointermove', this.onPointerMove) |
|
|
this.domElement.removeEventListener('pointermove', this.onPointerMove) |
|
|
domElement.removeEventListener('pointerdown', this.onPointerDown) |
|
|
this.domElement.removeEventListener('pointerdown', this.onPointerDown) |
|
|
domElement.removeEventListener('pointerup', this.onPointerUp) |
|
|
this.domElement.removeEventListener('pointerup', this.onPointerUp) |
|
|
domElement.removeEventListener('pointerleave', this.onPointerLeave) |
|
|
this.domElement.removeEventListener('pointerleave', this.onPointerLeave) |
|
|
|
|
|
|
|
|
this.cleanupDrag() |
|
|
this.cleanupDrag() |
|
|
domElement.style.cursor = 'auto' |
|
|
this.domElement.style.cursor = 'auto' |
|
|
|
|
|
this.viewport = null |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* 清理拖拽状态 |
|
|
* 清理拖拽状态 |
|
|
*/ |
|
|
*/ |
|
|
private cleanupDrag(): void { |
|
|
private cleanupDrag(): void { |
|
|
if (this.isDragging || this.isPointerDown) { |
|
|
this.viewport.renderer.domElement.style.cursor = 'auto' |
|
|
this.isDragging = false |
|
|
this.isDragging = false |
|
|
this.isPointerDown = false |
|
|
this.isPointerDown = false |
|
|
this.dragStartMouse.set(NaN, NaN) |
|
|
this.dragStartMouse.set(NaN, NaN) |
|
|
this.removeShadows() |
|
|
this.removeShadows() |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* 获取当前鼠标坐标(归一化设备坐标) |
|
|
* 获取当前鼠标坐标(归一化设备坐标) |
|
|
@ -262,4 +264,15 @@ export default class DragControl2 implements IControls { |
|
|
if (!this.enabled) return |
|
|
if (!this.enabled) return |
|
|
this.cleanupDrag() |
|
|
this.cleanupDrag() |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 取消当前拖拽状态 |
|
|
|
|
|
*/ |
|
|
|
|
|
cancelDrag(): void { |
|
|
|
|
|
if (this.isDragging || this.isPointerDown) { |
|
|
|
|
|
this.cleanupDrag() |
|
|
|
|
|
this.viewport.renderer.domElement.style.cursor = 'auto' |
|
|
|
|
|
this.viewport.controls.enabled = true |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|