@openglobus/og 0.13.8 → 0.13.10

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 (85) hide show
  1. package/README.md +1 -1
  2. package/css/og.css +388 -129
  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 +20 -19
  9. package/src/og/Globe.js +15 -16
  10. package/src/og/Object3d.js +33 -0
  11. package/src/og/control/GeoImageDragControl.js +102 -75
  12. package/src/og/control/LayerAnimation.js +306 -38
  13. package/src/og/control/LayerSwitcher.js +506 -159
  14. package/src/og/control/Lighting.js +27 -27
  15. package/src/og/control/RulerSwitcher.js +69 -0
  16. package/src/og/control/UIhelpers.js +146 -0
  17. package/src/og/control/index.js +3 -1
  18. package/src/og/control/ruler/RulerScene.js +6 -2
  19. package/src/og/control/visibleExtent/Segment.js +2 -1
  20. package/src/og/ellipsoid/wgs84.js +1 -1
  21. package/src/og/entity/LabelHandler.js +5 -2
  22. package/src/og/entity/LabelWorker.js +38 -53
  23. package/src/og/layer/BaseGeoImage.js +347 -312
  24. package/src/og/layer/CanvasTiles.js +312 -290
  25. package/src/og/layer/GeoImage.js +222 -214
  26. package/src/og/layer/GeoVideo.js +291 -291
  27. package/src/og/layer/Layer.js +71 -30
  28. package/src/og/layer/Material.js +109 -109
  29. package/src/og/layer/Vector.js +1 -0
  30. package/src/og/layer/XYZ.js +20 -12
  31. package/src/og/light/LightSource.js +364 -363
  32. package/src/og/math.js +2 -2
  33. package/src/og/quadTree/Node.js +7 -5
  34. package/src/og/renderer/Renderer.js +1 -1
  35. package/src/og/scene/Planet.js +103 -42
  36. package/src/og/segment/Segment.js +34 -56
  37. package/src/og/segment/Slice.js +1 -1
  38. package/src/og/shaders/drawnode.js +1 -1
  39. package/src/og/terrain/GlobusTerrain.js +31 -20
  40. package/src/og/terrain/MapboxTerrain.js +1 -1
  41. package/src/og/utils/BaseWorker.js +46 -0
  42. package/src/og/utils/GeoImageCreator.js +164 -161
  43. package/src/og/utils/Loader.js +60 -33
  44. package/src/og/utils/NormalMapCreator.js +403 -412
  45. package/src/og/utils/PlainSegmentWorker.js +29 -55
  46. package/src/og/utils/TerrainWorker.js +572 -589
  47. package/src/og/utils/functionComposition.js +13 -0
  48. package/src/og/webgl/Handler.js +42 -41
  49. package/types/Object3d.d.ts +1 -0
  50. package/types/camera/PlanetCamera.d.ts +4 -0
  51. package/types/control/GeoImageDragControl.d.ts +2 -0
  52. package/types/control/LayerAnimation.d.ts +73 -0
  53. package/types/control/LayerSwitcher.d.ts +55 -11
  54. package/types/control/MouseNavigation.d.ts +1 -0
  55. package/types/control/MouseWheelZoomControl.d.ts +1 -0
  56. package/types/control/Sun.d.ts +1 -0
  57. package/types/control/TouchNavigation.d.ts +1 -0
  58. package/types/control/UIhelpers.d.ts +13 -0
  59. package/types/control/index.d.ts +2 -1
  60. package/types/entity/LabelHandler.d.ts +2 -0
  61. package/types/entity/LabelWorker.d.ts +5 -7
  62. package/types/layer/BaseGeoImage.d.ts +9 -1
  63. package/types/layer/CanvasTiles.d.ts +5 -1
  64. package/types/layer/GeoImage.d.ts +1 -0
  65. package/types/layer/GeoTexture2d.d.ts +1 -0
  66. package/types/layer/Layer.d.ts +5 -1
  67. package/types/layer/Vector.d.ts +7 -0
  68. package/types/layer/WMS.d.ts +1 -0
  69. package/types/layer/XYZ.d.ts +8 -6
  70. package/types/math.d.ts +1 -1
  71. package/types/quadTree/EntityCollectionNode.d.ts +7 -0
  72. package/types/quadTree/Node.d.ts +1 -2
  73. package/types/renderer/Renderer.d.ts +1 -1
  74. package/types/renderer/RendererEvents.d.ts +16 -0
  75. package/types/scene/Planet.d.ts +19 -4
  76. package/types/segment/SegmentLonLat.d.ts +2 -0
  77. package/types/terrain/BilTerrain.d.ts +6 -0
  78. package/types/terrain/GlobusTerrain.d.ts +7 -0
  79. package/types/terrain/MapboxTerrain.d.ts +8 -0
  80. package/types/utils/BaseWorker.d.ts +14 -0
  81. package/types/utils/Loader.d.ts +3 -1
  82. package/types/utils/PlainSegmentWorker.d.ts +4 -6
  83. package/types/utils/TerrainWorker.d.ts +4 -6
  84. package/types/utils/functionComposition.d.ts +5 -0
  85. package/types/webgl/Handler.d.ts +4 -1
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@openglobus/og",
3
- "version": "0.13.8",
4
- "description": "[OpenGlobus](http://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.",
3
+ "version": "0.13.10",
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"
7
7
  },
