@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.
- package/README.md +4 -8
- package/css/og.css +1 -1
- package/dist/@openglobus/og.css +1 -1
- package/dist/@openglobus/og.esm.js +2 -2
- package/dist/@openglobus/og.esm.js.map +1 -1
- package/dist/@openglobus/og.umd.js +2 -2
- package/dist/@openglobus/og.umd.js.map +1 -1
- package/package.json +13 -14
- package/src/og/Globe.js +5 -2
- package/src/og/LonLat.js +224 -193
- package/src/og/Object3d.js +21 -2
- package/src/og/bv/index.js +2 -2
- package/src/og/camera/Camera.js +4 -16
- package/src/og/camera/PlanetCamera.js +15 -15
- package/src/og/control/KeyboardNavigation.js +153 -169
- package/src/og/control/MouseNavigation.js +0 -20
- package/src/og/control/RulerSwitcher.js +2 -2
- package/src/og/control/SimpleNavigation.js +10 -10
- package/src/og/control/ZoomControl.js +2 -2
- package/src/og/control/heightRuler/HeightRulerScene.js +6 -2
- package/src/og/control/index.js +5 -2
- package/src/og/control/ruler/RulerScene.js +11 -8
- package/src/og/control/timeline/TimelineControl.js +5 -3
- package/src/og/control/timeline/TimelineModel.js +4 -0
- package/src/og/control/timeline/TimelineView.js +10 -3
- package/src/og/control/visibleExtent/Segment.js +36 -42
- package/src/og/ellipsoid/Ellipsoid.js +41 -11
- package/src/og/entity/Entity.js +3 -3
- package/src/og/entity/EntityCollection.js +2 -2
- package/src/og/entity/Label.js +1 -1
- package/src/og/entity/Polyline.js +4 -2
- package/src/og/index.js +4 -7
- package/src/og/layer/CanvasTiles.js +70 -23
- package/src/og/layer/GeoImage.js +40 -18
- package/src/og/layer/Vector.js +21 -17
- package/src/og/layer/WMS.js +2 -2
- package/src/og/layer/XYZ.js +2 -2
- package/src/og/math.js +2 -1
- package/src/og/quadTree/EPSG4326QuadTreeStrategy.js +26 -0
- package/src/og/quadTree/EntityCollectionNode.js +8 -2
- package/src/og/quadTree/Node.js +44 -50
- package/src/og/quadTree/index.js +2 -0
- package/src/og/renderer/Renderer.js +14 -1
- package/src/og/scene/Planet.js +12 -8
- package/src/og/scene/index.js +3 -3
- package/src/og/segment/Segment.js +125 -120
- package/src/og/terrain/EmptyTerrain.js +19 -7
- package/src/og/terrain/GlobusTerrain.js +23 -18
- package/src/og/terrain/MapboxTerrain.js +7 -8
- package/src/og/terrain/index.js +4 -4
- package/src/og/utils/objParser.js +227 -0
- package/src/og/utils/shared.js +9 -0
- package/src/og/webgl/Handler.js +1 -3
- package/types/Globe.d.ts +2 -0
- package/types/LonLat.d.ts +20 -1
- package/types/Object3d.d.ts +2 -0
- package/types/Popup.d.ts +1 -1
- package/types/bv/index.d.ts +2 -2
- package/types/camera/PlanetCamera.d.ts +1 -8
- package/types/camera/index.d.ts +2 -2
- package/types/control/GeoImageDragControl.d.ts +1 -1
- package/types/control/LayerAnimation.d.ts +1 -1
- package/types/control/Lighting.d.ts +2 -2
- package/types/control/heightRuler/HeightRulerScene.d.ts +1 -1
- package/types/control/index.d.ts +3 -2
- package/types/control/ruler/RulerScene.d.ts +5 -4
- package/types/control/selection/SelectionScene.d.ts +3 -3
- package/types/control/timeline/TimelineControl.d.ts +10 -0
- package/types/control/timeline/TimelineModel.d.ts +33 -0
- package/types/control/timeline/TimelineView.d.ts +57 -0
- package/types/control/timeline/timelineUtils.d.ts +9 -0
- package/types/ellipsoid/Ellipsoid.d.ts +27 -8
- package/types/ellipsoid/index.d.ts +2 -2
- package/types/entity/Entity.d.ts +3 -3
- package/types/entity/EntityCollection.d.ts +2 -2
- package/types/entity/Label.d.ts +1 -1
- package/types/entity/Polyline.d.ts +1 -0
- package/types/index.d.ts +45 -46
- package/types/layer/CanvasTiles.d.ts +2 -1
- package/types/layer/GeoImage.d.ts +7 -1
- package/types/layer/GeoTexture2d.d.ts +1 -1
- package/types/layer/Vector.d.ts +3 -3
- package/types/layer/XYZ.d.ts +1 -1
- package/types/layer/index.d.ts +9 -9
- package/types/math/Line2.d.ts +1 -1
- package/types/math/Line3.d.ts +1 -1
- package/types/math/index.d.ts +10 -10
- package/types/mercator.d.ts +1 -1
- package/types/quadTree/EPSG4326QuadTreeStrategy.d.ts +3 -0
- package/types/quadTree/EntityCollectionNode.d.ts +1 -1
- package/types/quadTree/index.d.ts +2 -0
- package/types/renderer/Renderer.d.ts +2 -2
- package/types/scene/Axes.d.ts +1 -1
- package/types/scene/SkyBox.d.ts +1 -1
- package/types/scene/index.d.ts +3 -3
- package/types/segment/Segment.d.ts +11 -14
- package/types/shaders/atmos.d.ts +1 -1
- package/types/shaders/billboard.d.ts +1 -1
- package/types/shaders/depth.d.ts +1 -1
- package/types/shaders/label.d.ts +1 -1
- package/types/shaders/pickingMask.d.ts +1 -1
- package/types/shaders/pointCloud.d.ts +1 -1
- package/types/shaders/polyline.d.ts +1 -1
- package/types/shaders/ray.d.ts +1 -1
- package/types/shaders/screenFrame.d.ts +1 -1
- package/types/shaders/skybox.d.ts +1 -1
- package/types/shaders/toneMapping.d.ts +1 -1
- package/types/terrain/BilTerrain.d.ts +1 -0
- package/types/terrain/EmptyTerrain.d.ts +13 -2
- package/types/terrain/GlobusTerrain.d.ts +2 -1
- package/types/terrain/MapboxTerrain.d.ts +1 -3
- package/types/terrain/index.d.ts +4 -4
- package/types/ui/Button.d.ts +1 -1
- package/types/ui/ButtonGroup.d.ts +12 -0
- package/types/ui/Dialog.d.ts +2 -2
- package/types/ui/Slider.d.ts +1 -1
- package/types/ui/ToggleButton.d.ts +1 -1
- package/types/ui/View.d.ts +1 -1
- package/types/utils/GeoImageCreator.d.ts +2 -2
- package/types/utils/ImagesCacheManager.d.ts +1 -1
- package/types/utils/Loader.d.ts +1 -1
- package/types/utils/VectorTileCreator.d.ts +1 -1
- package/types/utils/objParser.d.ts +8 -0
- package/types/utils/shared.d.ts +6 -0
- package/types/webgl/Handler.d.ts +2 -2
- package/src/og/index.core.js +0 -116
- package/src/og/index.webgl.js +0 -17
- package/types/index.core.d.ts +0 -65
- 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 ||
|
|
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.
|
|
150
|
+
this.planet.ellipsoid.cartesianToLonLatRes(this.eye, this._lonLat);
|
|
155
151
|
if (Math.abs(this._lonLat.lat) <= mercator.MAX_LAT) {
|
|
156
|
-
this.
|
|
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
|
-
|
|
167
|
-
|
|
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.
|
|
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
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
cam.
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
cam
|
|
62
|
-
cam.
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
var cam = this.renderer.activeCamera;
|
|
85
|
-
if (this.renderer.events.isKeyPressed(input.KEY_SHIFT)) {
|
|
86
|
-
cam.
|
|
87
|
-
} else {
|
|
88
|
-
cam.
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
cam.
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
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 {
|
|
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
|
|
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
|
-
|
|
179
|
+
|
|
180
|
+
this._cornersLayer.setEntities(this._cornerEntity);
|
|
177
181
|
}
|
|
178
182
|
|
|
179
183
|
init() {
|
package/src/og/control/index.js
CHANGED
|
@@ -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
|
};
|