@openglobus/og 0.17.1 → 0.17.2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openglobus/og",
3
- "version": "0.17.1",
3
+ "version": "0.17.2",
4
4
  "description": "[OpenGlobus](https://www.openglobus.org/) is a javascript library designed to display interactive 3d maps and planets with map tiles, imagery and vector data, markers and 3d objects. It uses the WebGL technology, open source and completely free.",
5
5
  "directories": {
6
6
  "example": "./sandbox"
@@ -34,10 +34,9 @@ class PlanetCamera extends Camera {
34
34
  */
35
35
  constructor(planet, options) {
36
36
  super(planet.renderer, {
37
- frustums: [
38
- [[1, 100], [100, 1000 + 7.0], [1000 - 7.0, 1e6 + 17], [1e6 - 17, 1e9]]
39
- ], //[[1, 1e3 + 100], [1e3, 1e6 + 10000], [1e6, 1e9]]*/
40
- ...options
37
+ ...options,
38
+ frustums: options.frustums || [[1, 100 + 0.075], [100, 1000 + 0.075], [1000, 1e6 + 10000], [1e6, 1e9]],
39
+ //[[1, 1e3 + 100], [1e3, 1e6 + 10000], [1e6, 1e9]]*/
41
40
  }
42
41
  );
43
42
  /**
@@ -15,11 +15,11 @@ import { Control } from "./Control.js";
15
15
  class KeyboardNavigation extends Control {
16
16
  constructor(options) {
17
17
  options = options || {};
18
- super(options);
18
+ super({ name: "KeyboardNavigation", ...options });
19
19
  this.step = options.step || 250;
20
20
  }
21
21
 
22
- oninit() {
22
+ onactivate() {
23
23
  this.renderer.events.on("keypress", input.KEY_PGUP, this.onCameraMoveForward, this);
24
24
  this.renderer.events.on("keypress", input.KEY_PGDN, this.onCameraMoveBackward, this);
25
25
  this.renderer.events.on("keypress", input.KEY_PLUS, this.onCameraMoveForward, this);
@@ -38,6 +38,29 @@ class KeyboardNavigation extends Control {
38
38
  this.renderer.events.on("keypress", input.KEY_N, this.onCameraRollNorth, this);
39
39
  }
40
40
 
41
+ ondeactivate() {
42
+ this.renderer.events.off("keypress", input.KEY_PGUP, this.onCameraMoveForward);
43
+ this.renderer.events.off("keypress", input.KEY_PGDN, this.onCameraMoveBackward);
44
+ this.renderer.events.off("keypress", input.KEY_PLUS, this.onCameraMoveForward);
45
+ this.renderer.events.off("keypress", input.KEY_EQUALS, this.onCameraMoveForward);
46
+ this.renderer.events.off("keypress", input.KEY_MINUS, this.onCameraMoveBackward);
47
+ this.renderer.events.off("keypress", input.KEY_W, this.onCameraMoveForward);
48
+ this.renderer.events.off("keypress", input.KEY_S, this.onCameraMoveBackward);
49
+ this.renderer.events.off("keypress", input.KEY_A, this.onCameraStrifeLeft);
50
+ this.renderer.events.off("keypress", input.KEY_D, this.onCameraStrifeRight);
51
+ this.renderer.events.off("keypress", input.KEY_UP, this.onCameraLookUp);
52
+ this.renderer.events.off("keypress", input.KEY_DOWN, this.onCameraLookDown);
53
+ this.renderer.events.off("keypress", input.KEY_LEFT, this.onCameraLookLeft);
54
+ this.renderer.events.off("keypress", input.KEY_RIGHT, this.onCameraLookRight);
55
+ this.renderer.events.off("keypress", input.KEY_Q, this.onCameraRollLeft);
56
+ this.renderer.events.off("keypress", input.KEY_E, this.onCameraRollRight);
57
+ this.renderer.events.off("keypress", input.KEY_N, this.onCameraRollNorth);
58
+ }
59
+
60
+ oninit() {
61
+ this.activate();
62
+ }
63
+
41
64
  onCameraMoveForward(event) {
42
65
  var cam = this.renderer.activeCamera;
43
66
  cam.slide(0, 0, -cam._lonLat.height / this.step);
@@ -114,22 +137,22 @@ class KeyboardNavigation extends Control {
114
137
 
115
138
  // from CompassButton._onClick()
116
139
  onCameraRollNorth(event) {
117
- let c = this.planet.getCartesianFromPixelTerrain(this.renderer.handler.getCenter());
118
- if (c) {
119
- this.planet.flyCartesian(
120
- c.normal().scaleTo(c.length() + c.distance(this.planet.camera.eye)),
121
- null,
122
- null,
123
- 0,
124
- null,
125
- null,
126
- () => {
127
- this.planet.camera.look(c);
128
- }
129
- );
130
- } else {
131
- this.planet.flyCartesian(this.planet.camera.eye);
132
- }
140
+ let c = this.planet.getCartesianFromPixelTerrain(this.renderer.handler.getCenter());
141
+ if (c) {
142
+ this.planet.flyCartesian(
143
+ c.normal().scaleTo(c.length() + c.distance(this.planet.camera.eye)),
144
+ null,
145
+ null,
146
+ 0,
147
+ null,
148
+ null,
149
+ () => {
150
+ this.planet.camera.look(c);
151
+ }
152
+ );
153
+ } else {
154
+ this.planet.flyCartesian(this.planet.camera.eye);
155
+ }
133
156
  }
134
157
 
135
158
  onCameraRollLeft(event) {
@@ -111,8 +111,8 @@ class Geometry {
111
111
  var t = Geometry.getType(geometryObj.type);
112
112
 
113
113
  if (t === GeometryType.POINT) {
114
- let lon = res.coordinates[0],
115
- lat = res.coordinates[1];
114
+ let lon = geometryObj.coordinates[0],
115
+ lat = geometryObj.coordinates[1];
116
116
  res.southWest.lon = lon;
117
117
  res.southWest.lat = lat;
118
118
  res.northEast.lon = lon;
@@ -1,37 +1,100 @@
1
1
  'use strict';
2
2
 
3
3
  import { input } from './input.js';
4
+ import { stamp } from "../utils/shared.js";
5
+
6
+ const STAMP_SPACER = "_";
4
7
 
5
8
  class KeyboardHandler {
6
9
 
7
10
  constructor() {
8
- var _currentlyPressedKeys = {};
9
- var _pressedKeysCallbacks = {};
10
- var _unpressedKeysCallbacks = {};
11
- var _charkeysCallbacks = {};
12
- var _that = this;
13
- var _anykeyCallback = null;
14
- var _event = null;
11
+ let _currentlyPressedKeys = {};
12
+ let _pressedKeysCallbacks = {};
13
+ let _unpressedKeysCallbacks = {};
14
+ let _charkeysCallbacks = {};
15
+
16
+ let _that = this;
17
+ let _anykeyCallback = null;
18
+ let _event = null;
15
19
 
16
- var _active = true;
20
+ let _active = true;
21
+
22
+ let _stampCache = {};
17
23
 
18
24
  if (KeyboardHandler.prototype._instance) {
19
25
  return KeyboardHandler.prototype._instance;
20
26
  } else {
21
27
  KeyboardHandler.prototype._instance = this;
22
28
 
23
- document.onkeydown = function (event) { _event = event; _active && _that.handleKeyDown(); };
24
- document.onkeyup = function (event) { _event = event; _active && _that.handleKeyUp(); };
29
+ document.onkeydown = function (event) {
30
+ _event = event;
31
+ _active && _that.handleKeyDown();
32
+ };
33
+ document.onkeyup = function (event) {
34
+ _event = event;
35
+ _active && _that.handleKeyUp();
36
+ };
25
37
  }
26
38
 
27
39
  var _sortByPriority = function (a, b) {
28
40
  return a.priority < b.priority;
29
41
  };
30
42
 
31
- this.removeEvent = function (events, callback) {
32
- //
33
- // TODO:...
34
- //
43
+ this.getcurrentlyPressedKeys = function () {
44
+ return _currentlyPressedKeys;
45
+ }
46
+
47
+ this.getPressedKeysCallbacks = function () {
48
+ return _pressedKeysCallbacks;
49
+ }
50
+
51
+ this.getUnpressedKeysCallbacks = function () {
52
+ return _unpressedKeysCallbacks;
53
+ }
54
+
55
+ this.getCharkeysCallbacks = function () {
56
+ return _charkeysCallbacks;
57
+ }
58
+
59
+ this.removeEvent = function (event, keyCode, callback) {
60
+ let st = this._getStamp(event, keyCode, callback._openglobus_id);
61
+ if (callback._openglobus_id && _stampCache[st]) {
62
+ _stampCache[st] = null;
63
+ delete _stampCache[st];
64
+
65
+ if (event === "keypress") {
66
+ this._removeCallback(_pressedKeysCallbacks[keyCode], callback);
67
+ } else if (event === "keyfree") {
68
+ this._removeCallback(_unpressedKeysCallbacks[keyCode], callback);
69
+ } else if (event === "charkeypress") {
70
+ this._removeCallback(_charkeysCallbacks[keyCode], callback);
71
+ }
72
+ }
73
+ };
74
+
75
+ this._removeCallback = function (handlers, callback) {
76
+ for (let i = 0; i < handlers.length; i++) {
77
+ if (handlers[i].callback._openglobus_id === callback._openglobus_id) {
78
+ handlers.splice(i, 1);
79
+ }
80
+ }
81
+ };
82
+
83
+ this._getStamp = function (name, keyCode, ogid) {
84
+ return `${name}${STAMP_SPACER}${keyCode}${STAMP_SPACER}${ogid}`;
85
+ };
86
+
87
+ this._stamp = function (name, keyCode, obj) {
88
+ let ogid = stamp(obj);
89
+
90
+ let st = this._getStamp(name, keyCode, ogid);
91
+
92
+ if (!_stampCache[st]) {
93
+ _stampCache[st] = ogid;
94
+ return true;
95
+ }
96
+
97
+ return false;
35
98
  };
36
99
 
37
100
  this.setActivity = function (activity) {
@@ -40,9 +103,13 @@ class KeyboardHandler {
40
103
 
41
104
  this.releaseKeys = function () {
42
105
  _currentlyPressedKeys = {};
43
- }
106
+ };
107
+
108
+ this.addEvent = function (event, keyCode, callback, sender, priority) {
109
+
110
+ // Event is already bound with the callback
111
+ if (!this._stamp(event, keyCode, callback)) return;
44
112
 
45
- this.addEvent = function (event, sender, callback, keyCode, priority) {
46
113
  if (priority === undefined) {
47
114
  priority = 1600;
48
115
  }
@@ -115,7 +182,7 @@ class KeyboardHandler {
115
182
  this.handleEvents = function () {
116
183
  for (let pk in _pressedKeysCallbacks) {
117
184
  if (_currentlyPressedKeys[pk]) {
118
- var cpk = _pressedKeysCallbacks[pk];
185
+ let cpk = _pressedKeysCallbacks[pk];
119
186
  for (let i = 0; i < cpk.length; i++) {
120
187
  cpk[i].callback.call(cpk[i].sender, _event);
121
188
  }
@@ -256,33 +256,19 @@ class RendererEvents extends Events {
256
256
  }
257
257
  }
258
258
 
259
- /**
260
- * Set render event callback.
261
- * @public
262
- * @param {string} name - Event name
263
- * @param {eventCallback} callback - Callback function
264
- * @param {number} [key] - Key code from og.input
265
- * @param {*} sender - Callback context
266
- * @param {number} [priority] - Event callback priority
267
- */
268
259
  on(name, p0, p1, p2, p3) {
269
260
  if (name === "keypress" || name === "charkeypress" || name === "keyfree") {
270
- this._keyboardHandler.addEvent(name, p2, p1, p0, p3);
261
+ this._keyboardHandler.addEvent(name, p0, p1, p2, p3);
271
262
  } else {
272
263
  super.on(name, p0, p1, p2);
273
264
  }
274
265
  }
275
266
 
276
- /**
277
- * TODO: DOESNT WORK!!!
278
- * @param {any} name
279
- * @param {any} callback
280
- */
281
- off(name, callback) {
267
+ off(name, p1, p2) {
282
268
  if (name === "keypress" || name === "charkeypress" || name === "keyfree") {
283
- this._keyboardHandler.removeEvent(name, callback);
269
+ this._keyboardHandler.removeEvent(name, p1, p2);
284
270
  } else {
285
- super.off(name, callback);
271
+ super.off(name, p1);
286
272
  }
287
273
  }
288
274
 
@@ -117,8 +117,6 @@ export class Planet extends RenderNode {
117
117
  constructor(options = {}) {
118
118
  super(options.name);
119
119
 
120
- this._cameraFrustums = options.frustums || [[1, 100], [100, 1000 + 7.0], [1000 - 7.0, 1e6 + 17], [1e6 - 17, 1e9]];
121
-
122
120
  /**
123
121
  * @public
124
122
  * @type {Ellipsoid}
@@ -205,7 +203,7 @@ export class Planet extends RenderNode {
205
203
  * @type {PlanetCamera}
206
204
  */
207
205
  this.camera = new PlanetCamera(this, {
208
- frustums: this._cameraFrustums,
206
+ frustums: options.frustums,
209
207
  eye: new Vec3(25000000, 0, 0),
210
208
  look: Vec3.ZERO,
211
209
  up: Vec3.NORTH,
@@ -189,7 +189,7 @@ class TextureAtlas {
189
189
  * @public
190
190
  */
191
191
  createTexture(img, internalFormat) {
192
- if (this._handler) {
192
+ if (this._handler && this._handler.gl) {
193
193
  this._handler.gl.deleteTexture(this.texture);
194
194
  if (img) {
195
195
  this.canvas.resize(img.width, img.height);
@@ -1026,6 +1026,8 @@ class Handler {
1026
1026
  destroy() {
1027
1027
  let gl = this.gl;
1028
1028
 
1029
+ this.resizeObserver.disconnect();
1030
+ this.intersectionObserver.disconnect();
1029
1031
  this.stop();
1030
1032
 
1031
1033
  //
@@ -1,8 +1,15 @@
1
1
  export class KeyboardHandler {
2
- removeEvent: (events: any, callback: any) => void;
2
+ getcurrentlyPressedKeys: () => {};
3
+ getPressedKeysCallbacks: () => {};
4
+ getUnpressedKeysCallbacks: () => {};
5
+ getCharkeysCallbacks: () => {};
6
+ removeEvent: (event: any, keyCode: any, callback: any) => void;
7
+ _removeCallback: (handlers: any, callback: any) => void;
8
+ _getStamp: (name: any, keyCode: any, ogid: any) => string;
9
+ _stamp: (name: any, keyCode: any, obj: any) => boolean;
3
10
  setActivity: (activity: any) => void;
4
11
  releaseKeys: () => void;
5
- addEvent: (event: any, sender: any, callback: any, keyCode: any, priority: any) => void;
12
+ addEvent: (event: any, keyCode: any, callback: any, sender: any, priority: any) => void;
6
13
  isKeyPressed: (keyCode: any) => any;
7
14
  handleKeyDown: () => void;
8
15
  handleKeyUp: () => void;
@@ -170,22 +170,8 @@ export class RendererEvents extends Events {
170
170
  * @public
171
171
  */
172
172
  public handleEvents(): void;
173
- /**
174
- * Set render event callback.
175
- * @public
176
- * @param {string} name - Event name
177
- * @param {eventCallback} callback - Callback function
178
- * @param {number} [key] - Key code from og.input
179
- * @param {*} sender - Callback context
180
- * @param {number} [priority] - Event callback priority
181
- */
182
- public on(name: string, p0: any, p1: any, p2: any, p3: any): void;
183
- /**
184
- * TODO: DOESNT WORK!!!
185
- * @param {any} name
186
- * @param {any} callback
187
- */
188
- off(name: any, callback: any): void;
173
+ on(name: any, p0: any, p1: any, p2: any, p3: any): void;
174
+ off(name: any, p1: any, p2: any): void;
189
175
  /**
190
176
  * Check key is pressed.
191
177
  * @public
@@ -17,7 +17,6 @@
17
17
  */
18
18
  export class Planet extends RenderNode {
19
19
  constructor(options?: {});
20
- _cameraFrustums: any;
21
20
  /**
22
21
  * @public
23
22
  * @type {Ellipsoid}