@openglobus/og 0.15.4 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/README.md +4 -8
  2. package/css/og.css +1 -1
  3. package/dist/@openglobus/og.css +1 -1
  4. package/dist/@openglobus/og.esm.js +2 -2
  5. package/dist/@openglobus/og.esm.js.map +1 -1
  6. package/dist/@openglobus/og.umd.js +2 -2
  7. package/dist/@openglobus/og.umd.js.map +1 -1
  8. package/package.json +13 -14
  9. package/src/og/Globe.js +5 -2
  10. package/src/og/LonLat.js +224 -193
  11. package/src/og/Object3d.js +21 -2
  12. package/src/og/bv/index.js +2 -2
  13. package/src/og/camera/Camera.js +4 -16
  14. package/src/og/camera/PlanetCamera.js +15 -15
  15. package/src/og/control/KeyboardNavigation.js +153 -169
  16. package/src/og/control/MouseNavigation.js +0 -20
  17. package/src/og/control/RulerSwitcher.js +2 -2
  18. package/src/og/control/SimpleNavigation.js +10 -10
  19. package/src/og/control/ZoomControl.js +2 -2
  20. package/src/og/control/heightRuler/HeightRulerScene.js +6 -2
  21. package/src/og/control/index.js +5 -2
  22. package/src/og/control/ruler/RulerScene.js +11 -8
  23. package/src/og/control/timeline/TimelineControl.js +5 -3
  24. package/src/og/control/timeline/TimelineModel.js +4 -0
  25. package/src/og/control/timeline/TimelineView.js +10 -3
  26. package/src/og/control/visibleExtent/Segment.js +36 -42
  27. package/src/og/ellipsoid/Ellipsoid.js +41 -11
  28. package/src/og/entity/Entity.js +3 -3
  29. package/src/og/entity/EntityCollection.js +2 -2
  30. package/src/og/entity/Label.js +1 -1
  31. package/src/og/entity/Polyline.js +4 -2
  32. package/src/og/index.js +4 -7
  33. package/src/og/layer/CanvasTiles.js +70 -23
  34. package/src/og/layer/GeoImage.js +40 -18
  35. package/src/og/layer/Vector.js +21 -17
  36. package/src/og/layer/WMS.js +2 -2
  37. package/src/og/layer/XYZ.js +2 -2
  38. package/src/og/math.js +2 -1
  39. package/src/og/quadTree/EPSG4326QuadTreeStrategy.js +26 -0
  40. package/src/og/quadTree/EntityCollectionNode.js +8 -2
  41. package/src/og/quadTree/Node.js +44 -50
  42. package/src/og/quadTree/index.js +2 -0
  43. package/src/og/renderer/Renderer.js +14 -1
  44. package/src/og/scene/Planet.js +12 -8
  45. package/src/og/scene/index.js +3 -3
  46. package/src/og/segment/Segment.js +125 -120
  47. package/src/og/terrain/EmptyTerrain.js +19 -7
  48. package/src/og/terrain/GlobusTerrain.js +23 -18
  49. package/src/og/terrain/MapboxTerrain.js +7 -8
  50. package/src/og/terrain/index.js +4 -4
  51. package/src/og/utils/objParser.js +227 -0
  52. package/src/og/utils/shared.js +9 -0
  53. package/src/og/webgl/Handler.js +1 -3
  54. package/types/Globe.d.ts +2 -0
  55. package/types/LonLat.d.ts +20 -1
  56. package/types/Object3d.d.ts +2 -0
  57. package/types/Popup.d.ts +1 -1
  58. package/types/bv/index.d.ts +2 -2
  59. package/types/camera/PlanetCamera.d.ts +1 -8
  60. package/types/camera/index.d.ts +2 -2
  61. package/types/control/GeoImageDragControl.d.ts +1 -1
  62. package/types/control/LayerAnimation.d.ts +1 -1
  63. package/types/control/Lighting.d.ts +2 -2
  64. package/types/control/heightRuler/HeightRulerScene.d.ts +1 -1
  65. package/types/control/index.d.ts +3 -2
  66. package/types/control/ruler/RulerScene.d.ts +5 -4
  67. package/types/control/selection/SelectionScene.d.ts +3 -3
  68. package/types/control/timeline/TimelineControl.d.ts +10 -0
  69. package/types/control/timeline/TimelineModel.d.ts +33 -0
  70. package/types/control/timeline/TimelineView.d.ts +57 -0
  71. package/types/control/timeline/timelineUtils.d.ts +9 -0
  72. package/types/ellipsoid/Ellipsoid.d.ts +27 -8
  73. package/types/ellipsoid/index.d.ts +2 -2
  74. package/types/entity/Entity.d.ts +3 -3
  75. package/types/entity/EntityCollection.d.ts +2 -2
  76. package/types/entity/Label.d.ts +1 -1
  77. package/types/entity/Polyline.d.ts +1 -0
  78. package/types/index.d.ts +45 -46
  79. package/types/layer/CanvasTiles.d.ts +2 -1
  80. package/types/layer/GeoImage.d.ts +7 -1
  81. package/types/layer/GeoTexture2d.d.ts +1 -1
  82. package/types/layer/Vector.d.ts +3 -3
  83. package/types/layer/XYZ.d.ts +1 -1
  84. package/types/layer/index.d.ts +9 -9
  85. package/types/math/Line2.d.ts +1 -1
  86. package/types/math/Line3.d.ts +1 -1
  87. package/types/math/index.d.ts +10 -10
  88. package/types/mercator.d.ts +1 -1
  89. package/types/quadTree/EPSG4326QuadTreeStrategy.d.ts +3 -0
  90. package/types/quadTree/EntityCollectionNode.d.ts +1 -1
  91. package/types/quadTree/index.d.ts +2 -0
  92. package/types/renderer/Renderer.d.ts +2 -2
  93. package/types/scene/Axes.d.ts +1 -1
  94. package/types/scene/SkyBox.d.ts +1 -1
  95. package/types/scene/index.d.ts +3 -3
  96. package/types/segment/Segment.d.ts +11 -14
  97. package/types/shaders/atmos.d.ts +1 -1
  98. package/types/shaders/billboard.d.ts +1 -1
  99. package/types/shaders/depth.d.ts +1 -1
  100. package/types/shaders/label.d.ts +1 -1
  101. package/types/shaders/pickingMask.d.ts +1 -1
  102. package/types/shaders/pointCloud.d.ts +1 -1
  103. package/types/shaders/polyline.d.ts +1 -1
  104. package/types/shaders/ray.d.ts +1 -1
  105. package/types/shaders/screenFrame.d.ts +1 -1
  106. package/types/shaders/skybox.d.ts +1 -1
  107. package/types/shaders/toneMapping.d.ts +1 -1
  108. package/types/terrain/BilTerrain.d.ts +1 -0
  109. package/types/terrain/EmptyTerrain.d.ts +13 -2
  110. package/types/terrain/GlobusTerrain.d.ts +2 -1
  111. package/types/terrain/MapboxTerrain.d.ts +1 -3
  112. package/types/terrain/index.d.ts +4 -4
  113. package/types/ui/Button.d.ts +1 -1
  114. package/types/ui/ButtonGroup.d.ts +12 -0
  115. package/types/ui/Dialog.d.ts +2 -2
  116. package/types/ui/Slider.d.ts +1 -1
  117. package/types/ui/ToggleButton.d.ts +1 -1
  118. package/types/ui/View.d.ts +1 -1
  119. package/types/utils/GeoImageCreator.d.ts +2 -2
  120. package/types/utils/ImagesCacheManager.d.ts +1 -1
  121. package/types/utils/Loader.d.ts +1 -1
  122. package/types/utils/VectorTileCreator.d.ts +1 -1
  123. package/types/utils/objParser.d.ts +8 -0
  124. package/types/utils/shared.d.ts +6 -0
  125. package/types/webgl/Handler.d.ts +2 -2
  126. package/src/og/index.core.js +0 -116
  127. package/src/og/index.webgl.js +0 -17
  128. package/types/index.core.d.ts +0 -65
  129. package/types/index.webgl.d.ts +0 -7