@@ -9,16 +9,17 @@
9
9
  "style": "./css/og.css",
10
10
  "types": "./types/index.d.ts",
11
11
  "scripts": {
12
- "api": "jsdoc -t ./jsdoc -r ./src/ -c ./jsdoc/conf.json -d ./api",
12
+ "api": "jsdoc -r ./src/ -c ./jsdoc.conf.json -d ./api",
13
13
  "serve": "ws",
14
14
  "build": "rollup -c",
15
15
  "webgl": "rollup -c --environment entry:webgl",
16
16
  "core": "rollup -c --environment entry:core",
17
- "test": "jest --env=jsdom",
17
+ "test": "jest --env=jsdom --runInBand --ci --coverage=false",
18
18
  "test_watch": "jest --env=jsdom --watch",
19
19
  "lint": "eslint -c ./.eslintrc.js src/og",
20
20
  "generate_types": "rm -rf types; tsc src/**/*.js --declaration --allowJs --emitDeclarationOnly --outDir types",
21
- "compile_js_as_ts": "tsc src/og/index.js --AllowJs --checkJs --outDir dist/@openglobus/src/"
21
+ "compile_js_as_ts": "tsc src/og/index.js --AllowJs --checkJs --outDir dist/@openglobus/src/",
22
+ "font": "node ./fonts/index.js"
22
23
  },
23
24
  "repository": {
24
25
  "type": "git",
@@ -30,7 +31,7 @@
30
31
  "url": "https://github.com/openglobus/openglobus/issues",
31
32
  "email": "mgevlich@gmail.com"
32
33
  },
33
- "homepage": "http://www.openglobus.org",
34
+ "homepage": "https://www.openglobus.org",
34
35
  "exports": {
35
36
  ".": "./src/og/index.js",
36
37
  "./layer": "./src/og/layer/index.js",
@@ -43,24 +44,24 @@
43
44
  "./css/og.css": "./css/og.css"
44
45
  },
