itowns 2.36.2 → 2.38.1

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 (122) hide show
  1. package/CONTRIBUTING.md +30 -17
  2. package/README.md +12 -1
  3. package/changelog.md +138 -0
  4. package/dist/debug.js +1 -1
  5. package/dist/debug.js.LICENSE.txt +2 -2
  6. package/dist/debug.js.map +1 -1
  7. package/dist/itowns.js +1 -1
  8. package/dist/itowns.js.LICENSE.txt +2 -2
  9. package/dist/itowns.js.map +1 -1
  10. package/dist/itowns_widgets.js +2 -0
  11. package/dist/itowns_widgets.js.map +1 -0
  12. package/examples/config.json +28 -6
  13. package/examples/css/example.css +21 -1
  14. package/examples/css/widgets.css +360 -0
  15. package/examples/geoid_geoidLayer.html +102 -0
  16. package/examples/images/code-logo.svg +43 -0
  17. package/examples/index.html +5 -5
  18. package/examples/itowns-potree.html +252 -0
  19. package/examples/js/GUI/GuiTools.js +17 -0
  20. package/examples/mars.html +0 -1
  21. package/examples/misc_orthographic_camera.html +7 -19
  22. package/examples/source_file_from_fetched_data.html +90 -0
  23. package/examples/source_file_from_format.html +85 -0
  24. package/examples/source_file_from_methods.html +87 -0
  25. package/examples/source_file_from_parsed_data.html +104 -0
  26. package/examples/source_file_geojson_raster.html +21 -45
  27. package/examples/source_file_gpx_raster.html +28 -36
  28. package/examples/source_file_kml_raster.html +1 -4
  29. package/examples/source_file_shapefile.html +39 -34
  30. package/examples/source_stream_wfs_25d.html +21 -13
  31. package/examples/source_stream_wfs_3d.html +21 -12
  32. package/examples/source_stream_wfs_raster.html +20 -20
  33. package/examples/vector_tile_3d_mesh.html +155 -0
  34. package/examples/vector_tile_raster_3d.html +0 -5
  35. package/examples/view_25d_map.html +6 -19
  36. package/examples/view_2d_map.html +6 -19
  37. package/examples/view_3d_map.html +106 -81
  38. package/examples/view_immersive.html +13 -14
  39. package/examples/widgets_minimap.html +124 -0
  40. package/examples/widgets_navigation.html +124 -0
  41. package/examples/widgets_scale.html +96 -0
  42. package/examples/widgets_searchbar.html +124 -0
  43. package/lib/Controls/GlobeControls.js +13 -0
  44. package/lib/Controls/PlanarControls.js +11 -43
  45. package/lib/Converter/Feature2Mesh.js +203 -45
  46. package/lib/Converter/convertToTile.js +13 -4
  47. package/lib/Core/3DTiles/C3DTBoundingVolume.js +4 -1
  48. package/lib/Core/Deprecated/Undeprecator.js +1 -1
  49. package/lib/Core/Feature.js +60 -34
  50. package/lib/Core/Geographic/Extent.js +1 -1
  51. package/lib/Core/Geographic/GeoidGrid.js +143 -0
  52. package/lib/Core/MainLoop.js +137 -63
  53. package/lib/Core/Math/Ellipsoid.js +1 -1
  54. package/lib/Core/Prefab/Globe/SkyShader.js +3 -1
  55. package/lib/Core/Prefab/Planar/PlanarLayer.js +3 -1
  56. package/lib/Core/Style.js +1 -1
  57. package/lib/Core/TileGeometry.js +3 -1
  58. package/lib/Core/TileMesh.js +32 -22
  59. package/lib/Core/View.js +81 -15
  60. package/lib/Layer/ElevationLayer.js +6 -2
  61. package/lib/Layer/FeatureGeometryLayer.js +36 -7
  62. package/lib/Layer/GeoidLayer.js +142 -0
  63. package/lib/Layer/GeometryLayer.js +6 -54
  64. package/lib/Layer/InfoLayer.js +1 -1
  65. package/lib/Layer/Layer.js +1 -1
  66. package/lib/Layer/LayerUpdateStrategy.js +1 -1
  67. package/lib/Layer/OrientedImageLayer.js +1 -0
  68. package/lib/Layer/PotreeLayer.js +3 -1
  69. package/lib/Layer/RasterLayer.js +3 -1
  70. package/lib/Layer/ReferencingLayerProperties.js +50 -0
  71. package/lib/Layer/TiledGeometryLayer.js +3 -1
  72. package/lib/Main.js +214 -174
  73. package/lib/MainBundle.js +1 -1
  74. package/lib/Parser/B3dmParser.js +5 -3
  75. package/lib/Parser/GDFParser.js +118 -0
  76. package/lib/Parser/GTXParser.js +92 -0
  77. package/lib/Parser/GeoJsonParser.js +29 -7
  78. package/lib/Parser/ISGParser.js +121 -0
  79. package/lib/Parser/LASParser.js +3 -1
  80. package/lib/Parser/VectorTileParser.js +4 -3
  81. package/lib/Parser/XbilParser.js +1 -1
  82. package/lib/Parser/deprecated/LegacyGLTFLoader.js +1 -1
  83. package/lib/Process/3dTilesProcessing.js +2 -2
  84. package/lib/Process/FeatureProcessing.js +38 -86
  85. package/lib/Process/LayeredMaterialNodeProcessing.js +16 -7
  86. package/lib/Process/ObjectRemovalHelper.js +4 -0
  87. package/lib/Provider/3dTilesProvider.js +2 -7
  88. package/lib/Provider/Fetcher.js +4 -1
  89. package/lib/Provider/TileProvider.js +18 -2
  90. package/lib/Provider/URLBuilder.js +1 -1
  91. package/lib/Renderer/Camera.js +33 -12
  92. package/lib/Renderer/ColorLayersOrdering.js +3 -1
  93. package/lib/Renderer/LayeredMaterial.js +34 -9
  94. package/lib/Renderer/OBB.js +22 -25
  95. package/lib/Renderer/OrientedImageMaterial.js +8 -5
  96. package/lib/Renderer/PointsMaterial.js +6 -6
  97. package/lib/Renderer/RasterTile.js +1 -1
  98. package/lib/Renderer/RenderMode.js +3 -1
  99. package/lib/Renderer/Shader/ShaderChunk.js +5 -1
  100. package/lib/Renderer/Shader/ShaderUtils.js +4 -2
  101. package/lib/Renderer/c3DEngine.js +9 -6
  102. package/lib/Source/C3DTilesSource.js +3 -1
  103. package/lib/Source/EntwinePointTileSource.js +3 -1
  104. package/lib/Source/FileSource.js +8 -1
  105. package/lib/Source/PotreeSource.js +3 -1
  106. package/lib/Source/Source.js +15 -10
  107. package/lib/Source/VectorTilesSource.js +5 -0
  108. package/lib/Source/WFSSource.js +9 -3
  109. package/lib/Source/WMTSSource.js +3 -1
  110. package/lib/ThreeExtended/{WebGL.js → capabilities/WebGL.js} +8 -7
  111. package/lib/ThreeExtended/loaders/GLTFLoader.js +88 -39
  112. package/lib/Utils/CameraUtils.js +11 -1
  113. package/lib/Utils/DEMUtils.js +4 -2
  114. package/lib/Utils/FeaturesUtils.js +8 -4
  115. package/lib/Utils/gui/Main.js +39 -0
  116. package/lib/Utils/gui/Minimap.js +197 -0
  117. package/lib/Utils/gui/Navigation.js +322 -0
  118. package/lib/Utils/gui/Scale.js +154 -0
  119. package/lib/Utils/gui/Searchbar.js +299 -0
  120. package/lib/Utils/gui/Widget.js +119 -0
  121. package/package.json +32 -27
  122. package/examples/js/Scale.js +0 -40