@@ -13,6 +13,7 @@ import { Ray } from "../math/Ray.js";
13
13
  import { Vec3 } from "../math/Vec3.js";
14
14
  import * as mercator from "../mercator.js";
15
15
  import { Camera } from "./Camera.js";
16
+ import { Ellipsoid } from "../ellipsoid/index.js";
16
17
 
17
18
  /**
18
19
  * Planet camera.
@@ -58,7 +59,7 @@ class PlanetCamera extends Camera {
58
59
  * @public
59
60
  * @type {number}
60
61
  */
61
- this.minAltitude = options.minAltitude || 5;
62
+ this.minAltitude = options.minAltitude || 1;
62
63
 
63
64
  /**
64
65
  * Maximal alltitude that camera can reach over the globe.
@@ -102,14 +103,6 @@ class PlanetCamera extends Camera {
102
103
  */
103
104
  this._insideSegment = null;
104
105
 
105
- /**
106
- * Coordinates that depends on what segment class we are fling over.
107
- * It can be WGS84 or Mercator coordinates. Gets in og.quadTree.Node
108
- * @protected
109
- * @type {LonLat}
110
- */
111
- this._insideSegmentPosition = new LonLat();
112
-
113
106
  this.slope = 0;
114
107
 
115
108
  this._keyLock = new Key();
