threepipe
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

OrbitControls3.ts 2.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import {OrbitControls} from 'three/examples/jsm/controls/OrbitControls.js'
  2. import {IUiConfigContainer, uiInput, UiObjectConfig, uiPanelContainer, uiToggle, uiVector} from 'uiconfig.js'
  3. import {serialize} from 'ts-browser-helpers'
  4. import {ICameraControls} from '../../core'
  5. import {Vector3} from 'three'
  6. export type TOrbitControlsEvents = 'change' | 'end' | 'start'
  7. @uiPanelContainer('Orbit Controls')
  8. export class OrbitControls3 extends OrbitControls implements IUiConfigContainer, ICameraControls<TOrbitControlsEvents> {
  9. uiConfig?: UiObjectConfig<void, 'panel'>
  10. @serialize() type = 'OrbitControls'
  11. @uiToggle() enabled = true
  12. @uiToggle() @serialize() dollyZoom = false
  13. @uiToggle() @serialize() enableDamping = true
  14. @uiInput() @serialize() dampingFactor = 0.08
  15. @uiToggle() @serialize() autoRotate = false
  16. @uiInput() @serialize() autoRotateSpeed = 2.0
  17. @uiToggle() @serialize() enableZoom = true
  18. @uiInput() @serialize() zoomSpeed = 0.15
  19. @uiInput() @serialize() maxZoomSpeed = 0.20
  20. @uiToggle() @serialize() enableRotate = true
  21. @uiInput() @serialize() rotateSpeed = 2.0
  22. @uiToggle() @serialize() enablePan = true
  23. @uiInput() @serialize() panSpeed = 1.0
  24. @uiInput() @serialize() autoPushTarget = false
  25. @uiInput() @serialize() autoPullTarget = false
  26. @uiInput() @serialize() minDistance = 0.35
  27. @uiInput() @serialize() maxDistance = 1000
  28. @uiInput() @serialize() minZoom = 0.01
  29. @uiInput() @serialize() maxZoom = 1000
  30. @uiInput() @serialize() minPolarAngle = 0
  31. @uiInput() @serialize() maxPolarAngle = Math.PI
  32. @uiInput() @serialize() minAzimuthAngle = -10000 // should be -Infinity but this breaks the UI
  33. @uiInput() @serialize() maxAzimuthAngle = 10000 // should be Infinity but this breaks the UI
  34. @uiVector() @serialize() clampMin = new Vector3(-10000, -10000, -10000) // should be -Infinity but this breaks the UI
  35. @uiVector() @serialize() clampMax = new Vector3(10000, 10000, 10000) // should be Infinity but this breaks the UI
  36. @uiToggle() @serialize() zoomToCursor = true
  37. // @uiToggle()
  38. @serialize() screenSpacePanning = true
  39. // @uiInput()
  40. @serialize() keyPanSpeed = 7.0
  41. throttleUpdate = 60 // throttle to 60 updates per second (implemented in OrbitControls.js.update() method)
  42. // todo add to three-ts-types
  43. stopDamping!: () => void
  44. }