59 lines
1.4 KiB
JavaScript
59 lines
1.4 KiB
JavaScript
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'
|
|
const _changeEvent = { type: 'change' }
|
|
class DmtControl extends OrbitControls {
|
|
constructor(object, domElement) {
|
|
super(object, domElement)
|
|
const scope = this
|
|
const STATE = {
|
|
NONE: -1,
|
|
ROTATE: 0,
|
|
DOLLY: 1,
|
|
PAN: 2,
|
|
TOUCH_ROTATE: 3,
|
|
TOUCH_PAN: 4,
|
|
TOUCH_DOLLY_PAN: 5,
|
|
TOUCH_DOLLY_ROTATE: 6
|
|
}
|
|
|
|
// eslint-disable-next-line no-unused-vars
|
|
let state = STATE.NONE
|
|
this.resetState = function(target0, position0, zoom0) {
|
|
scope.target.copy(target0)
|
|
scope.object.position.copy(position0)
|
|
scope.object.zoom = zoom0
|
|
|
|
scope.object.updateProjectionMatrix()
|
|
scope.dispatchEvent(_changeEvent)
|
|
|
|
scope.update()
|
|
|
|
state = STATE.NONE
|
|
}
|
|
this.setLookAt = function(position0, target0, zoom0) {
|
|
scope.target.copy(target0)
|
|
scope.object.position.copy(position0)
|
|
scope.object.zoom = zoom0
|
|
|
|
scope.object.updateProjectionMatrix()
|
|
scope.dispatchEvent(_changeEvent)
|
|
|
|
scope.update()
|
|
|
|
state = STATE.NONE
|
|
}
|
|
this.moveTo = function(x, y, z) {
|
|
// scope.target.set(x, y, z)
|
|
}
|
|
this.getState = function() {
|
|
return {
|
|
target: scope.target.clone(),
|
|
position: scope.object.position.clone(),
|
|
zoom: parseFloat(scope.object.zoom.toString())
|
|
}
|
|
}
|
|
}
|
|
}
|
|
export {
|
|
DmtControl
|
|
}
|