@@ -122,7 +115,7 @@ class PlanetCamera extends Camera {
122
115
  this._flying = false;
123
116
  this._checkTerrainCollision = true;
124
117
 
125
- this._velCart = new Vec3(0.0,0.0,0.0);
118
+ this._velCart = new Vec3(0.0, 0.0, 0.0);
126
119
  }
127
120
 
128
121
  setTerrainCollisionActivity(isActive) {
@@ -144,16 +137,19 @@ class PlanetCamera extends Camera {
144
137
  }
145
138
 
146
139
  super.update();
140
+
147
141
  this.updateGeodeticPosition();
142
+
148
143
  this.eyeNorm = this.eye.normal();
149
144
  this.slope = this._b.dot(this.eyeNorm);
145
+
150
146
  this.events.dispatch(this.events.viewchange, this);
151
147
  }
152
148
 
153
149
  updateGeodeticPosition() {
154
- this._lonLat = this.planet.ellipsoid.cartesianToLonLat(this.eye);
150
+ this.planet.ellipsoid.cartesianToLonLatRes(this.eye, this._lonLat);
155
151
  if (Math.abs(this._lonLat.lat) <= mercator.MAX_LAT) {
156
- this._lonLatMerc = this._lonLat.forwardMercator();
152
+ LonLat.forwardMercatorRes(this._lonLat, this._lonLatMerc);
157
153
  }
158
154
  }
159
155
 