45
46
  "devDependencies": {
46
- "@babel/preset-env": "^7.16.11",
47
+ "@babel/preset-env": "^7.18.9",
47
48
  "@rollup/plugin-json": "^4.1.0",
48
- "@types/jest": "^27.4.0",
49
- "eslint": "^8.7.0",
49
+ "@types/jest": "^28.1.6",
50
+ "eslint": "^8.20.0",
50
51
  "jaguarjs-jsdoc": "^1.1.0",
51
- "jest": "^27.4.7",
52
- "jest-canvas-mock": "^2.3.1",
52
+ "jest": "^28.1.3",
53
+ "jest-canvas-mock": "^2.4.0",
54
+ "jest-environment-jsdom": "^28.1.3",
53
55
  "jest-webgl-canvas-mock": "^0.2.3",
54
- "jsdoc": "^3.6.10",
55
- "lint-staged": "^12.3.1",
56
- "local-web-server": "^5.1.1",
57
- "msdf-bmfont-xml": "^2.5.4",
58
- "postcss": "^8.4.5",
59
- "prettier": "^2.5.1",
60
- "rollup": "^2.66.1",
56
+ "jsdoc": "^3.6.11",
57
+ "lint-staged": "^13.0.3",
58
+ "local-web-server": "^5.2.1",
59
+ "postcss": "^8.4.14",
60
+ "prettier": "^2.7.1",
61
+ "rollup": "^2.77.1",
61
62
  "rollup-plugin-postcss": "^4.0.2",
62
63
  "rollup-plugin-terser": "^7.0.2",
63
- "typescript": "^4.5.5"
64
+ "typescript": "^4.7.4"
64
65
  },
65
66
  "lint-staged": {
66
67
  "*.{js,ts}": [
package/src/og/Globe.js CHANGED
@@ -69,7 +69,7 @@ const PLANET_NAME_PREFIX = "globus_planet_";
69
69
  * @param {Number} [options.maxEqualZoomAltitude=15000000.0] - Maximal altitude since segments on the screen bacame the same zoom level
70
70
  * @param {Number} [options.minEqualZoomAltitude=10000.0] - Minimal altitude since segments on the screen bacame the same zoom level
71
71
  * @param {Number} [options.minEqualZoomCameraSlope=0.8] - Minimal camera slope above te globe where segments on the screen bacame the same zoom level
72
- * @param {Number} [options.loadingBatchSize=12] -
72
+ * @param {Number} [options.loadingBatchSize=12] -
73
73
  */
74
74
 
75
75
  class Globe {
@@ -103,15 +103,6 @@ class Globe {
103
103
  this.div.appendChild(this._canvas);
104
104
  this.div.classList.add("ogViewport");
105
105
 
106
- document.addEventListener("visibilitychange", () => {
107
- if (document.visibilityState === 'visible') {
108
- this.renderer.handler.start();
109
- this.renderer && this.renderer.resize();
110
- } else {
111
- this.renderer.handler.stop();
112
- }
113
- });
114
-
115
106
  function _disableWheel(e) {
116
107
  e.preventDefault();
117
108
  }
@@ -137,12 +128,13 @@ class Globe {
137
128
  context: {
138
129
  alpha: false,
139
130
  antialias: false,
140
- powerPreference: "high-performance"
131
+ powerPreference: "high-performance",
132
+ premultipliedAlpha: true
141
133
  }
142
134
  }), {
143
- autoActivate: false,
144
- backgroundColor: createColorRGB(options.backgroundColor, new Vec3(115 / 255, 203 / 255, 249 / 255))
145
- }
135
+ autoActivate: false,
136
+ backgroundColor: createColorRGB(options.backgroundColor, new Vec3(115 / 255, 203 / 255, 249 / 255))
137
+ }
146
138
  );
147
139
  this.renderer.initialize();
148
140
  this.renderer.div = this.div;
@@ -190,9 +182,16 @@ class Globe {
190
182
  });
191
183
  }
192
184
 
193
- // Attach terrain provider
185
+ // Attach terrain provider (can be one object or array)
194
186
  if (options.terrain) {
195
- this.planet.setTerrain(options.terrain);
187
+ if (Array.isArray(options.terrain)) {
188
+ this.planet.setTerrain(options.terrain[0]); // If array get the terrain from 1st element
189
+ this.planet._terrainPool = options.terrain;
190
+ } else {
191
+ this.planet.setTerrain(options.terrain);
192
+ this.planet._terrainPool = [options.terrain];
193
+ }
194
+
196
195
  } else {
197
196
  this.planet.setTerrain(new EmptyTerrain());
198
197
  }
