You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

CameraOption.js 3.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. /**
  2. * @Author: Caven
  3. * @Date: 2020-01-21 15:33:52
  4. */
  5. const { Cesium } = DC.Namespace
  6. class CameraOption {
  7. constructor(viewer) {
  8. this._viewer = viewer
  9. this._mouseMode = 0
  10. }
  11. /**
  12. * @param min
  13. * @param max
  14. */
  15. setPitchRange(min, max) {
  16. let handler = new Cesium.ScreenSpaceEventHandler(this._viewer.scene.canvas)
  17. if (this._viewer.scene.mode === Cesium.SceneMode.SCENE3D) {
  18. handler.setInputAction(
  19. movement => {
  20. handler.setInputAction(movement => {
  21. let enableTilt = true
  22. let isUp = movement.endPosition.y < movement.startPosition.y
  23. if (
  24. isUp &&
  25. this._viewer.camera.pitch > Cesium.Math.toRadians(max)
  26. ) {
  27. enableTilt = false
  28. } else if (
  29. !isUp &&
  30. this._viewer.camera.pitch < Cesium.Math.toRadians(min)
  31. ) {
  32. enableTilt = false
  33. } else {
  34. enableTilt = true
  35. }
  36. this._viewer.scene.screenSpaceCameraController.enableTilt = enableTilt
  37. }, Cesium.ScreenSpaceEventType.MOUSE_MOVE)
  38. },
  39. this._mouseMode === 0
  40. ? Cesium.ScreenSpaceEventType.MIDDLE_DOWN
  41. : Cesium.ScreenSpaceEventType.RIGHT_DOWN
  42. )
  43. handler.setInputAction(
  44. movement => {
  45. this._viewer.scene.screenSpaceCameraController.enableTilt = true
  46. handler.removeInputAction(Cesium.ScreenSpaceEventType.MOUSE_MOVE)
  47. },
  48. this._mouseMode === 0
  49. ? Cesium.ScreenSpaceEventType.MIDDLE_UP
  50. : Cesium.ScreenSpaceEventType.RIGHT_UP
  51. )
  52. }
  53. }
  54. /**
  55. *
  56. */
  57. limitCameraToGround() {
  58. this._viewer.camera.changed.addEventListener(framestate => {
  59. if (
  60. this._viewer.camera._suspendTerrainAdjustment &&
  61. this._viewer.scene.mode === Cesium.SceneMode.SCENE3D
  62. ) {
  63. this._viewer.camera._suspendTerrainAdjustment = false
  64. this._viewer.camera._adjustOrthographicFrustum(true)
  65. }
  66. })
  67. }
  68. /**
  69. * @param west
  70. * @param south
  71. * @param east
  72. * @param north
  73. */
  74. setBounds(west, south, east, north) {}
  75. /**
  76. *
  77. * @param mouseMode
  78. */
  79. changeMouseMode(mouseMode) {
  80. this._mouseMode = mouseMode || 0
  81. if (mouseMode === 0) {
  82. this._viewer.scene.screenSpaceCameraController.tiltEventTypes = [
  83. Cesium.CameraEventType.MIDDLE_DRAG,
  84. Cesium.CameraEventType.PINCH,
  85. {
  86. eventType: Cesium.CameraEventType.LEFT_DRAG,
  87. modifier: Cesium.KeyboardEventModifier.CTRL
  88. },
  89. {
  90. eventType: Cesium.CameraEventType.RIGHT_DRAG,
  91. modifier: Cesium.KeyboardEventModifier.CTRL
  92. }
  93. ]
  94. this._viewer.scene.screenSpaceCameraController.zoomEventTypes = [
  95. Cesium.CameraEventType.RIGHT_DRAG,
  96. Cesium.CameraEventType.WHEEL,
  97. Cesium.CameraEventType.PINCH
  98. ]
  99. } else if (mouseMode === 1) {
  100. this._viewer.scene.screenSpaceCameraController.tiltEventTypes = [
  101. Cesium.CameraEventType.RIGHT_DRAG,
  102. Cesium.CameraEventType.PINCH,
  103. {
  104. eventType: Cesium.CameraEventType.LEFT_DRAG,
  105. modifier: Cesium.KeyboardEventModifier.CTRL
  106. },
  107. {
  108. eventType: Cesium.CameraEventType.RIGHT_DRAG,
  109. modifier: Cesium.KeyboardEventModifier.CTRL
  110. }
  111. ]
  112. this._viewer.scene.screenSpaceCameraController.zoomEventTypes = [
  113. Cesium.CameraEventType.WHEEL,
  114. Cesium.CameraEventType.PINCH
  115. ]
  116. }
  117. }
  118. }
  119. export default CameraOption