@@ -163,11 +159,14 @@ class PlanetCamera extends Camera {
163
159
  * @param {number} alt - Altitude over the terrain.
164
160
  */
165
161
  setAltitude(alt) {
166
- var n = this.eye.normal();
167
- var t = this._terrainPoint;
162
+
163
+ let t = this._terrainPoint;
164
+ let n = this.planet.ellipsoid.getSurfaceNormal3v(this.eye);
165
+
168
166
  this.eye.x = n.x * alt + t.x;
169
167
  this.eye.y = n.y * alt + t.y;
170
168
  this.eye.z = n.z * alt + t.z;
169
+
171
170
  this._terrainAltitude = alt;
172
171
  }
173
172
 
@@ -627,12 +626,13 @@ class PlanetCamera extends Camera {
627
626
  if (this._insideSegment && this._insideSegment.planet) {
628
627
  this._terrainAltitude = this._insideSegment.getTerrainPoint(
629
628
  this.eye,
630
- this._insideSegmentPosition,
629
+ this._lonLatMerc,
631
630
  this._terrainPoint
632
631
  );
633
632
  if (this._terrainAltitude < this.minAltitude && this._checkTerrainCollision) {
634
633
  this.setAltitude(this.minAltitude);
635
634
  }
635
+ return this._terrainPoint;
636
636
  }
637
637
  }
638
638
 
@@ -1,169 +1,153 @@
1
- /**
2
- * @module og/control/KeyboardNavigation
3
- */
4
-
5
- "use strict";
6
-
7
- import { input } from "../input/input.js";
8
- import * as math from "../math.js";
9
- import { Vec3 } from "../math/Vec3.js";
10
- import { Control } from "./Control.js";
11
-
12
- /**
13
- * Planet camera keyboard navigation. Use W,S,A,D and left shift key for fly around a planet.
14
- * @class
15
- * @extends {Control}
16
- * @param {Object} [options] - Control options.
17
- */
18
-
19
- class KeyboardNavigation extends Control {
20
- constructor(options) {
21
- options = options || {};
22
- super(options);
23
- this.step = options.step || 250;
24
- }
25
-
26
- oninit() {
27
- this.renderer.events.on("keypress", input.KEY_PGUP, this.onCameraMoveForward, this);
28
- this.renderer.events.on("keypress", input.KEY_PGDN, this.onCameraMoveBackward, this);
29
- this.renderer.events.on("keypress", input.KEY_PLUS, this.onCameraMoveForward, this);
30
- this.renderer.events.on("keypress", input.KEY_EQUALS, this.onCameraMoveForward, this);
31
- this.renderer.events.on("keypress", input.KEY_MINUS, this.onCameraMoveBackward, this);
32
- this.renderer.events.on("keypress", input.KEY_W, this.onCameraMoveForward, this);
33
- this.renderer.events.on("keypress", input.KEY_S, this.onCameraMoveBackward, this);
34
- this.renderer.events.on("keypress", input.KEY_A, this.onCameraStrifeLeft, this);
35
- this.renderer.events.on("keypress", input.KEY_D, this.onCameraStrifeRight, this);
36
- this.renderer.events.on("keypress", input.KEY_UP, this.onCameraLookUp, this);
37
- this.renderer.events.on("keypress", input.KEY_DOWN, this.onCameraLookDown, this);
38
- this.renderer.events.on("keypress", input.KEY_LEFT, this.onCameraLookLeft, this);
39
- this.renderer.events.on("keypress", input.KEY_RIGHT, this.onCameraLookRight, this);
40
- this.renderer.events.on("keypress", input.KEY_Q, this.onCameraRollLeft, this);
41
- this.renderer.events.on("keypress", input.KEY_E, this.onCameraRollRight, this);
42
- this.renderer.events.on("keypress", input.KEY_N, this.onCameraRollNorth, this);
43
- }
44
-
45
- onCameraMoveForward(event) {
46
- var cam = this.renderer.activeCamera;
47
- cam.slide(0, 0, -cam._lonLat.height / this.step);
48
- cam.checkTerrainCollision();
49
- cam.update();
50
- }
51
-
52
- onCameraMoveBackward(event) {
53
- var cam = this.renderer.activeCamera;
54
- cam.slide(0, 0, cam._lonLat.height / this.step);
55
- cam.checkTerrainCollision();
56
- cam.update();
57
- }
58
-
59
- onCameraStrifeLeft(event) {
60
- var cam = this.renderer.activeCamera;
61
- cam.slide(-cam._lonLat.height / this.step, 0, 0);
62
- cam.checkTerrainCollision();
63
- cam.update();
64
- }
65
-
66
- onCameraStrifeRight(event) {
67
- var cam = this.renderer.activeCamera;
68
- cam.slide(cam._lonLat.height / this.step, 0, 0);
69
- cam.checkTerrainCollision();
70
- cam.update();
71
- }
72
-
73
- onCameraLookUp(event) {
74
- var cam = this.renderer.activeCamera;
75
- if (this.renderer.events.isKeyPressed(input.KEY_SHIFT)) {
76
- cam.pitch(15 / this.renderer.handler.deltaTime);
77
- } else {
78
- cam.rotateVertical((cam._lonLat.height / 3000000) * math.RADIANS, Vec3.ZERO);
79
- }
80
- cam.update();
81
- }
82
-
83
- onCameraLookDown(event) {
84
- var cam = this.renderer.activeCamera;
85
- if (this.renderer.events.isKeyPressed(input.KEY_SHIFT)) {
86
- cam.pitch(-15 / this.renderer.handler.deltaTime);
87
- } else {
88
- cam.rotateVertical((-cam._lonLat.height / 3000000) * math.RADIANS, Vec3.ZERO);
89
- }
90
- cam.update();
91
- }
92
-
93
- onCameraLookLeft(event) {
94
- var cam = this.renderer.activeCamera;
95
- if (this.renderer.events.isKeyPressed(input.KEY_SHIFT)) {
96
- cam.roll(15 / this.renderer.handler.deltaTime);
97
- } else {
98
- cam.rotateHorizontal((cam._lonLat.height / 3000000) * math.RADIANS, Vec3.ZERO);
99
- }
100
- cam.update();
101
- }
102
-
103
- onCameraLookRight(event) {
104
- var cam = this.renderer.activeCamera;
105
- if (this.renderer.events.isKeyPressed(input.KEY_SHIFT)) {
106
- cam.roll(-15 / this.renderer.handler.deltaTime);
107
- } else {
108
- cam.rotateHorizontal((-cam._lonLat.height / 3000000) * math.RADIANS, Vec3.ZERO);
109
- }
110
- cam.update();
111
- }
112
-
113
- onCameraTurnLeft(event) {
114
- var cam = this.renderer.activeCamera;
115
- if (this.renderer.events.isKeyPressed(input.KEY_SHIFT)) {
116
- cam.yaw(15 / this.renderer.handler.deltaTime);
117
- } else {
118
- cam.rotateHorizontal((cam._lonLat.height / 3000000) * math.RADIANS, false, Vec3.ZERO);
119
- }
120
- cam.update();
121
- }
122
-
123
- onCameraTurnRight(event) {
124
- var cam = this.renderer.activeCamera;
125
- if (this.renderer.events.isKeyPressed(input.KEY_SHIFT)) {
126
- cam.yaw(-15 / this.renderer.handler.deltaTime);
127
- } else {
128
- cam.rotateHorizontal((-cam._lonLat.height / 3000000) * math.RADIANS, false, Vec3.ZERO);
129
- }
130
- cam.update();
131
- }
132
-
133
- // from CompassButton._onClick()
134
- onCameraRollNorth(event) {
135
- let c = this.planet.getCartesianFromPixelTerrain(this.renderer.handler.getCenter());
136
- if (c) {
137
- this.planet.flyCartesian(
138
- c.normal().scaleTo(c.length() + c.distance(this.planet.camera.eye)),
139
- null,
140
- null,
141
- 0,
142
- null,
143
- null,
144
- () => {
145
- this.planet.camera.look(c);
146
- }
147
- );
148
- } else {
149
- this.planet.flyCartesian(this.planet.camera.eye);
150
- }
151
- }
152
-
153
- onCameraRollLeft(event) {
154
- this.renderer.activeCamera.roll(-15 / this.renderer.handler.deltaTime);
155
- this.renderer.activeCamera.update();
156
- }
157
-
158
- onCameraRollRight(event) {
159
- this.renderer.activeCamera.roll(15 / this.renderer.handler.deltaTime);
160
- this.renderer.activeCamera.update();
161
- }
162
- }
163
-
164
- export function keyboardNavigation(options) {
165
- return new KeyboardNavigation(options);
166
- }
167
-
168
- export { KeyboardNavigation };
169
-
1
+ /**
2
+ * @module og/control/KeyboardNavigation
3
+ */
4
+
5
+ "use strict";
6
+
7
+ import { input } from "../input/input.js";
8
+ import * as math from "../math.js";
9
+ import { Vec3 } from "../math/Vec3.js";
10
+ import { Control } from "./Control.js";
11
+
12
+ /**
13
+ * Planet camera keyboard navigation. Use W,S,A,D and left shift key for fly around a planet.
14
+ * @class
15
+ * @extends {Control}
16
+ * @param {Object} [options] - Control options.
17
+ */
18
+
19
+ class KeyboardNavigation extends Control {
20
+ constructor(options) {
21
+ options = options || {};
22
+ super(options);
23
+ this.step = options.step || 250;
24
+ }
25
+
26
+ oninit() {
27
+ this.renderer.events.on("keypress", input.KEY_PGUP, this.onCameraMoveForward, this);
28
+ this.renderer.events.on("keypress", input.KEY_PGDN, this.onCameraMoveBackward, this);
29
+ this.renderer.events.on("keypress", input.KEY_PLUS, this.onCameraMoveForward, this);
30
+ this.renderer.events.on("keypress", input.KEY_EQUALS, this.onCameraMoveForward, this);
31
+ this.renderer.events.on("keypress", input.KEY_MINUS, this.onCameraMoveBackward, this);
32
+ this.renderer.events.on("keypress", input.KEY_W, this.onCameraMoveForward, this);
33
+ this.renderer.events.on("keypress", input.KEY_S, this.onCameraMoveBackward, this);
34
+ this.renderer.events.on("keypress", input.KEY_A, this.onCameraStrifeLeft, this);
35
+ this.renderer.events.on("keypress", input.KEY_D, this.onCameraStrifeRight, this);
36
+ this.renderer.events.on("keypress", input.KEY_UP, this.onCameraLookUp, this);
37
+ this.renderer.events.on("keypress", input.KEY_DOWN, this.onCameraLookDown, this);
38
+ this.renderer.events.on("keypress", input.KEY_LEFT, this.onCameraLookLeft, this);
39
+ this.renderer.events.on("keypress", input.KEY_RIGHT, this.onCameraLookRight, this);
40
+ this.renderer.events.on("keypress", input.KEY_Q, this.onCameraRollLeft, this);
41
+ this.renderer.events.on("keypress", input.KEY_E, this.onCameraRollRight, this);
42
+ this.renderer.events.on("keypress", input.KEY_N, this.onCameraRollNorth, this);
43
+ }
44
+
45
+ onCameraMoveForward(event) {
46
+ var cam = this.renderer.activeCamera;
47
+ cam.slide(0, 0, -cam._lonLat.height / this.step);
48
+ }
49
+
50
+ onCameraMoveBackward(event) {
51
+ var cam = this.renderer.activeCamera;
52
+ cam.slide(0, 0, cam._lonLat.height / this.step);
53
+ }
54
+
55
+ onCameraStrifeLeft(event) {
56
+ var cam = this.renderer.activeCamera;
57
+ cam.slide(-cam._lonLat.height / this.step, 0, 0);
58
+ }
59
+
60
+ onCameraStrifeRight(event) {
61
+ var cam = this.renderer.activeCamera;
62
+ cam.slide(cam._lonLat.height / this.step, 0, 0);
63
+ }
64
+
65
+ onCameraLookUp(event) {
66
+ var cam = this.renderer.activeCamera;
67
+ if (this.renderer.events.isKeyPressed(input.KEY_SHIFT)) {
68
+ cam.pitch(15 / this.renderer.handler.deltaTime);
69
+ } else {
70
+ cam.rotateVertical((cam._lonLat.height / 3000000) * math.RADIANS, Vec3.ZERO);
71
+ }
72
+ }
73
+
74
+ onCameraLookDown(event) {
75
+ var cam = this.renderer.activeCamera;
76
+ if (this.renderer.events.isKeyPressed(input.KEY_SHIFT)) {
77
+ cam.pitch(-15 / this.renderer.handler.deltaTime);
78
+ } else {
79
+ cam.rotateVertical((-cam._lonLat.height / 3000000) * math.RADIANS, Vec3.ZERO);
80
+ }
81
+ }
82
+
83
+ onCameraLookLeft(event) {
84
+ var cam = this.renderer.activeCamera;
85
+ if (this.renderer.events.isKeyPressed(input.KEY_SHIFT)) {
86
+ cam.roll(15 / this.renderer.handler.deltaTime);
87
+ } else {
88
+ cam.rotateHorizontal((cam._lonLat.height / 3000000) * math.RADIANS, Vec3.ZERO);
89
+ }
90
+ }
91
+
92
+ onCameraLookRight(event) {
93
+ var cam = this.renderer.activeCamera;
94
+ if (this.renderer.events.isKeyPressed(input.KEY_SHIFT)) {
95
+ cam.roll(-15 / this.renderer.handler.deltaTime);
96
+ } else {
97
+ cam.rotateHorizontal((-cam._lonLat.height / 3000000) * math.RADIANS, Vec3.ZERO);
98
+ }
99
+ }
100
+
101
+ onCameraTurnLeft(event) {
102
+ var cam = this.renderer.activeCamera;
103
+ if (this.renderer.events.isKeyPressed(input.KEY_SHIFT)) {
104
+ cam.yaw(15 / this.renderer.handler.deltaTime);
105
+ } else {
106
+ cam.rotateHorizontal((cam._lonLat.height / 3000000) * math.RADIANS, false, Vec3.ZERO);
107
+ }
108
+ }
109
+
110
+ onCameraTurnRight(event) {
111
+ var cam = this.renderer.activeCamera;
112
+ if (this.renderer.events.isKeyPressed(input.KEY_SHIFT)) {
113
+ cam.yaw(-15 / this.renderer.handler.deltaTime);
114
+ } else {
115
+ cam.rotateHorizontal((-cam._lonLat.height / 3000000) * math.RADIANS, false, Vec3.ZERO);
116
+ }
117
+ }
118
+
119
+ // from CompassButton._onClick()
120
+ onCameraRollNorth(event) {
121
+ let c = this.planet.getCartesianFromPixelTerrain(this.renderer.handler.getCenter());
122
+ if (c) {
123
+ this.planet.flyCartesian(
124
+ c.normal().scaleTo(c.length() + c.distance(this.planet.camera.eye)),
125
+ null,
126
+ null,
127
+ 0,
128
+ null,
129
+ null,
130
+ () => {
131
+ this.planet.camera.look(c);
132
+ }
133
+ );
134
+ } else {
135
+ this.planet.flyCartesian(this.planet.camera.eye);
136
+ }
137
+ }
138
+
139
+ onCameraRollLeft(event) {
140
+ this.renderer.activeCamera.roll(-15 / this.renderer.handler.deltaTime);
141
+ }
142
+
143
+ onCameraRollRight(event) {
144
+ this.renderer.activeCamera.roll(15 / this.renderer.handler.deltaTime);
145
+ }
146
+ }
147
+
148
+ export function keyboardNavigation(options) {
149
+ return new KeyboardNavigation(options);
150
+ }
151
+
152
+ export { KeyboardNavigation };
153
+
@@ -319,10 +319,6 @@ class MouseNavigation extends Control {
319
319
  cam._u = rot.mulVec3(cam._u);
320
320
  cam._r = rot.mulVec3(cam._r);
321
321
  cam._b = rot.mulVec3(cam._b);
322
-
323
- cam.checkTerrainCollision();
324
-
325
- cam.update();
326
322
  }
327
323
  } else {
328
324
  var p0 = this.grabbedPoint,
@@ -332,10 +328,6 @@ class MouseNavigation extends Control {
332
328
  var px = new Vec3();
333
329
  if (new Ray(cam.eye, e.direction).hitPlane(p0, p1, p2, px) === Ray.INSIDE) {
334
330
  cam.eye = this._eye0.addA(px.subA(p0).negate());
335
-
336
- cam.checkTerrainCollision();
337
-
338
- cam.update();
339
331
  }
340
332
  }
341
333
  }