@@ -31,6 +31,10 @@ class Object3d {
31
31
  this._normals = data.normals || [];
32
32
  } else {
33
33
  this._normals = Object3d.getNormals(this._vertices);
34
+ this._indexes = new Array(this._vertices.length);
35
+ for (let i = 0, len = this._indexes.length; i < len; i++) {
36
+ this._indexes[i] = i;
37
+ }
34
38
  }
35
39
  }
36
40
 
@@ -379,6 +383,35 @@ class Object3d {
379
383
  ]
380
384
  });
381
385
  }
386
+
387
+ static createArrow(back = 0.0, height = 2.1, front = -15) {
388
+ return new Object3d({
389
+ vertices: [
390
+ 0, height, 0,
391
+ 7, 0, 6,
392
+ 0, 0, front,
393
+
394
+ 0, 0, back,
395
+ 7, 0, 6,
396
+ 0, height, 0,
397
+
398
+ -7, 0, 6,
399
+ 0, 0, back,
400
+ 0, height, 0,
401
+
402
+ -7, 0, 6,
403
+ 0, height, 0,
404
+ 0, 0, front,
405
+
406
+ -7, 0, 6,
407
+ 0, 0, front,
408
+ 0, 0, back,
409
+ 0, 0, back,
410
+ 0, 0, front,
411
+ 7, 0, 6
412
+ ]
413
+ });
414
+ }
382
415
  }
383
416
 
384
417
  export { Object3d };