@@ -2,17 +2,11 @@
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
 
5
- var _typeof = require("@babel/runtime/helpers/typeof");
6
-
7
5
  Object.defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
8
  exports["default"] = void 0;
11
9
 
12
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
13
-
14
- var THREE = _interopRequireWildcard(require("three"));
15
-
16
10
  var _LayerUpdateState = _interopRequireDefault(require("../Layer/LayerUpdateState"));
17
11
 
18
12
  var _ObjectRemovalHelper = _interopRequireDefault(require("./ObjectRemovalHelper"));
@@ -21,48 +15,9 @@ var _handlerNodeError = _interopRequireDefault(require("./handlerNodeError"));
21
15
 
22
16
  var _Coordinates = _interopRequireDefault(require("../Core/Geographic/Coordinates"));
23
17
 
24
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
25
-
26
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
27
-
28
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
29
-
30
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
31
-
32
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
18
+ var _GeoidLayer = require("../Layer/GeoidLayer");
33
19
 
34
20
  var coord = new _Coordinates["default"]('EPSG:4326', 0, 0, 0);
35
-
36
- function assignLayer(object, layer) {
37
- if (object) {
38
- object.layer = layer;
39
-
40
- if (object.material) {
41
- object.material.transparent = layer.opacity < 1.0;
42
- object.material.opacity = layer.opacity;
43
- object.material.wireframe = layer.wireframe;
44
- }
45
-
46
- object.layers.set(layer.threejsLayer);
47
-
48
- var _iterator = _createForOfIteratorHelper(object.children),
49
- _step;
50
-
51
- try {
52
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
53
- var c = _step.value;
54
- assignLayer(c, layer);
55
- }
56
- } catch (err) {
57
- _iterator.e(err);
58
- } finally {
59
- _iterator.f();
60
- }
61
-
62
- return object;
63
- }
64
- }
65
-
66
21
  var _default = {
67
22
  update: function update(context, layer, node) {
68
23
  if (!node.parent && node.children.length) {
@@ -79,22 +34,25 @@ var _default = {
79
34
  if (node.layerUpdateState[layer.id] === undefined) {
80
35
  node.layerUpdateState[layer.id] = new _LayerUpdateState["default"]();
81
36
  } else if (!node.layerUpdateState[layer.id].canTryUpdate()) {
37
+ // toggle visibility features
38
+ node.link.forEach(function (f) {
39
+ var _f$layer;
40
+
41
+ if (((_f$layer = f.layer) === null || _f$layer === void 0 ? void 0 : _f$layer.id) == layer.id) {
42
+ f.layer.object3d.add(f);
43
+ f.meshes.position.z = (0, _GeoidLayer.geoidLayerIsVisible)(layer.parent) ? node.geoidHeight : 0;
44
+ f.meshes.updateMatrixWorld();
45
+ }
46
+ });
82
47
  return;
83
48
  }
84
49
 
85
- var features = node.children.filter(function (n) {
86
- return n.layer == layer;
87
- });
88
-
89
- if (features.length > 0) {
90
- return features;
91
- }
92
-
93
50
  var extentsDestination = node.getExtentsByProjection(layer.source.crs) || [node.extent];
94
51
  var zoomDest = extentsDestination[0].zoom; // check if it's tile level is equal to display level layer.
95
52
 
96
53
  if (zoomDest != layer.zoom.min || // check if there's data in extent tile.
97
- !this.source.extentInsideLimit(node.extent, zoomDest) || layer.source.isFileSource && !node.extent.isPointInside(layer.source.extent.center(coord))) {
54
+ !this.source.extentInsideLimit(node.extent, zoomDest) || // In FileSource case, check if the feature center is in extent tile.
55
+ layer.source.isFileSource && !node.extent.isPointInside(layer.source.extent.center(coord))) {
98
56
  // if not, there's not data to add at this tile.
99
57
  node.layerUpdateState[layer.id].noMoreUpdatePossible();
100
58
  return;
@@ -108,38 +66,32 @@ var _default = {
108
66
  threejsLayer: layer.threejsLayer,
109
67
  requester: node
110
68
  };
111
- return context.scheduler.execute(command).then(function (result) {
112
- // if request return empty json, WFSProvider.getFeatures return undefined
113
- result = result[0];
114
-
115
- if (result) {
116
- assignLayer(result, layer); // call onMeshCreated callback if needed
117
-
118
- if (layer.onMeshCreated) {
119
- layer.onMeshCreated(result);
69
+ return context.scheduler.execute(command).then(function (featureMeshes) {
70
+ node.layerUpdateState[layer.id].noMoreUpdatePossible();
71
+ featureMeshes.forEach(function (featureMesh) {
72
+ if (featureMesh) {
73
+ featureMesh.as(context.view.referenceCrs);
74
+ featureMesh.meshes.position.z = (0, _GeoidLayer.geoidLayerIsVisible)(layer.parent) ? node.geoidHeight : 0;
75
+ featureMesh.updateMatrixWorld();
76
+
77
+ if (layer.onMeshCreated) {
78
+ layer.onMeshCreated(featureMesh, context);
79
+ }
80
+
81
+ if (!node.parent) {
82
+ // TODO: Clean cache needs a refactory, because it isn't really efficient and used
83
+ _ObjectRemovalHelper["default"].removeChildrenAndCleanupRecursively(layer, featureMesh);
84
+ } else {
85
+ layer.object3d.add(featureMesh);
86
+ node.link.push(featureMesh);
87
+ }
88
+
89
+ featureMesh.layer = layer;
90
+ } else {
91
+ // TODO: verify if it's possible the featureMesh is undefined.
92
+ node.layerUpdateState[layer.id].failure(1, true);
120
93
  }
121
-
122
- node.layerUpdateState[layer.id].success();
123
-
124
- if (!node.parent) {
125
- _ObjectRemovalHelper["default"].removeChildrenAndCleanupRecursively(layer, result);
126
-
127
- return;
128
- } // remove old group layer
129
-
130
-
131
- node.remove.apply(node, (0, _toConsumableArray2["default"])(node.children.filter(function (c) {
132
- return c.layer && c.layer.id == layer.id;
133
- })));
134
- var group = new THREE.Group();
135
- group.layer = layer;
136
- group.matrixWorld.copy(node.matrixWorld).invert();
137
- group.matrixWorld.decompose(group.position, group.quaternion, group.scale);
138
- node.add(group.add(result));
139
- group.updateMatrixWorld(true);
140
- } else {
141
- node.layerUpdateState[layer.id].failure(1, true);
142
- }
94
+ });
143
95
  }, function (err) {
144
96
  return (0, _handlerNodeError["default"])(err, node, layer, node.level, context.view);
145
97
  });
@@ -5,10 +5,10 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.updateLayeredMaterialNodeImagery = updateLayeredMaterialNodeImagery;
9
- exports.updateLayeredMaterialNodeElevation = updateLayeredMaterialNodeElevation;
8
+ exports.SIZE_TEXTURE_TILE = exports.SIZE_DIAGONAL_TEXTURE = void 0;
10
9
  exports.removeLayeredMaterialNodeLayer = removeLayeredMaterialNodeLayer;
11
- exports.SIZE_DIAGONAL_TEXTURE = exports.SIZE_TEXTURE_TILE = void 0;
10
+ exports.updateLayeredMaterialNodeElevation = updateLayeredMaterialNodeElevation;
11
+ exports.updateLayeredMaterialNodeImagery = updateLayeredMaterialNodeImagery;
12
12
 
13
13
  var _LayerUpdateStrategy = require("../Layer/LayerUpdateStrategy");
14
14
 
@@ -91,10 +91,12 @@ function updateLayeredMaterialNodeImagery(context, layer, node, parent) {
91
91
  }
92
92
 
93
93
  if (!nodeLayer) {
94
+ var _parent$material;
95
+
94
96
  // Create new raster node
95
97
  nodeLayer = layer.setupRasterNode(node); // Init the node by parent
96
98
 
97
- var parentLayer = parent.material && parent.material.getLayer(layer.id);
99
+ var parentLayer = (_parent$material = parent.material) === null || _parent$material === void 0 ? void 0 : _parent$material.getLayer(layer.id);
98
100
  nodeLayer.initFromParent(parentLayer, extentsDestination);
99
101
  } // Proposed new process, two separate processes:
100
102
  // * FIRST PASS: initNodeXXXFromParent and get out of the function
@@ -199,8 +201,10 @@ function updateLayeredMaterialNodeElevation(context, layer, node, parent) {
199
201
  }
200
202
 
201
203
  if (node.layerUpdateState[layer.id] === undefined) {
204
+ var _parent$material2;
205
+
202
206
  node.layerUpdateState[layer.id] = new _LayerUpdateState["default"]();
203
- var parentLayer = parent.material && parent.material.getLayer(layer.id);
207
+ var parentLayer = (_parent$material2 = parent.material) === null || _parent$material2 === void 0 ? void 0 : _parent$material2.getLayer(layer.id);
204
208
  nodeLayer.initFromParent(parentLayer, extentsDestination);
205
209
 
206
210
  if (nodeLayer.level >= layer.source.zoom.min) {
@@ -259,11 +263,16 @@ function updateLayeredMaterialNodeElevation(context, layer, node, parent) {
259
263
 
260
264
  function removeLayeredMaterialNodeLayer(layerId) {
261
265
  return function (node) {
262
- if (node.material && node.material.removeLayer) {
266
+ var _node$material;
267
+
268
+ if ((_node$material = node.material) !== null && _node$material !== void 0 && _node$material.removeLayer) {
263
269
  node.material.removeLayer(layerId);
264
270
 
265
271
  if (node.material.elevationLayerIds[0] == layerId) {
266
- node.setBBoxZ(0, 0);
272
+ node.setBBoxZ({
273
+ min: 0,
274
+ max: 0
275
+ });
267
276
  }
268
277
  }
269
278
 
@@ -107,6 +107,10 @@ var _default = {
107
107
  return (c.layer && c.layer.id) === layer.id;
108
108
  });
109
109
 
110
+ if (obj.link) {
111
+ toRemove = toRemove.concat(obj.link);
112
+ }
113
+
110
114
  var _iterator2 = _createForOfIteratorHelper(toRemove),
111
115
  _step2;
112
116
 
@@ -32,7 +32,8 @@ function b3dmToMesh(data, layer, url) {
32
32
  overrideMaterials: layer.overrideMaterials,
33
33
  doNotPatchMaterial: layer.doNotPatchMaterial,
34
34
  opacity: layer.opacity,
35
- registeredExtensions: layer.registeredExtensions
35
+ registeredExtensions: layer.registeredExtensions,
36
+ layer: layer
36
37
  };
37
38
  return _B3dmParser["default"].parse(data, options).then(function (result) {
38
39
  var batchTable = result.batchTable; // object3d is actually a THREE.Scene
@@ -104,12 +105,6 @@ function executeCommand(command) {
104
105
  obj.layers.set(layer.threejsLayer);
105
106
  obj.userData.metadata = metadata;
106
107
  obj.layer = layer;
107
-
108
- if (obj.material) {
109
- obj.material.transparent = layer.opacity < 1.0;
110
- obj.material.opacity = layer.opacity;
111
- obj.material.wireframe = layer.wireframe;
112
- }
113
108
  };
114
109
 
115
110
  if (path) {
@@ -38,9 +38,12 @@ function getTextureFloat(buffer) {
38
38
  if (isWebGL2) {
39
39
  var texture = new _three.DataTexture(buffer, SIZE_TEXTURE_TILE, SIZE_TEXTURE_TILE, _three.RedFormat, _three.FloatType);
40
40
  texture.internalFormat = 'R32F';
41
+ texture.needsUpdate = true;
41
42
  return texture;
42
43
  } else {
43
- return new _three.DataTexture(buffer, SIZE_TEXTURE_TILE, SIZE_TEXTURE_TILE, _three.AlphaFormat, _three.FloatType);
44
+ var _texture = new _three.DataTexture(buffer, SIZE_TEXTURE_TILE, SIZE_TEXTURE_TILE, _three.AlphaFormat, _three.FloatType);
45
+
46
+ return _texture;
44
47
  }
45
48
  }
46
49
  /**
@@ -9,6 +9,12 @@ exports["default"] = void 0;
9
9
 
10
10
  var _CancelledCommandException = _interopRequireDefault(require("../Core/Scheduler/CancelledCommandException"));
11
11
 
12
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
13
+
14
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
15
+
16
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
17
+
12
18
  var _default = {
13
19
  executeCommand: function executeCommand(command) {
14
20
  var promises = [];
@@ -20,8 +26,18 @@ var _default = {
20
26
  return Promise.reject(new _CancelledCommandException["default"](command));
21
27
  }
22
28
 
23
- for (var i = 0, size = extentsSource.length; i < size; i++) {
24
- promises.push(layer.convert(requester, extentsSource[i]));
29
+ var _iterator = _createForOfIteratorHelper(extentsSource),
30
+ _step;
31
+
32
+ try {
33
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
34
+ var extent = _step.value;
35
+ promises.push(layer.convert(requester, extent));
36
+ }
37
+ } catch (err) {
38
+ _iterator.e(err);
39
+ } finally {
40
+ _iterator.f();
25
41
  }
26
42
 
27
43
  return Promise.all(promises);
@@ -98,7 +98,7 @@ var _default = {
98
98
  *
99
99
  * @return {string} the formed url
100
100
  */
101
- bbox: function bbox(bbox, source) {
101
+ bbox: function (bbox, source) {
102
102
  var precision = source.crs == 'EPSG:4326' ? 9 : 2;
103
103
  bbox.as(source.crs, extent);
104
104
  var w = extent.west.toFixed(precision);
@@ -13,6 +13,10 @@ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/cl
13
13
 
14
14
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
15
 
16
+ var _classPrivateFieldGet2 = _interopRequireDefault(require("@babel/runtime/helpers/classPrivateFieldGet"));
17
+
18
+ var _classPrivateFieldSet2 = _interopRequireDefault(require("@babel/runtime/helpers/classPrivateFieldSet"));
19
+
16
20
  var THREE = _interopRequireWildcard(require("three"));
17
21
 
18
22
  var _Coordinates = _interopRequireDefault(require("../Core/Geographic/Coordinates"));
@@ -23,6 +27,10 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
23
27
 
24
28
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
25
29
 
30
+ function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
31
+
32
+ function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
33
+
26
34
  /**
27
35
  * @typedef {object} Camera~CAMERA_TYPE
28
36
  * Stores the different types of camera usable in iTowns.
@@ -97,6 +105,10 @@ function updatePreSse(camera, height, fov) {
97
105
  */
98
106
 
99
107
 
108
+ var _viewMatrixNeedsUpdate = /*#__PURE__*/new WeakMap();
109
+
110
+ var _viewMatrix = /*#__PURE__*/new WeakMap();
111
+
100
112
  var Camera = /*#__PURE__*/function () {
101
113
  /**
102
114
  * @param {string} crs The camera's coordinate projection system.
@@ -112,10 +124,22 @@ var Camera = /*#__PURE__*/function () {
112
124
  * @constructor
113
125
  */
114
126
  function Camera(crs, width, height) {
115
- var _this = this;
127
+ var _this$camera3D$aspect,
128
+ _this = this;
116
129
 
117
130
  var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
118
131
  (0, _classCallCheck2["default"])(this, Camera);
132
+
133
+ _classPrivateFieldInitSpec(this, _viewMatrixNeedsUpdate, {
134
+ writable: true,
135
+ value: true
136
+ });
137
+
138
+ _classPrivateFieldInitSpec(this, _viewMatrix, {
139
+ writable: true,
140
+ value: new THREE.Matrix4()
141
+ });
142
+
119
143
  this.crs = crs;
120
144
 
121
145
  if (options.isCamera) {
@@ -136,11 +160,9 @@ var Camera = /*#__PURE__*/function () {
136
160
  }
137
161
  }
138
162
 
139
- this.camera3D.aspect = this.camera3D.aspect !== undefined ? this.camera3D.aspect : 1;
140
- this._viewMatrix = new THREE.Matrix4();
163
+ this.camera3D.aspect = (_this$camera3D$aspect = this.camera3D.aspect) !== null && _this$camera3D$aspect !== void 0 ? _this$camera3D$aspect : 1;
141
164
  this.width = width;
142
165
  this.height = height;
143
- this._viewMatrixNeedsUpdate = true;
144
166
  this.resize(width, height);
145
167
  this._preSSE = Infinity;
146
168
 
@@ -189,7 +211,7 @@ var Camera = /*#__PURE__*/function () {
189
211
 
190
212
  if (this.camera3D.updateProjectionMatrix) {
191
213
  this.camera3D.updateProjectionMatrix();
192
- this._viewMatrixNeedsUpdate = true;
214
+ (0, _classPrivateFieldSet2["default"])(this, _viewMatrixNeedsUpdate, true);
193
215
  }
194
216
  }
195
217
  }, {
@@ -197,7 +219,7 @@ var Camera = /*#__PURE__*/function () {
197
219
  value: function update() {
198
220
  // update matrix
199
221
  this.camera3D.updateMatrixWorld();
200
- this._viewMatrixNeedsUpdate = true;
222
+ (0, _classPrivateFieldSet2["default"])(this, _viewMatrixNeedsUpdate, true);
201
223
  }
202
224
  /**
203
225
  * Return the position in the requested CRS, or in camera's CRS if undefined.
@@ -232,18 +254,17 @@ var Camera = /*#__PURE__*/function () {
232
254
  }, {
233
255
  key: "isSphereVisible",
234
256
  value: function isSphereVisible(sphere, matrixWorld) {
235
- if (this._viewMatrixNeedsUpdate) {
257
+ if ((0, _classPrivateFieldGet2["default"])(this, _viewMatrixNeedsUpdate)) {
236
258
  // update visibility testing matrix
237
- this._viewMatrix.multiplyMatrices(this.camera3D.projectionMatrix, this.camera3D.matrixWorldInverse);
238
-
239
- this._viewMatrixNeedsUpdate = false;
259
+ (0, _classPrivateFieldGet2["default"])(this, _viewMatrix).multiplyMatrices(this.camera3D.projectionMatrix, this.camera3D.matrixWorldInverse);
260
+ (0, _classPrivateFieldSet2["default"])(this, _viewMatrixNeedsUpdate, false);
240
261
  }
241
262
 
242
263
  if (matrixWorld) {
243
- tmp.matrix.multiplyMatrices(this._viewMatrix, matrixWorld);
264
+ tmp.matrix.multiplyMatrices((0, _classPrivateFieldGet2["default"])(this, _viewMatrix), matrixWorld);
244
265
  tmp.frustum.setFromProjectionMatrix(tmp.matrix);
245
266
  } else {
246
- tmp.frustum.setFromProjectionMatrix(this._viewMatrix);
267
+ tmp.frustum.setFromProjectionMatrix((0, _classPrivateFieldGet2["default"])(this, _viewMatrix));
247
268
  }
248
269
 
249
270
  return tmp.frustum.intersectsSphere(sphere);
@@ -17,7 +17,9 @@ function updateLayersOrdering(geometryLayer, imageryLayers) {
17
17
  var sequence = _Layer.ImageryLayers.getColorLayersIdOrderedBySequence(imageryLayers);
18
18
 
19
19
  var cO = function (object) {
20
- if (object.material && object.material.setSequence) {
20
+ var _object$material;
21
+
22
+ if ((_object$material = object.material) !== null && _object$material !== void 0 && _object$material.setSequence) {
21
23
  object.material.setSequence(sequence);
22
24
  }
23
25
  };
@@ -7,9 +7,9 @@ var _typeof = require("@babel/runtime/helpers/typeof");
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: true
9
9
  });
10
- exports.unpack1K = unpack1K;
10
+ exports["default"] = exports.colorLayerEffects = exports.ELEVATION_MODES = void 0;
11
11
  exports.getMaxColorSamplerUnitsCount = getMaxColorSamplerUnitsCount;
12
- exports["default"] = exports.ELEVATION_MODES = exports.colorLayerEffects = void 0;
12
+ exports.unpack1K = unpack1K;
13
13
 
14
14
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
15
15
 
@@ -23,6 +23,10 @@ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime
23
23
 
24
24
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
25
25
 
26
+ var _classPrivateFieldSet2 = _interopRequireDefault(require("@babel/runtime/helpers/classPrivateFieldSet"));
27
+
28
+ var _classPrivateFieldGet2 = _interopRequireDefault(require("@babel/runtime/helpers/classPrivateFieldGet"));
29
+
26
30
  var THREE = _interopRequireWildcard(require("three"));
27
31
 
28
32
  var _ShaderUtils = _interopRequireDefault(require("./Shader/ShaderUtils"));
@@ -41,6 +45,10 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
41
45
 
42
46
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
43
47
 
48
+ function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
49
+
50
+ function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
51
+
44
52
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
45
53
 
46
54
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
@@ -48,7 +56,7 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
48
56
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
49
57
 
50
58
  /* babel-plugin-inline-import './Shader/TileVS.glsl' */
51
- var TileVS = "#include <itowns/WebGL2_pars_vertex>\n#include <itowns/precision_qualifier>\n#include <common>\n#include <itowns/project_pars_vertex>\n#include <itowns/elevation_pars_vertex>\n#include <logdepthbuf_pars_vertex>\nattribute vec2 uv_0;\n#if NUM_CRS > 1\nattribute float uv_1;\n#endif\nattribute vec3 normal;\n\nuniform mat4 modelMatrix;\nuniform bool lightingEnabled;\nvarying vec2 vHighPrecisionZW;\n\n#if MODE == MODE_FINAL\n#include <fog_pars_vertex>\nvarying vec3 vUv;\nvarying vec3 vNormal;\n#endif\nvoid main() {\n vec2 uv = vec2(uv_0.x, 1.0 - uv_0.y);\n\n #include <begin_vertex>\n #include <itowns/elevation_vertex>\n #include <project_vertex>\n #include <logdepthbuf_vertex>\n vHighPrecisionZW = gl_Position.zw;\n#if MODE == MODE_FINAL\n #include <fog_vertex>\n #if NUM_CRS > 1\n vUv = vec3(uv_0, (uv_1 > 0.) ? uv_1 : uv_0.y); // set uv_1 = uv_0 if uv_1 is undefined\n #else\n vUv = vec3(uv_0, 0.0);\n #endif\n vNormal = normalize ( mat3( modelMatrix[0].xyz, modelMatrix[1].xyz, modelMatrix[2].xyz ) * normal );\n#endif\n}\n";
59
+ var TileVS = "#include <itowns/WebGL2_pars_vertex>\n#include <itowns/precision_qualifier>\n#include <common>\n#include <itowns/project_pars_vertex>\n#include <itowns/elevation_pars_vertex>\n#include <logdepthbuf_pars_vertex>\nattribute vec2 uv_0;\n#if NUM_CRS > 1\nattribute float uv_1;\n#endif\nattribute vec3 normal;\n\nuniform mat4 modelMatrix;\nuniform bool lightingEnabled;\nvarying vec2 vHighPrecisionZW;\n\n#if MODE == MODE_FINAL\n#include <fog_pars_vertex>\nvarying vec3 vUv;\nvarying vec3 vNormal;\n#endif\nvoid main() {\n vec2 uv = vec2(uv_0.x, 1.0 - uv_0.y);\n\n #include <begin_vertex>\n #include <itowns/elevation_vertex>\n #include <itowns/geoid_vertex>\n #include <project_vertex>\n #include <logdepthbuf_vertex>\n vHighPrecisionZW = gl_Position.zw;\n#if MODE == MODE_FINAL\n #include <fog_vertex>\n #if NUM_CRS > 1\n vUv = vec3(uv_0, (uv_1 > 0.) ? uv_1 : uv_0.y); // set uv_1 = uv_0 if uv_1 is undefined\n #else\n vUv = vec3(uv_0, 0.0);\n #endif\n vNormal = normalize ( mat3( modelMatrix[0].xyz, modelMatrix[1].xyz, modelMatrix[2].xyz ) * normal );\n#endif\n}\n";
52
60
 
53
61
  /* babel-plugin-inline-import './Shader/TileFS.glsl' */
54
62
  var TileFS = "#include <itowns/WebGL2_pars_fragment>\n#include <itowns/precision_qualifier>\n#include <logdepthbuf_pars_fragment>\n#include <itowns/pitUV>\n#include <itowns/color_layers_pars_fragment>\n#if MODE == MODE_FINAL\n#include <itowns/fog_pars_fragment>\n#include <itowns/overlay_pars_fragment>\n#include <itowns/lighting_pars_fragment>\n#endif\n#include <itowns/mode_pars_fragment>\n\nuniform vec3 diffuse;\nuniform float opacity;\nvarying vec3 vUv; // uv_0.x/uv_1.x, uv_0.y, uv_1.y\nvarying vec2 vHighPrecisionZW;\n\nvoid main() {\n #include <logdepthbuf_fragment>\n\n#if MODE == MODE_ID\n\n #include <itowns/mode_id_fragment>\n\n#elif MODE == MODE_DEPTH\n\n #include <itowns/mode_depth_fragment>\n\n#else\n\n gl_FragColor = vec4(diffuse, opacity);\n\n uvs[0] = vec3(vUv.xy, 0.);\n\n#if NUM_CRS > 1\n uvs[1] = vec3(vUv.x, fract(vUv.z), floor(vUv.z));\n#endif\n\n vec4 color;\n #pragma unroll_loop\n for ( int i = 0; i < NUM_FS_TEXTURES; i ++ ) {\n color = getLayerColor( i , colorTextures[ i ], colorOffsetScales[ i ], colorLayers[ i ]);\n gl_FragColor.rgb = mix(gl_FragColor.rgb, color.rgb, color.a);\n }\n\n #if defined(DEBUG)\n if (showOutline) {\n #pragma unroll_loop\n for ( int i = 0; i < NUM_CRS; i ++) {\n color = getOutlineColor( outlineColors[ i ], uvs[ i ].xy);\n gl_FragColor.rgb = mix(gl_FragColor.rgb, color.rgb, color.a);\n }\n }\n #endif\n\n #include <itowns/fog_fragment>\n #include <itowns/lighting_fragment>\n #include <itowns/overlay_fragment>\n\n#endif\n}\n";
@@ -150,6 +158,8 @@ exports.ELEVATION_MODES = ELEVATION_MODES;
150
158
  var nbSamplers;
151
159
  var fragmentShader = [];
152
160
 
161
+ var _visible = /*#__PURE__*/new WeakMap();
162
+
153
163
  var LayeredMaterial = /*#__PURE__*/function (_THREE$RawShaderMater) {
154
164
  (0, _inherits2["default"])(LayeredMaterial, _THREE$RawShaderMater);
155
165
 
@@ -162,6 +172,12 @@ var LayeredMaterial = /*#__PURE__*/function (_THREE$RawShaderMater) {
162
172
  var crsCount = arguments.length > 1 ? arguments[1] : undefined;
163
173
  (0, _classCallCheck2["default"])(this, LayeredMaterial);
164
174
  _this = _super.call(this, options);
175
+
176
+ _classPrivateFieldInitSpec((0, _assertThisInitialized2["default"])(_this), _visible, {
177
+ writable: true,
178
+ value: true
179
+ });
180
+
165
181
  nbSamplers = nbSamplers || [samplersElevationCount, getMaxColorSamplerUnitsCount()];
166
182
  _this.defines.NUM_VS_TEXTURES = nbSamplers[0];
167
183
  _this.defines.NUM_FS_TEXTURES = nbSamplers[1];
@@ -201,7 +217,9 @@ var LayeredMaterial = /*#__PURE__*/function (_THREE$RawShaderMater) {
201
217
 
202
218
  _CommonMaterial["default"].setUniformProperty((0, _assertThisInitialized2["default"])(_this), 'overlayColor', new THREE.Color(1.0, 0.3, 0.0));
203
219
 
204
- _CommonMaterial["default"].setUniformProperty((0, _assertThisInitialized2["default"])(_this), 'objectId', 0); // > 0 produces gaps,
220
+ _CommonMaterial["default"].setUniformProperty((0, _assertThisInitialized2["default"])(_this), 'objectId', 0);
221
+
222
+ _CommonMaterial["default"].setUniformProperty((0, _assertThisInitialized2["default"])(_this), 'geoidHeight', 0.0); // > 0 produces gaps,
205
223
  // < 0 causes oversampling of textures
206
224
  // = 0 causes sampling artefacts due to bad estimation of texture-uv gradients
207
225
  // best is a small negative number
@@ -222,16 +240,23 @@ var LayeredMaterial = /*#__PURE__*/function (_THREE$RawShaderMater) {
222
240
  _this.uniforms.colorLayers = new THREE.Uniform(new Array(nbSamplers[1]).fill(defaultStructLayer));
223
241
  _this.uniforms.colorTextures = new THREE.Uniform(new Array(nbSamplers[1]).fill(defaultTex));
224
242
  _this.uniforms.colorOffsetScales = new THREE.Uniform(new Array(nbSamplers[1]).fill(identityOffsetScale));
225
- _this.uniforms.colorTextureCount = new THREE.Uniform(0);
226
- var _visible = _this.visible; // can't do an ES6 setter/getter here
243
+ _this.uniforms.colorTextureCount = new THREE.Uniform(0); // can't do an ES6 setter/getter here
227
244
 
228
245
  Object.defineProperty((0, _assertThisInitialized2["default"])(_this), 'visible', {
246
+ // Knowing the visibility of a `LayeredMaterial` is useful. For example in a
247
+ // `GlobeView`, if you zoom in, "parent" tiles seems hidden; in fact, there
248
+ // are not, it is only their material (so `LayeredMaterial`) that is set to
249
+ // not visible.
250
+ // Adding an event when changing this property can be useful to hide others
251
+ // things, like in `TileDebug`, or in later PR to come (#1303 for example).
252
+ //
253
+ // TODO : verify if there is a better mechanism to avoid this event
229
254
  get: function get() {
230
- return _visible;
255
+ return (0, _classPrivateFieldGet2["default"])(this, _visible);
231
256
  },
232
257
  set: function set(v) {
233
- if (_visible != v) {
234
- _visible = v;
258
+ if ((0, _classPrivateFieldGet2["default"])(this, _visible) != v) {
259
+ (0, _classPrivateFieldSet2["default"])(this, _visible, v);
235
260
  this.dispatchEvent({
236
261
  type: v ? 'shown' : 'hidden'
237
262
  });
@@ -13,8 +13,6 @@ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/cl
13
13
 
14
14
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
15
 
16
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
17
-
18
16
  var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
19
17
 
20
18
  var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
@@ -78,7 +76,7 @@ var OBB = /*#__PURE__*/function (_THREE$Object3D) {
78
76
  max: 0,
79
77
  scale: 1.0
80
78
  };
81
- return (0, _possibleConstructorReturn2["default"])(_this, (0, _assertThisInitialized2["default"])(_this));
79
+ return _this;
82
80
  }
83
81
  /**
84
82
  * Creates a new instance of the object with same properties than original.
@@ -121,32 +119,28 @@ var OBB = /*#__PURE__*/function (_THREE$Object3D) {
121
119
  this.updateMatrixWorld(true);
122
120
  }
123
121
  /**
124
- * Update z min and z max of oriented bounding box
122
+ * Update z min, z max and z scale of oriented bounding box
125
123
  *
126
- * @param {number} min The minimum of oriented bounding box
127
- * @param {number} max The maximum of oriented bounding box
128
- * @param {number} scale
124
+ * @param {Object} [elevation={}]
125
+ * @param {number} [elevation.min] The minimum of oriented bounding box
126
+ * @param {number} [elevation.max] The maximum of oriented bounding box
127
+ * @param {number} [elevation.scale] The scale of oriented bounding box Z axis
128
+ * @param {number} [elevation.geoidHeight] The geoid height added to ellipsoid.
129
129
  */
130
130
 
131
131
  }, {
132
132
  key: "updateZ",
133
- value: function updateZ(min, max) {
134
- var scale = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.z.scale;
135
- this.z = {
136
- min: min,
137
- max: max,
138
- scale: scale,
139
- delta: Math.abs(max - min) * scale
140
- };
141
- this.box3D.min.z = this.natBox.min.z + min * scale;
142
- this.box3D.max.z = this.natBox.max.z + max * scale;
143
- }
144
- }, {
145
- key: "updateScaleZ",
146
- value: function updateScaleZ(scale) {
147
- if (scale > 0) {
148
- this.updateZ(this.z.min, this.z.max, scale);
149
- }
133
+ value: function updateZ() {
134
+ var _elevation$min, _elevation$max;
135
+
136
+ var elevation = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
137
+ this.z.min = (_elevation$min = elevation.min) !== null && _elevation$min !== void 0 ? _elevation$min : this.z.min;
138
+ this.z.max = (_elevation$max = elevation.max) !== null && _elevation$max !== void 0 ? _elevation$max : this.z.max;
139
+ this.z.scale = elevation.scale > 0 ? elevation.scale : this.z.scale;
140
+ this.z.delta = Math.abs(this.z.max - this.z.min) * this.z.scale;
141
+ var geoidHeight = elevation.geoidHeight || 0;
142
+ this.box3D.min.z = this.natBox.min.z + this.z.min * this.z.scale + geoidHeight;
143
+ this.box3D.max.z = this.natBox.max.z + this.z.max * this.z.scale + geoidHeight;
150
144
  }
151
145
  /**
152
146
  * Determines if the sphere is above the XY space of the box
@@ -200,7 +194,10 @@ var OBB = /*#__PURE__*/function (_THREE$Object3D) {
200
194
  obb.box3D.copy(geometry.boundingBox);
201
195
  obb.natBox.copy(geometry.boundingBox);
202
196
  this.copy(obb);
203
- this.updateZ(minHeight, maxHeight);
197
+ this.updateZ({
198
+ min: minHeight,
199
+ max: maxHeight
200
+ });
204
201
  this.position.copy(position);
205
202
  this.quaternion.copy(quaternion);
206
203
  this.updateMatrixWorld(true);