@@ -361,10 +353,6 @@ class MouseNavigation extends Control {
361
353
  cam.rotateHorizontal(l * (e.x - e.prev_x), false, this.pointOnEarth, this.earthUp);
362
354
 
363
355
  cam.rotateVertical(l * (e.y - e.prev_y), this.pointOnEarth, this.minSlope);
364
-
365
- cam.checkTerrainCollision();
366
-
367
- cam.update();
368
356
  }
369
357
  }
370
358
 
@@ -405,10 +393,6 @@ class MouseNavigation extends Control {
405
393
  cam._u = sf.v;
406
394
  cam._r = sf.u;
407
395
  cam._b = sf.n;
408
-
409
- cam.checkTerrainCollision();
410
-
411
- cam.update();
412
396
  } else {
413
397
  if (this._deactivate) {
414
398
  this._deactivate = false;
@@ -438,10 +422,6 @@ class MouseNavigation extends Control {
438
422
  cam._u = rot.mulVec3(cam._u);
439
423
  cam._r = rot.mulVec3(cam._r);
440
424
  cam._b = rot.mulVec3(cam._b);
441
-
442
- cam.checkTerrainCollision();
443
-
444
- cam.update();
445
425
  }
446
426
 
447
427
  if (cam.eye.distance(prevEye) / cam._terrainAltitude > 0.01) {
@@ -6,7 +6,7 @@
6
6
 
7
7
  import { ToggleButton } from "../ui/ToggleButton.js";
8
8
  import { Control } from "./Control.js";
9
- import { Ruler } from "./ruler/Ruler.js";
9
+ import { HeightRuler } from "./heightRuler/HeightRuler.js";
10
10
 
11
11
  const ICON_BUTTON_SVG = `<?xml version="1.0" encoding="iso-8859-1"?>
12
12
  <!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
@@ -37,7 +37,7 @@ class RulerSwitcher extends Control {
37
37
  ...options
38
38
  });
39
39
 
40
- this.ruler = new Ruler({
40
+ this.ruler = new HeightRuler({
41
41
  ignoreTerrain: options.ignoreTerrain
42
42
  });
43
43
  }
@@ -35,7 +35,7 @@ class SimpleNavigation extends Control {
35
35
  if (this._active) {
36
36
  var camera = this.camera;
37
37
  camera.slide(0, 0, -this.speed);
38
- camera.update();
38
+ //camera.update();
39
39
  }
40
40
  }
41
41
 
@@ -43,7 +43,7 @@ class SimpleNavigation extends Control {
43
43
  if (this._active) {
44
44
  var camera = this.camera;
45
45
  camera.slide(0, 0, this.speed);
46
- camera.update();
46
+ //camera.update();
47
47
  }
48
48
  }
49
49
 
@@ -51,7 +51,7 @@ class SimpleNavigation extends Control {
51
51
  if (this._active) {
52
52
  var camera = this.camera;
53
53
  camera.slide(-this.speed, 0, 0);
54
- camera.update();
54
+ //camera.update();
55
55
  }
56
56
  }
57
57
 
@@ -59,7 +59,7 @@ class SimpleNavigation extends Control {
59
59
  if (this._active) {
60
60
  var camera = this.camera;
61
61
  camera.slide(this.speed, 0, 0);
62
- camera.update();
62
+ //camera.update();
63
63
  }
64
64
  }
65
65
 
@@ -67,7 +67,7 @@ class SimpleNavigation extends Control {
67
67
  if (this._active) {
68
68
  var cam = this.camera;
69
69
  cam.pitch(0.5);
70
- cam.update();
70
+ //cam.update();
71
71
  }
72
72
  }
73
73
 
@@ -75,7 +75,7 @@ class SimpleNavigation extends Control {
75
75
  if (this._active) {
76
76
  var cam = this.camera;
77
77
  cam.pitch(-0.5);
78
- cam.update();
78
+ //cam.update();
79
79
  }
80
80
  }
81
81
 
@@ -83,7 +83,7 @@ class SimpleNavigation extends Control {
83
83
  if (this._active) {
84
84
  var cam = this.camera;
85
85
  cam.yaw(0.5);
86
- cam.update();
86
+ //cam.update();
87
87
  }
88
88
  }
89
89
 
@@ -91,7 +91,7 @@ class SimpleNavigation extends Control {
91
91
  if (this._active) {
92
92
  var cam = this.camera;
93
93
  cam.yaw(-0.5);
94
- cam.update();
94
+ //cam.update();
95
95
  }
96
96
  }
97
97
 
@@ -99,7 +99,7 @@ class SimpleNavigation extends Control {
99
99
  if (this._active) {
100
100
  var cam = this.camera;
101
101
  cam.roll(-0.5);
102
- cam.update();
102
+ //cam.update();
103
103
  }
104
104
  }
105
105
 
@@ -107,7 +107,7 @@ class SimpleNavigation extends Control {
107
107
  if (this._active) {
108
108
  var cam = this.camera;
109
109
  cam.roll(0.5);
110
- cam.update();
110
+ //cam.update();
111
111
  }
112
112
  }
113
113
  }
@@ -9,12 +9,12 @@ import { Button } from "../ui/Button.js";
9
9
  import { Control } from "./Control.js";
10
10
 
11
11
  const ICON_PLUS_SVG = '<?xml version="1.0"?>' +
12
- '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">' +
12
+ '<svg width=24 height=24 xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">' +
13
13
  ' <path d="M 11 5 L 11 11 L 5 11 L 5 13 L 11 13 L 11 19 L 13 19 L 13 13 L 19 13 L 19 11 L 13 11 L 13 5 L 11 5 z"/>' +
14
14
  '</svg>';
15
15
 
16
16
  const ICON_MINUS_SVG = '<?xml version="1.0"?>' +
17
- '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">' +
17
+ '<svg width=24 height=24 xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">' +
18
18
  ' <path d="M 5 11 L 5 13 L 19 13 L 19 11 L 5 11 z"/>' +
19
19
  '</svg>';
20
20
 
@@ -51,7 +51,11 @@ class HeightRulerScene extends RulerScene {
51
51
  relativeToGround: false,
52
52
  displayInLayerSwitcher: false
53
53
  });
54
+ }
54
55
 
56
+ setVisibility(visibility) {
57
+ super.setVisibility(visibility);
58
+ this._geoRulerLayer.setVisibility(visibility);
55
59
  }
56
60
 
57
61
  get deltaLabel() {
@@ -115,7 +119,6 @@ class HeightRulerScene extends RulerScene {
115
119
  }
116
120
 
117
121
  _drawLine(startLonLat, endLonLat, startPos) {
118
-
119
122
  super._drawLine(startLonLat, endLonLat, startPos);
120
123
  this._updateHeightRaysAndLabels();
121
124
  }
@@ -173,7 +176,8 @@ class HeightRulerScene extends RulerScene {
173
176
  }
174
177
  })
175
178
  ];
176
- this._cornersLayer.addEntities(this._cornerEntity)
179
+
180
+ this._cornersLayer.setEntities(this._cornerEntity);
177
181
  }
178
182
 
179
183
  init() {
@@ -1,6 +1,6 @@
1
1
  import { CompassButton } from "./CompassButton.js";
2
2
  import { Control } from "./Control.js";
3
- import { DebugInfo } from "./DebugInfo";
3
+ import { DebugInfo } from "./DebugInfo.js";
4
4
  import { EarthCoordinates } from "./EarthCoordinates.js";
5
5
  import { EarthNavigation } from "./EarthNavigation.js";
6
6
  import { GeoImageDragControl } from "./GeoImageDragControl.js";
@@ -22,6 +22,8 @@ import { ToggleWireframe } from "./ToggleWireframe.js";
22
22
  import { TouchNavigation } from "./TouchNavigation.js";
23
23
  import { ZoomControl } from "./ZoomControl.js";
24
24
 
25
+ import { TimelineControl } from "./timeline/TimelineControl.js";
26
+
25
27
  export {
26
28
  Control,
27
29
  CompassButton,
@@ -45,5 +47,6 @@ export {
45
47
  HeightRuler,
46
48
  SimpleSkyBackground,
47
49
  Selection,
48
- LayerAnimation
50
+ LayerAnimation,
51
+ TimelineControl
49
52
  };