@@ -1,76 +1,103 @@
1
- /**
2
- * @module og/control/GeoImageDragControl
3
- */
4
-
5
- 'use strict';
6
-
7
- import { Control } from './Control.js';
8
- import { BaseGeoImage } from '../layer/BaseGeoImage.js';
9
-
10
- class GeoImageDragControl extends Control {
11
- constructor(options) {
12
- super(options);
13
-
14
- options = options || {};
15
-
16
- this._cornerIndex = -1;
17
- this._catchCorner = false;
18
-
19
- }
20
-
21
- oninit() {
22
- let p = this.planet;
23
-
24
- p.events.on('layeradd', function (e) {
25
- this._bindLayer(e);
26
- }, this);
27
-
28
- for (let i = 0; i < p.layers.length; i++) {
29
- if (p.layers[i] instanceof BaseGeoImage) {
30
- this._bindLayer(p.layers[i]);
31
- }
32
- }
33
- }
34
-
35
- _bindLayer(layer) {
36
- if (layer instanceof BaseGeoImage) {
37
-
38
- var p = this.planet;
39
-
40
- layer.events.on('mousemove', function (ms) {
41
- if (this._active) {
42
- if (this._catchCorner) {
43
- var corners = layer.getCornersLonLat();
44
- corners[this._cornerIndex] = p.getLonLatFromPixelTerrain(ms, true);
45
- layer.setCornersLonLat(corners);
46
- } else {
47
- this._cornerIndex = -1;
48
- for (var i = 0; i < layer._cornersWgs84.length; i++) {
49
- var ground = p.getLonLatFromPixelTerrain(ms, true);
50
- if (ground && p.ellipsoid.getGreatCircleDistance(layer._cornersWgs84[i], ground) / p.getDistanceFromPixel(ms, true) <= 0.05) {
51
- this._cornerIndex = i;
52
- break;
53
- }
54
- }
55
- }
56
- }
57
- }, this);
58
-
59
- layer.events.on('ldown', function (ms) {
60
- if (this._active && this._cornerIndex != -1) {
61
- this._catchCorner = true;
62
- ms.renderer.controls.mouseNavigation.deactivate();
63
- }
64
- }, this);
65
-
66
- layer.events.on('lup', function (ms) {
67
- if (this._active) {
68
- this._catchCorner = false;
69
- ms.renderer.controls.mouseNavigation.activate();
70
- }
71
- }, this);
72
- }
73
- }
74
- }
75
-
1
+ /**
2
+ * @module og/control/GeoImageDragControl
3
+ */
4
+
5
+ 'use strict';
6
+
7
+ import { Control } from './Control.js';
8
+ import { BaseGeoImage } from '../layer/BaseGeoImage.js';
9
+ import { elementFactory, btnClickHandler } from "./UIhelpers.js";
10
+
11
+ class GeoImageDragControl extends Control {
12
+ constructor(options = {}) {
13
+ super(options);
14
+ this._cornerIndex = -1;
15
+ this._catchCorner = false;
16
+ }
17
+
18
+ oninit() {
19
+ let p = this.planet;
20
+ this.createDraggerButton();
21
+
22
+ p.events.on('layeradd', function (e) {
23
+ this._bindLayer(e);
24
+ }, this);
25
+
26
+ for (let i = 0; i < p.layers.length; i++) {
27
+ if (p.layers[i] instanceof BaseGeoImage) {
28
+ this._bindLayer(p.layers[i]);
29
+ }
30
+ }
31
+ btnClickHandler('og-geo-image-dragger-menu-btn', null, null, '#og-geo-image-dragger-menu-icon'); // btn_id, dialog_id, dialog_selector, icon_id
32
+ }
33
+
34
+ // Create a button to activate-deactivate control
35
+ createDraggerButton() {
36
+ let btn = elementFactory('div', {
37
+ id: 'og-geo-image-dragger-menu-btn',
38
+ class: 'og-geo-image-dragger og-menu-btn og-OFF'
39
+ },
40
+ elementFactory('div', { id: 'og-geo-image-dragger-menu-icon', class: 'og-icon-holder' }));
41
+ this.renderer.div.appendChild(btn);
42
+ }
43
+
44
+ _bindLayer(layer) {
45
+ if (layer instanceof BaseGeoImage) { // if the layer is a geoImage layer
46
+
47
+ var p = this.planet;
48
+
49
+ layer.events.on('mousemove', function (ms) {
50
+ var btn = document.getElementById('og-geo-image-dragger-menu-btn');
51
+ var btn_off = btn.classList.contains('og-OFF');
52
+ if (this._active && !btn_off) { // active layer and button ON
53
+ if (this._catchCorner) {// mouse is catching a corner
54
+ var corners = layer.getCornersLonLat();
55
+ corners[this._cornerIndex] = p.getLonLatFromPixelTerrain(ms, true);
56
+ layer.setCornersLonLat(corners);
57
+ } else { // mouse isn't catching
58
+ this._cornerIndex = -1;
59
+ for (var i = 0; i < layer._cornersWgs84.length; i++) {
60
+ var ground = p.getLonLatFromPixelTerrain(ms, true);
61
+ // mouse is near
62
+ if (ground && p.ellipsoid.getGreatCircleDistance(layer._cornersWgs84[i], ground) / p.getDistanceFromPixel(ms, true) <= 0.05) {
63
+ this._cornerIndex = i;
64
+ document.body.style.cursor = 'move';
65
+ break;
66
+ // mouse is far
67
+ } else {
68
+ document.body.style.cursor = 'auto';
69
+
70
+ }
71
+ }
72
+ }
73
+ }
74
+
75
+ layer.events.on("mouseleave", function () {
76
+ document.body.style.cursor = 'auto';
77
+ });
78
+
79
+ }, this);
80
+
81
+ layer.events.on('ldown', function (ms) {
82
+ if (this._active && this._cornerIndex !== -1) {
83
+ this._catchCorner = true;
84
+ ms.renderer.controls.mouseNavigation.deactivate();
85
+ }
86
+ }, this);
87
+
88
+ layer.events.on('lup', function (ms) {
89
+ if (this._active) {
90
+ this._catchCorner = false;
91
+ ms.renderer.controls.mouseNavigation.activate();
92
+ }
93
+ }, this);
94
+
95
+ layer.events.on('rdblclick', function () {
96
+ alert(layer.getID());
97
+ })
98
+
99
+ }
100
+ }
101
+ }
102
+
76
103
  export { GeoImageDragControl };