Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions src/controls/OrbitControls.ts
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ class OrbitControls extends EventDispatcher<StandardControlsEventMap> {
setPolarAngle: (x: number) => void
setAzimuthalAngle: (x: number) => void
getDistance: () => number
setDistance: (x: number) => void
// Not used in most scenarios, however they can be useful for specific use cases
getZoomScale: () => number

Expand Down Expand Up @@ -181,6 +182,21 @@ class OrbitControls extends EventDispatcher<StandardControlsEventMap> {

this.getDistance = (): number => scope.object.position.distanceTo(scope.target)

this.setDistance = (value: number): void => {
const clamped = Math.max(scope.minDistance, Math.min(scope.maxDistance, value))
const current = scope.object.position.distanceTo(scope.target)
if (current === 0) return
if ((scope.object as OrthographicCamera).isOrthographicCamera) {
// z position has no effect on a parallel projection, so adjust zoom instead
const orthoCamera = scope.object as OrthographicCamera
orthoCamera.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, (orthoCamera.zoom * current) / clamped))
orthoCamera.updateProjectionMatrix()
} else {
scope.object.position.sub(scope.target).setLength(clamped).add(scope.target)
}
scope.update()
}

this.listenToKeyEvents = (domElement: HTMLElement): void => {
domElement.addEventListener('keydown', onKeyDown)
this._domElementKeyEvents = domElement
Expand Down
Loading