@loaders.gl/terrain 3.1.0-alpha.4 → 3.1.0-beta.3

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 (89) hide show
  1. package/dist/bundle.d.ts +2 -0
  2. package/dist/bundle.d.ts.map +1 -0
  3. package/dist/bundle.js +1181 -0
  4. package/dist/es5/bundle.js +1 -1
  5. package/dist/es5/bundle.js.map +1 -1
  6. package/dist/es5/index.js +9 -43
  7. package/dist/es5/index.js.map +1 -1
  8. package/dist/es5/lib/decode-quantized-mesh.js +106 -128
  9. package/dist/es5/lib/decode-quantized-mesh.js.map +1 -1
  10. package/dist/es5/lib/delatin/index.js +346 -379
  11. package/dist/es5/lib/delatin/index.js.map +1 -1
  12. package/dist/es5/lib/helpers/skirt.js +41 -55
  13. package/dist/es5/lib/helpers/skirt.js.map +1 -1
  14. package/dist/es5/lib/parse-quantized-mesh.js +44 -54
  15. package/dist/es5/lib/parse-quantized-mesh.js.map +1 -1
  16. package/dist/es5/lib/parse-terrain.js +78 -105
  17. package/dist/es5/lib/parse-terrain.js.map +1 -1
  18. package/dist/es5/lib/utils/version.js +1 -1
  19. package/dist/es5/lib/utils/version.js.map +1 -1
  20. package/dist/es5/quantized-mesh-loader.js +2 -2
  21. package/dist/es5/quantized-mesh-loader.js.map +1 -1
  22. package/dist/es5/terrain-loader.js +2 -2
  23. package/dist/es5/terrain-loader.js.map +1 -1
  24. package/dist/es5/workers/quantized-mesh-worker.js +7 -3
  25. package/dist/es5/workers/quantized-mesh-worker.js.map +1 -0
  26. package/dist/es5/workers/terrain-worker.js +7 -3
  27. package/dist/es5/workers/terrain-worker.js.map +1 -0
  28. package/dist/esm/lib/decode-quantized-mesh.js.map +1 -1
  29. package/dist/esm/lib/delatin/index.js.map +1 -1
  30. package/dist/esm/lib/helpers/skirt.js +1 -1
  31. package/dist/esm/lib/helpers/skirt.js.map +1 -1
  32. package/dist/esm/lib/parse-quantized-mesh.js.map +1 -1
  33. package/dist/esm/lib/parse-terrain.js.map +1 -1
  34. package/dist/esm/lib/utils/version.js +1 -1
  35. package/dist/esm/lib/utils/version.js.map +1 -1
  36. package/dist/esm/workers/quantized-mesh-worker.js +3 -3
  37. package/dist/esm/workers/quantized-mesh-worker.js.map +1 -0
  38. package/dist/esm/workers/terrain-worker.js +3 -3
  39. package/dist/esm/workers/terrain-worker.js.map +1 -0
  40. package/dist/index.d.ts +77 -0
  41. package/dist/index.d.ts.map +1 -0
  42. package/dist/index.js +26 -0
  43. package/dist/lib/decode-quantized-mesh.d.ts +59 -0
  44. package/dist/lib/decode-quantized-mesh.d.ts.map +1 -0
  45. package/dist/lib/decode-quantized-mesh.js +227 -0
  46. package/dist/lib/delatin/index.d.ts +24 -0
  47. package/dist/lib/delatin/index.d.ts.map +1 -0
  48. package/dist/lib/delatin/index.js +418 -0
  49. package/dist/lib/helpers/skirt.d.ts +19 -0
  50. package/dist/lib/helpers/skirt.d.ts.map +1 -0
  51. package/dist/lib/helpers/skirt.js +127 -0
  52. package/dist/lib/parse-quantized-mesh.d.ts +25 -0
  53. package/dist/lib/parse-quantized-mesh.d.ts.map +1 -0
  54. package/dist/lib/parse-quantized-mesh.js +95 -0
  55. package/dist/lib/parse-terrain.d.ts +25 -0
  56. package/dist/lib/parse-terrain.d.ts.map +1 -0
  57. package/dist/lib/parse-terrain.js +162 -0
  58. package/dist/lib/utils/version.d.ts +2 -0
  59. package/dist/lib/utils/version.d.ts.map +1 -0
  60. package/dist/lib/utils/version.js +7 -0
  61. package/dist/quantized-mesh-loader.d.ts +21 -0
  62. package/dist/quantized-mesh-loader.d.ts.map +1 -0
  63. package/dist/quantized-mesh-loader.js +23 -0
  64. package/dist/quantized-mesh-worker.js +1218 -2
  65. package/dist/terrain-loader.d.ts +32 -0
  66. package/dist/terrain-loader.d.ts.map +1 -0
  67. package/dist/terrain-loader.js +34 -0
  68. package/dist/terrain-worker.js +1218 -2
  69. package/dist/workers/quantized-mesh-worker.d.ts +2 -0
  70. package/dist/workers/quantized-mesh-worker.d.ts.map +1 -0
  71. package/dist/workers/quantized-mesh-worker.js +5 -0
  72. package/dist/workers/terrain-worker.d.ts +2 -0
  73. package/dist/workers/terrain-worker.d.ts.map +1 -0
  74. package/dist/workers/terrain-worker.js +5 -0
  75. package/package.json +8 -8
  76. package/src/lib/{decode-quantized-mesh.js → decode-quantized-mesh.ts} +6 -1
  77. package/src/lib/delatin/{index.js → index.ts} +2 -0
  78. package/src/lib/helpers/{skirt.js → skirt.ts} +14 -7
  79. package/src/lib/{parse-quantized-mesh.js → parse-quantized-mesh.ts} +0 -0
  80. package/src/lib/{parse-terrain.js → parse-terrain.ts} +37 -3
  81. package/src/lib/utils/{version.js → version.ts} +0 -0
  82. package/src/workers/quantized-mesh-worker.js +0 -1
  83. package/src/workers/quantized-mesh-worker.ts +4 -0
  84. package/src/workers/terrain-worker.js +0 -1
  85. package/src/workers/terrain-worker.ts +4 -0
  86. package/dist/dist.min.js +0 -2
  87. package/dist/dist.min.js.map +0 -1
  88. package/dist/quantized-mesh-worker.js.map +0 -1
  89. package/dist/terrain-worker.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- var moduleExports = require('./index');
3
+ const moduleExports = require('./index');
4
4
 
5
5
  globalThis.loaders = globalThis.loaders || {};
6
6
  module.exports = Object.assign(globalThis.loaders, moduleExports);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/bundle.ts"],"names":["moduleExports","require","globalThis","loaders","module","exports","Object","assign"],"mappings":";;AACA,IAAMA,aAAa,GAAGC,OAAO,CAAC,SAAD,CAA7B;;AACAC,UAAU,CAACC,OAAX,GAAqBD,UAAU,CAACC,OAAX,IAAsB,EAA3C;AACAC,MAAM,CAACC,OAAP,GAAiBC,MAAM,CAACC,MAAP,CAAcL,UAAU,CAACC,OAAzB,EAAkCH,aAAlC,CAAjB","sourcesContent":["// @ts-nocheck\nconst moduleExports = require('./index');\nglobalThis.loaders = globalThis.loaders || {};\nmodule.exports = Object.assign(globalThis.loaders, moduleExports);\n"],"file":"bundle.js"}
1
+ {"version":3,"sources":["../../src/bundle.ts"],"names":["moduleExports","require","globalThis","loaders","module","exports","Object","assign"],"mappings":";;AACA,MAAMA,aAAa,GAAGC,OAAO,CAAC,SAAD,CAA7B;;AACAC,UAAU,CAACC,OAAX,GAAqBD,UAAU,CAACC,OAAX,IAAsB,EAA3C;AACAC,MAAM,CAACC,OAAP,GAAiBC,MAAM,CAACC,MAAP,CAAcL,UAAU,CAACC,OAAzB,EAAkCH,aAAlC,CAAjB","sourcesContent":["// @ts-nocheck\nconst moduleExports = require('./index');\nglobalThis.loaders = globalThis.loaders || {};\nmodule.exports = Object.assign(globalThis.loaders, moduleExports);\n"],"file":"bundle.js"}
package/dist/es5/index.js CHANGED
@@ -7,24 +7,18 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  Object.defineProperty(exports, "TerrainWorkerLoader", {
9
9
  enumerable: true,
10
- get: function get() {
10
+ get: function () {
11
11
  return _terrainLoader.TerrainLoader;
12
12
  }
13
13
  });
14
14
  Object.defineProperty(exports, "QuantizedMeshWorkerLoader", {
15
15
  enumerable: true,
16
- get: function get() {
16
+ get: function () {
17
17
  return _quantizedMeshLoader.QuantizedMeshLoader;
18
18
  }
19
19
  });
20
20
  exports._typecheckQuantizedMeshLoader = exports.QuantizedMeshLoader = exports._typecheckTerrainLoader = exports.TerrainLoader = void 0;
21
21
 
22
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
23
-
24
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
25
-
26
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
27
-
28
22
  var _parseQuantizedMesh = _interopRequireDefault(require("./lib/parse-quantized-mesh"));
29
23
 
30
24
  var _parseTerrain = _interopRequireDefault(require("./lib/parse-terrain"));
@@ -33,45 +27,17 @@ var _terrainLoader = require("./terrain-loader");
33
27
 
34
28
  var _quantizedMeshLoader = require("./quantized-mesh-loader");
35
29
 
36
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
37
-
38
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
39
-
40
- var TerrainLoader = _objectSpread(_objectSpread({}, _terrainLoader.TerrainLoader), {}, {
30
+ const TerrainLoader = { ..._terrainLoader.TerrainLoader,
41
31
  parse: _parseTerrain.default
42
- });
43
-
32
+ };
44
33
  exports.TerrainLoader = TerrainLoader;
45
- var _typecheckTerrainLoader = TerrainLoader;
34
+ const _typecheckTerrainLoader = TerrainLoader;
46
35
  exports._typecheckTerrainLoader = _typecheckTerrainLoader;
47
-
48
- var QuantizedMeshLoader = _objectSpread(_objectSpread({}, _quantizedMeshLoader.QuantizedMeshLoader), {}, {
36
+ const QuantizedMeshLoader = { ..._quantizedMeshLoader.QuantizedMeshLoader,
49
37
  parseSync: _parseQuantizedMesh.default,
50
- parse: function () {
51
- var _parse = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(arrayBuffer, options) {
52
- return _regenerator.default.wrap(function _callee$(_context) {
53
- while (1) {
54
- switch (_context.prev = _context.next) {
55
- case 0:
56
- return _context.abrupt("return", (0, _parseQuantizedMesh.default)(arrayBuffer, options));
57
-
58
- case 1:
59
- case "end":
60
- return _context.stop();
61
- }
62
- }
63
- }, _callee);
64
- }));
65
-
66
- function parse(_x, _x2) {
67
- return _parse.apply(this, arguments);
68
- }
69
-
70
- return parse;
71
- }()
72
- });
73
-
38
+ parse: async (arrayBuffer, options) => (0, _parseQuantizedMesh.default)(arrayBuffer, options)
39
+ };
74
40
  exports.QuantizedMeshLoader = QuantizedMeshLoader;
75
- var _typecheckQuantizedMeshLoader = QuantizedMeshLoader;
41
+ const _typecheckQuantizedMeshLoader = QuantizedMeshLoader;
76
42
  exports._typecheckQuantizedMeshLoader = _typecheckQuantizedMeshLoader;
77
43
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts"],"names":["TerrainLoader","TerrainWorkerLoader","parse","loadTerrain","_typecheckTerrainLoader","QuantizedMeshLoader","QuantizedMeshWorkerLoader","parseSync","parseQuantizedMesh","arrayBuffer","options","_typecheckQuantizedMeshLoader"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;;AACA;;AAEA;;AACA;;;;;;AAMO,IAAMA,aAAa,mCACrBC,4BADqB;AAExBC,EAAAA,KAAK,EAAEC;AAFiB,EAAnB;;;AAKA,IAAMC,uBAAyC,GAAGJ,aAAlD;;;AASA,IAAMK,mBAAmB,mCAC3BC,wCAD2B;AAE9BC,EAAAA,SAAS,EAAEC,2BAFmB;AAG9BN,EAAAA,KAAK;AAAA,2EAAE,iBAAOO,WAAP,EAAoBC,OAApB;AAAA;AAAA;AAAA;AAAA;AAAA,+CAAgC,iCAAmBD,WAAnB,EAAgCC,OAAhC,CAAhC;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAF;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAHyB,EAAzB;;;AAMA,IAAMC,6BAA+C,GAAGN,mBAAxD","sourcesContent":["import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport parseQuantizedMesh from './lib/parse-quantized-mesh';\nimport loadTerrain from './lib/parse-terrain';\n\nimport {TerrainLoader as TerrainWorkerLoader} from './terrain-loader';\nimport {QuantizedMeshLoader as QuantizedMeshWorkerLoader} from './quantized-mesh-loader';\n\n// TerrainLoader\n\nexport {TerrainWorkerLoader};\n\nexport const TerrainLoader = {\n ...TerrainWorkerLoader,\n parse: loadTerrain\n};\n\nexport const _typecheckTerrainLoader: LoaderWithParser = TerrainLoader; // eslint-disable-line\n\n// QuantizedMeshLoader\n\nexport {QuantizedMeshWorkerLoader};\n\n/**\n * Loader for quantized meshes\n */\nexport const QuantizedMeshLoader = {\n ...QuantizedMeshWorkerLoader,\n parseSync: parseQuantizedMesh,\n parse: async (arrayBuffer, options) => parseQuantizedMesh(arrayBuffer, options)\n};\n\nexport const _typecheckQuantizedMeshLoader: LoaderWithParser = QuantizedMeshLoader;\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../src/index.ts"],"names":["TerrainLoader","TerrainWorkerLoader","parse","loadTerrain","_typecheckTerrainLoader","QuantizedMeshLoader","QuantizedMeshWorkerLoader","parseSync","parseQuantizedMesh","arrayBuffer","options","_typecheckQuantizedMeshLoader"],"mappings":";;;;;;;;;;;;;;;;;;;;;AACA;;AACA;;AAEA;;AACA;;AAMO,MAAMA,aAAa,GAAG,EAC3B,GAAGC,4BADwB;AAE3BC,EAAAA,KAAK,EAAEC;AAFoB,CAAtB;;AAKA,MAAMC,uBAAyC,GAAGJ,aAAlD;;AASA,MAAMK,mBAAmB,GAAG,EACjC,GAAGC,wCAD8B;AAEjCC,EAAAA,SAAS,EAAEC,2BAFsB;AAGjCN,EAAAA,KAAK,EAAE,OAAOO,WAAP,EAAoBC,OAApB,KAAgC,iCAAmBD,WAAnB,EAAgCC,OAAhC;AAHN,CAA5B;;AAMA,MAAMC,6BAA+C,GAAGN,mBAAxD","sourcesContent":["import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport parseQuantizedMesh from './lib/parse-quantized-mesh';\nimport loadTerrain from './lib/parse-terrain';\n\nimport {TerrainLoader as TerrainWorkerLoader} from './terrain-loader';\nimport {QuantizedMeshLoader as QuantizedMeshWorkerLoader} from './quantized-mesh-loader';\n\n// TerrainLoader\n\nexport {TerrainWorkerLoader};\n\nexport const TerrainLoader = {\n ...TerrainWorkerLoader,\n parse: loadTerrain\n};\n\nexport const _typecheckTerrainLoader: LoaderWithParser = TerrainLoader; // eslint-disable-line\n\n// QuantizedMeshLoader\n\nexport {QuantizedMeshWorkerLoader};\n\n/**\n * Loader for quantized meshes\n */\nexport const QuantizedMeshLoader = {\n ...QuantizedMeshWorkerLoader,\n parseSync: parseQuantizedMesh,\n parse: async (arrayBuffer, options) => parseQuantizedMesh(arrayBuffer, options)\n};\n\nexport const _typecheckQuantizedMeshLoader: LoaderWithParser = QuantizedMeshLoader;\n"],"file":"index.js"}
@@ -1,72 +1,48 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
3
  Object.defineProperty(exports, "__esModule", {
6
4
  value: true
7
5
  });
8
6
  exports.default = decode;
9
7
  exports.DECODING_STEPS = void 0;
10
-
11
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
12
-
13
- 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; } } }; }
14
-
15
- 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); }
16
-
17
- 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
-
19
- var QUANTIZED_MESH_HEADER = new Map([['centerX', Float64Array.BYTES_PER_ELEMENT], ['centerY', Float64Array.BYTES_PER_ELEMENT], ['centerZ', Float64Array.BYTES_PER_ELEMENT], ['minHeight', Float32Array.BYTES_PER_ELEMENT], ['maxHeight', Float32Array.BYTES_PER_ELEMENT], ['boundingSphereCenterX', Float64Array.BYTES_PER_ELEMENT], ['boundingSphereCenterY', Float64Array.BYTES_PER_ELEMENT], ['boundingSphereCenterZ', Float64Array.BYTES_PER_ELEMENT], ['boundingSphereRadius', Float64Array.BYTES_PER_ELEMENT], ['horizonOcclusionPointX', Float64Array.BYTES_PER_ELEMENT], ['horizonOcclusionPointY', Float64Array.BYTES_PER_ELEMENT], ['horizonOcclusionPointZ', Float64Array.BYTES_PER_ELEMENT]]);
8
+ const QUANTIZED_MESH_HEADER = new Map([['centerX', Float64Array.BYTES_PER_ELEMENT], ['centerY', Float64Array.BYTES_PER_ELEMENT], ['centerZ', Float64Array.BYTES_PER_ELEMENT], ['minHeight', Float32Array.BYTES_PER_ELEMENT], ['maxHeight', Float32Array.BYTES_PER_ELEMENT], ['boundingSphereCenterX', Float64Array.BYTES_PER_ELEMENT], ['boundingSphereCenterY', Float64Array.BYTES_PER_ELEMENT], ['boundingSphereCenterZ', Float64Array.BYTES_PER_ELEMENT], ['boundingSphereRadius', Float64Array.BYTES_PER_ELEMENT], ['horizonOcclusionPointX', Float64Array.BYTES_PER_ELEMENT], ['horizonOcclusionPointY', Float64Array.BYTES_PER_ELEMENT], ['horizonOcclusionPointZ', Float64Array.BYTES_PER_ELEMENT]]);
20
9
 
21
10
  function decodeZigZag(value) {
22
11
  return value >> 1 ^ -(value & 1);
23
12
  }
24
13
 
25
14
  function decodeHeader(dataView) {
26
- var position = 0;
27
- var header = {};
15
+ let position = 0;
16
+ const header = {};
28
17
 
29
- var _iterator = _createForOfIteratorHelper(QUANTIZED_MESH_HEADER),
30
- _step;
31
-
32
- try {
33
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
34
- var _step$value = (0, _slicedToArray2.default)(_step.value, 2),
35
- key = _step$value[0],
36
- bytesCount = _step$value[1];
37
-
38
- var getter = bytesCount === 8 ? dataView.getFloat64 : dataView.getFloat32;
39
- header[key] = getter.call(dataView, position, true);
40
- position += bytesCount;
41
- }
42
- } catch (err) {
43
- _iterator.e(err);
44
- } finally {
45
- _iterator.f();
18
+ for (const [key, bytesCount] of QUANTIZED_MESH_HEADER) {
19
+ const getter = bytesCount === 8 ? dataView.getFloat64 : dataView.getFloat32;
20
+ header[key] = getter.call(dataView, position, true);
21
+ position += bytesCount;
46
22
  }
47
23
 
48
24
  return {
49
- header: header,
25
+ header,
50
26
  headerEndPosition: position
51
27
  };
52
28
  }
53
29
 
54
30
  function decodeVertexData(dataView, headerEndPosition) {
55
- var position = headerEndPosition;
56
- var elementsPerVertex = 3;
57
- var vertexCount = dataView.getUint32(position, true);
58
- var vertexData = new Uint16Array(vertexCount * elementsPerVertex);
31
+ let position = headerEndPosition;
32
+ const elementsPerVertex = 3;
33
+ const vertexCount = dataView.getUint32(position, true);
34
+ const vertexData = new Uint16Array(vertexCount * elementsPerVertex);
59
35
  position += Uint32Array.BYTES_PER_ELEMENT;
60
- var bytesPerArrayElement = Uint16Array.BYTES_PER_ELEMENT;
61
- var elementArrayLength = vertexCount * bytesPerArrayElement;
62
- var uArrayStartPosition = position;
63
- var vArrayStartPosition = uArrayStartPosition + elementArrayLength;
64
- var heightArrayStartPosition = vArrayStartPosition + elementArrayLength;
65
- var u = 0;
66
- var v = 0;
67
- var height = 0;
68
-
69
- for (var i = 0; i < vertexCount; i++) {
36
+ const bytesPerArrayElement = Uint16Array.BYTES_PER_ELEMENT;
37
+ const elementArrayLength = vertexCount * bytesPerArrayElement;
38
+ const uArrayStartPosition = position;
39
+ const vArrayStartPosition = uArrayStartPosition + elementArrayLength;
40
+ const heightArrayStartPosition = vArrayStartPosition + elementArrayLength;
41
+ let u = 0;
42
+ let v = 0;
43
+ let height = 0;
44
+
45
+ for (let i = 0; i < vertexCount; i++) {
70
46
  u += decodeZigZag(dataView.getUint16(uArrayStartPosition + bytesPerArrayElement * i, true));
71
47
  v += decodeZigZag(dataView.getUint16(vArrayStartPosition + bytesPerArrayElement * i, true));
72
48
  height += decodeZigZag(dataView.getUint16(heightArrayStartPosition + bytesPerArrayElement * i, true));
@@ -77,14 +53,13 @@ function decodeVertexData(dataView, headerEndPosition) {
77
53
 
78
54
  position += elementArrayLength * 3;
79
55
  return {
80
- vertexData: vertexData,
56
+ vertexData,
81
57
  vertexDataEndPosition: position
82
58
  };
83
59
  }
84
60
 
85
- function decodeIndex(buffer, position, indicesCount, bytesPerIndex) {
86
- var encoded = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;
87
- var indices;
61
+ function decodeIndex(buffer, position, indicesCount, bytesPerIndex, encoded = true) {
62
+ let indices;
88
63
 
89
64
  if (bytesPerIndex === 2) {
90
65
  indices = new Uint16Array(buffer, position, indicesCount);
@@ -96,10 +71,10 @@ function decodeIndex(buffer, position, indicesCount, bytesPerIndex) {
96
71
  return indices;
97
72
  }
98
73
 
99
- var highest = 0;
74
+ let highest = 0;
100
75
 
101
- for (var i = 0; i < indices.length; ++i) {
102
- var code = indices[i];
76
+ for (let i = 0; i < indices.length; ++i) {
77
+ const code = indices[i];
103
78
  indices[i] = highest - code;
104
79
 
105
80
  if (code === 0) {
@@ -111,53 +86,53 @@ function decodeIndex(buffer, position, indicesCount, bytesPerIndex) {
111
86
  }
112
87
 
113
88
  function decodeTriangleIndices(dataView, vertexData, vertexDataEndPosition) {
114
- var position = vertexDataEndPosition;
115
- var elementsPerVertex = 3;
116
- var vertexCount = vertexData.length / elementsPerVertex;
117
- var bytesPerIndex = vertexCount > 65536 ? Uint32Array.BYTES_PER_ELEMENT : Uint16Array.BYTES_PER_ELEMENT;
89
+ let position = vertexDataEndPosition;
90
+ const elementsPerVertex = 3;
91
+ const vertexCount = vertexData.length / elementsPerVertex;
92
+ const bytesPerIndex = vertexCount > 65536 ? Uint32Array.BYTES_PER_ELEMENT : Uint16Array.BYTES_PER_ELEMENT;
118
93
 
119
94
  if (position % bytesPerIndex !== 0) {
120
95
  position += bytesPerIndex - position % bytesPerIndex;
121
96
  }
122
97
 
123
- var triangleCount = dataView.getUint32(position, true);
98
+ const triangleCount = dataView.getUint32(position, true);
124
99
  position += Uint32Array.BYTES_PER_ELEMENT;
125
- var triangleIndicesCount = triangleCount * 3;
126
- var triangleIndices = decodeIndex(dataView.buffer, position, triangleIndicesCount, bytesPerIndex);
100
+ const triangleIndicesCount = triangleCount * 3;
101
+ const triangleIndices = decodeIndex(dataView.buffer, position, triangleIndicesCount, bytesPerIndex);
127
102
  position += triangleIndicesCount * bytesPerIndex;
128
103
  return {
129
104
  triangleIndicesEndPosition: position,
130
- triangleIndices: triangleIndices
105
+ triangleIndices
131
106
  };
132
107
  }
133
108
 
134
109
  function decodeEdgeIndices(dataView, vertexData, triangleIndicesEndPosition) {
135
- var position = triangleIndicesEndPosition;
136
- var elementsPerVertex = 3;
137
- var vertexCount = vertexData.length / elementsPerVertex;
138
- var bytesPerIndex = vertexCount > 65536 ? Uint32Array.BYTES_PER_ELEMENT : Uint16Array.BYTES_PER_ELEMENT;
139
- var westVertexCount = dataView.getUint32(position, true);
110
+ let position = triangleIndicesEndPosition;
111
+ const elementsPerVertex = 3;
112
+ const vertexCount = vertexData.length / elementsPerVertex;
113
+ const bytesPerIndex = vertexCount > 65536 ? Uint32Array.BYTES_PER_ELEMENT : Uint16Array.BYTES_PER_ELEMENT;
114
+ const westVertexCount = dataView.getUint32(position, true);
140
115
  position += Uint32Array.BYTES_PER_ELEMENT;
141
- var westIndices = decodeIndex(dataView.buffer, position, westVertexCount, bytesPerIndex, false);
116
+ const westIndices = decodeIndex(dataView.buffer, position, westVertexCount, bytesPerIndex, false);
142
117
  position += westVertexCount * bytesPerIndex;
143
- var southVertexCount = dataView.getUint32(position, true);
118
+ const southVertexCount = dataView.getUint32(position, true);
144
119
  position += Uint32Array.BYTES_PER_ELEMENT;
145
- var southIndices = decodeIndex(dataView.buffer, position, southVertexCount, bytesPerIndex, false);
120
+ const southIndices = decodeIndex(dataView.buffer, position, southVertexCount, bytesPerIndex, false);
146
121
  position += southVertexCount * bytesPerIndex;
147
- var eastVertexCount = dataView.getUint32(position, true);
122
+ const eastVertexCount = dataView.getUint32(position, true);
148
123
  position += Uint32Array.BYTES_PER_ELEMENT;
149
- var eastIndices = decodeIndex(dataView.buffer, position, eastVertexCount, bytesPerIndex, false);
124
+ const eastIndices = decodeIndex(dataView.buffer, position, eastVertexCount, bytesPerIndex, false);
150
125
  position += eastVertexCount * bytesPerIndex;
151
- var northVertexCount = dataView.getUint32(position, true);
126
+ const northVertexCount = dataView.getUint32(position, true);
152
127
  position += Uint32Array.BYTES_PER_ELEMENT;
153
- var northIndices = decodeIndex(dataView.buffer, position, northVertexCount, bytesPerIndex, false);
128
+ const northIndices = decodeIndex(dataView.buffer, position, northVertexCount, bytesPerIndex, false);
154
129
  position += northVertexCount * bytesPerIndex;
155
130
  return {
156
131
  edgeIndicesEndPosition: position,
157
- westIndices: westIndices,
158
- southIndices: southIndices,
159
- eastIndices: eastIndices,
160
- northIndices: northIndices
132
+ westIndices,
133
+ southIndices,
134
+ eastIndices,
135
+ northIndices
161
136
  };
162
137
  }
163
138
 
@@ -170,23 +145,23 @@ function decodeWaterMaskExtension(extensionDataView) {
170
145
  }
171
146
 
172
147
  function decodeExtensions(dataView, indicesEndPosition) {
173
- var extensions = {};
148
+ const extensions = {};
174
149
 
175
150
  if (dataView.byteLength <= indicesEndPosition) {
176
151
  return {
177
- extensions: extensions,
152
+ extensions,
178
153
  extensionsEndPosition: indicesEndPosition
179
154
  };
180
155
  }
181
156
 
182
- var position = indicesEndPosition;
157
+ let position = indicesEndPosition;
183
158
 
184
159
  while (position < dataView.byteLength) {
185
- var extensionId = dataView.getUint8(position, true);
160
+ const extensionId = dataView.getUint8(position, true);
186
161
  position += Uint8Array.BYTES_PER_ELEMENT;
187
- var extensionLength = dataView.getUint32(position, true);
162
+ const extensionLength = dataView.getUint32(position, true);
188
163
  position += Uint32Array.BYTES_PER_ELEMENT;
189
- var extensionView = new DataView(dataView.buffer, position, extensionLength);
164
+ const extensionView = new DataView(dataView.buffer, position, extensionLength);
190
165
 
191
166
  switch (extensionId) {
192
167
  case 1:
@@ -209,12 +184,12 @@ function decodeExtensions(dataView, indicesEndPosition) {
209
184
  }
210
185
 
211
186
  return {
212
- extensions: extensions,
187
+ extensions,
213
188
  extensionsEndPosition: position
214
189
  };
215
190
  }
216
191
 
217
- var DECODING_STEPS = {
192
+ const DECODING_STEPS = {
218
193
  header: 0,
219
194
  vertices: 1,
220
195
  triangleIndices: 2,
@@ -222,78 +197,81 @@ var DECODING_STEPS = {
222
197
  extensions: 4
223
198
  };
224
199
  exports.DECODING_STEPS = DECODING_STEPS;
225
- var DEFAULT_OPTIONS = {
200
+ const DEFAULT_OPTIONS = {
226
201
  maxDecodingStep: DECODING_STEPS.extensions
227
202
  };
228
203
 
229
204
  function decode(data, userOptions) {
230
- var options = Object.assign({}, DEFAULT_OPTIONS, userOptions);
231
- var view = new DataView(data);
232
-
233
- var _decodeHeader = decodeHeader(view),
234
- header = _decodeHeader.header,
235
- headerEndPosition = _decodeHeader.headerEndPosition;
205
+ const options = Object.assign({}, DEFAULT_OPTIONS, userOptions);
206
+ const view = new DataView(data);
207
+ const {
208
+ header,
209
+ headerEndPosition
210
+ } = decodeHeader(view);
236
211
 
237
212
  if (options.maxDecodingStep < DECODING_STEPS.vertices) {
238
213
  return {
239
- header: header
214
+ header
240
215
  };
241
216
  }
242
217
 
243
- var _decodeVertexData = decodeVertexData(view, headerEndPosition),
244
- vertexData = _decodeVertexData.vertexData,
245
- vertexDataEndPosition = _decodeVertexData.vertexDataEndPosition;
218
+ const {
219
+ vertexData,
220
+ vertexDataEndPosition
221
+ } = decodeVertexData(view, headerEndPosition);
246
222
 
247
223
  if (options.maxDecodingStep < DECODING_STEPS.triangleIndices) {
248
224
  return {
249
- header: header,
250
- vertexData: vertexData
225
+ header,
226
+ vertexData
251
227
  };
252
228
  }
253
229
 
254
- var _decodeTriangleIndice = decodeTriangleIndices(view, vertexData, vertexDataEndPosition),
255
- triangleIndices = _decodeTriangleIndice.triangleIndices,
256
- triangleIndicesEndPosition = _decodeTriangleIndice.triangleIndicesEndPosition;
230
+ const {
231
+ triangleIndices,
232
+ triangleIndicesEndPosition
233
+ } = decodeTriangleIndices(view, vertexData, vertexDataEndPosition);
257
234
 
258
235
  if (options.maxDecodingStep < DECODING_STEPS.edgeIndices) {
259
236
  return {
260
- header: header,
261
- vertexData: vertexData,
262
- triangleIndices: triangleIndices
237
+ header,
238
+ vertexData,
239
+ triangleIndices
263
240
  };
264
241
  }
265
242
 
266
- var _decodeEdgeIndices = decodeEdgeIndices(view, vertexData, triangleIndicesEndPosition),
267
- westIndices = _decodeEdgeIndices.westIndices,
268
- southIndices = _decodeEdgeIndices.southIndices,
269
- eastIndices = _decodeEdgeIndices.eastIndices,
270
- northIndices = _decodeEdgeIndices.northIndices,
271
- edgeIndicesEndPosition = _decodeEdgeIndices.edgeIndicesEndPosition;
243
+ const {
244
+ westIndices,
245
+ southIndices,
246
+ eastIndices,
247
+ northIndices,
248
+ edgeIndicesEndPosition
249
+ } = decodeEdgeIndices(view, vertexData, triangleIndicesEndPosition);
272
250
 
273
251
  if (options.maxDecodingStep < DECODING_STEPS.extensions) {
274
252
  return {
275
- header: header,
276
- vertexData: vertexData,
277
- triangleIndices: triangleIndices,
278
- westIndices: westIndices,
279
- northIndices: northIndices,
280
- eastIndices: eastIndices,
281
- southIndices: southIndices
253
+ header,
254
+ vertexData,
255
+ triangleIndices,
256
+ westIndices,
257
+ northIndices,
258
+ eastIndices,
259
+ southIndices
282
260
  };
283
261
  }
284
262
 
285
- var _decodeExtensions = decodeExtensions(view, edgeIndicesEndPosition),
286
- extensions = _decodeExtensions.extensions;
287
-
263
+ const {
264
+ extensions
265
+ } = decodeExtensions(view, edgeIndicesEndPosition);
288
266
  return {
289
- header: header,
290
- vertexData: vertexData,
291
- triangleIndices: triangleIndices,
292
- westIndices: westIndices,
293
- northIndices: northIndices,
294
- eastIndices: eastIndices,
295
- southIndices: southIndices,
296
- extensions: extensions
267
+ header,
268
+ vertexData,
269
+ triangleIndices,
270
+ westIndices,
271
+ northIndices,
272
+ eastIndices,
273
+ southIndices,
274
+ extensions
297
275
  };
298
276
  }
299
277
  //# sourceMappingURL=decode-quantized-mesh.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/decode-quantized-mesh.js"],"names":["QUANTIZED_MESH_HEADER","Map","Float64Array","BYTES_PER_ELEMENT","Float32Array","decodeZigZag","value","decodeHeader","dataView","position","header","key","bytesCount","getter","getFloat64","getFloat32","call","headerEndPosition","decodeVertexData","elementsPerVertex","vertexCount","getUint32","vertexData","Uint16Array","Uint32Array","bytesPerArrayElement","elementArrayLength","uArrayStartPosition","vArrayStartPosition","heightArrayStartPosition","u","v","height","i","getUint16","vertexDataEndPosition","decodeIndex","buffer","indicesCount","bytesPerIndex","encoded","indices","highest","length","code","decodeTriangleIndices","triangleCount","triangleIndicesCount","triangleIndices","triangleIndicesEndPosition","decodeEdgeIndices","westVertexCount","westIndices","southVertexCount","southIndices","eastVertexCount","eastIndices","northVertexCount","northIndices","edgeIndicesEndPosition","decodeVertexNormalsExtension","extensionDataView","Uint8Array","byteOffset","byteLength","decodeWaterMaskExtension","slice","decodeExtensions","indicesEndPosition","extensions","extensionsEndPosition","extensionId","getUint8","extensionLength","extensionView","DataView","vertexNormals","waterMask","DECODING_STEPS","vertices","edgeIndices","DEFAULT_OPTIONS","maxDecodingStep","decode","data","userOptions","options","Object","assign","view"],"mappings":"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","sourcesContent":["// Copyright (C) 2018-2019 HERE Europe B.V.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\nconst QUANTIZED_MESH_HEADER = new Map([\n ['centerX', Float64Array.BYTES_PER_ELEMENT],\n ['centerY', Float64Array.BYTES_PER_ELEMENT],\n ['centerZ', Float64Array.BYTES_PER_ELEMENT],\n\n ['minHeight', Float32Array.BYTES_PER_ELEMENT],\n ['maxHeight', Float32Array.BYTES_PER_ELEMENT],\n\n ['boundingSphereCenterX', Float64Array.BYTES_PER_ELEMENT],\n ['boundingSphereCenterY', Float64Array.BYTES_PER_ELEMENT],\n ['boundingSphereCenterZ', Float64Array.BYTES_PER_ELEMENT],\n ['boundingSphereRadius', Float64Array.BYTES_PER_ELEMENT],\n\n ['horizonOcclusionPointX', Float64Array.BYTES_PER_ELEMENT],\n ['horizonOcclusionPointY', Float64Array.BYTES_PER_ELEMENT],\n ['horizonOcclusionPointZ', Float64Array.BYTES_PER_ELEMENT]\n]);\n\nfunction decodeZigZag(value) {\n return (value >> 1) ^ -(value & 1);\n}\n\nfunction decodeHeader(dataView) {\n let position = 0;\n const header = {};\n\n for (const [key, bytesCount] of QUANTIZED_MESH_HEADER) {\n const getter = bytesCount === 8 ? dataView.getFloat64 : dataView.getFloat32;\n\n header[key] = getter.call(dataView, position, true);\n position += bytesCount;\n }\n\n return {header, headerEndPosition: position};\n}\n\nfunction decodeVertexData(dataView, headerEndPosition) {\n let position = headerEndPosition;\n const elementsPerVertex = 3;\n const vertexCount = dataView.getUint32(position, true);\n const vertexData = new Uint16Array(vertexCount * elementsPerVertex);\n\n position += Uint32Array.BYTES_PER_ELEMENT;\n\n const bytesPerArrayElement = Uint16Array.BYTES_PER_ELEMENT;\n const elementArrayLength = vertexCount * bytesPerArrayElement;\n const uArrayStartPosition = position;\n const vArrayStartPosition = uArrayStartPosition + elementArrayLength;\n const heightArrayStartPosition = vArrayStartPosition + elementArrayLength;\n\n let u = 0;\n let v = 0;\n let height = 0;\n\n for (let i = 0; i < vertexCount; i++) {\n u += decodeZigZag(dataView.getUint16(uArrayStartPosition + bytesPerArrayElement * i, true));\n v += decodeZigZag(dataView.getUint16(vArrayStartPosition + bytesPerArrayElement * i, true));\n height += decodeZigZag(\n dataView.getUint16(heightArrayStartPosition + bytesPerArrayElement * i, true)\n );\n\n vertexData[i] = u;\n vertexData[i + vertexCount] = v;\n vertexData[i + vertexCount * 2] = height;\n }\n\n position += elementArrayLength * 3;\n\n return {vertexData, vertexDataEndPosition: position};\n}\n\nfunction decodeIndex(buffer, position, indicesCount, bytesPerIndex, encoded = true) {\n let indices;\n\n if (bytesPerIndex === 2) {\n indices = new Uint16Array(buffer, position, indicesCount);\n } else {\n indices = new Uint32Array(buffer, position, indicesCount);\n }\n\n if (!encoded) {\n return indices;\n }\n\n let highest = 0;\n\n for (let i = 0; i < indices.length; ++i) {\n const code = indices[i];\n\n indices[i] = highest - code;\n\n if (code === 0) {\n ++highest;\n }\n }\n\n return indices;\n}\n\nfunction decodeTriangleIndices(dataView, vertexData, vertexDataEndPosition) {\n let position = vertexDataEndPosition;\n const elementsPerVertex = 3;\n const vertexCount = vertexData.length / elementsPerVertex;\n const bytesPerIndex =\n vertexCount > 65536 ? Uint32Array.BYTES_PER_ELEMENT : Uint16Array.BYTES_PER_ELEMENT;\n\n if (position % bytesPerIndex !== 0) {\n position += bytesPerIndex - (position % bytesPerIndex);\n }\n\n const triangleCount = dataView.getUint32(position, true);\n position += Uint32Array.BYTES_PER_ELEMENT;\n\n const triangleIndicesCount = triangleCount * 3;\n const triangleIndices = decodeIndex(\n dataView.buffer,\n position,\n triangleIndicesCount,\n bytesPerIndex\n );\n position += triangleIndicesCount * bytesPerIndex;\n\n return {\n triangleIndicesEndPosition: position,\n triangleIndices\n };\n}\n\nfunction decodeEdgeIndices(dataView, vertexData, triangleIndicesEndPosition) {\n let position = triangleIndicesEndPosition;\n const elementsPerVertex = 3;\n const vertexCount = vertexData.length / elementsPerVertex;\n const bytesPerIndex =\n vertexCount > 65536 ? Uint32Array.BYTES_PER_ELEMENT : Uint16Array.BYTES_PER_ELEMENT;\n\n const westVertexCount = dataView.getUint32(position, true);\n position += Uint32Array.BYTES_PER_ELEMENT;\n\n const westIndices = decodeIndex(dataView.buffer, position, westVertexCount, bytesPerIndex, false);\n position += westVertexCount * bytesPerIndex;\n\n const southVertexCount = dataView.getUint32(position, true);\n position += Uint32Array.BYTES_PER_ELEMENT;\n\n const southIndices = decodeIndex(\n dataView.buffer,\n position,\n southVertexCount,\n bytesPerIndex,\n false\n );\n position += southVertexCount * bytesPerIndex;\n\n const eastVertexCount = dataView.getUint32(position, true);\n position += Uint32Array.BYTES_PER_ELEMENT;\n\n const eastIndices = decodeIndex(dataView.buffer, position, eastVertexCount, bytesPerIndex, false);\n position += eastVertexCount * bytesPerIndex;\n\n const northVertexCount = dataView.getUint32(position, true);\n position += Uint32Array.BYTES_PER_ELEMENT;\n\n const northIndices = decodeIndex(\n dataView.buffer,\n position,\n northVertexCount,\n bytesPerIndex,\n false\n );\n position += northVertexCount * bytesPerIndex;\n\n return {\n edgeIndicesEndPosition: position,\n westIndices,\n southIndices,\n eastIndices,\n northIndices\n };\n}\n\nfunction decodeVertexNormalsExtension(extensionDataView) {\n return new Uint8Array(\n extensionDataView.buffer,\n extensionDataView.byteOffset,\n extensionDataView.byteLength\n );\n}\n\nfunction decodeWaterMaskExtension(extensionDataView) {\n return extensionDataView.buffer.slice(\n extensionDataView.byteOffset,\n extensionDataView.byteOffset + extensionDataView.byteLength\n );\n}\n\nfunction decodeExtensions(dataView, indicesEndPosition) {\n const extensions = {};\n\n if (dataView.byteLength <= indicesEndPosition) {\n return {extensions, extensionsEndPosition: indicesEndPosition};\n }\n\n let position = indicesEndPosition;\n\n while (position < dataView.byteLength) {\n const extensionId = dataView.getUint8(position, true);\n position += Uint8Array.BYTES_PER_ELEMENT;\n\n const extensionLength = dataView.getUint32(position, true);\n position += Uint32Array.BYTES_PER_ELEMENT;\n\n const extensionView = new DataView(dataView.buffer, position, extensionLength);\n\n switch (extensionId) {\n case 1: {\n extensions.vertexNormals = decodeVertexNormalsExtension(extensionView);\n\n break;\n }\n case 2: {\n extensions.waterMask = decodeWaterMaskExtension(extensionView);\n\n break;\n }\n default: {\n // console.warn(`Unknown extension with id ${extensionId}`)\n }\n }\n\n position += extensionLength;\n }\n\n return {extensions, extensionsEndPosition: position};\n}\n\nexport const DECODING_STEPS = {\n header: 0,\n vertices: 1,\n triangleIndices: 2,\n edgeIndices: 3,\n extensions: 4\n};\n\nconst DEFAULT_OPTIONS = {\n maxDecodingStep: DECODING_STEPS.extensions\n};\n\nexport default function decode(data, userOptions) {\n const options = Object.assign({}, DEFAULT_OPTIONS, userOptions);\n const view = new DataView(data);\n const {header, headerEndPosition} = decodeHeader(view);\n\n if (options.maxDecodingStep < DECODING_STEPS.vertices) {\n return {header};\n }\n\n const {vertexData, vertexDataEndPosition} = decodeVertexData(view, headerEndPosition);\n\n if (options.maxDecodingStep < DECODING_STEPS.triangleIndices) {\n return {header, vertexData};\n }\n\n const {triangleIndices, triangleIndicesEndPosition} = decodeTriangleIndices(\n view,\n vertexData,\n vertexDataEndPosition\n );\n\n if (options.maxDecodingStep < DECODING_STEPS.edgeIndices) {\n return {header, vertexData, triangleIndices};\n }\n\n const {westIndices, southIndices, eastIndices, northIndices, edgeIndicesEndPosition} =\n decodeEdgeIndices(view, vertexData, triangleIndicesEndPosition);\n\n if (options.maxDecodingStep < DECODING_STEPS.extensions) {\n return {\n header,\n vertexData,\n triangleIndices,\n westIndices,\n northIndices,\n eastIndices,\n southIndices\n };\n }\n\n const {extensions} = decodeExtensions(view, edgeIndicesEndPosition);\n\n return {\n header,\n vertexData,\n triangleIndices,\n westIndices,\n northIndices,\n eastIndices,\n southIndices,\n extensions\n };\n}\n"],"file":"decode-quantized-mesh.js"}
1
+ {"version":3,"sources":["../../../src/lib/decode-quantized-mesh.ts"],"names":["QUANTIZED_MESH_HEADER","Map","Float64Array","BYTES_PER_ELEMENT","Float32Array","decodeZigZag","value","decodeHeader","dataView","position","header","key","bytesCount","getter","getFloat64","getFloat32","call","headerEndPosition","decodeVertexData","elementsPerVertex","vertexCount","getUint32","vertexData","Uint16Array","Uint32Array","bytesPerArrayElement","elementArrayLength","uArrayStartPosition","vArrayStartPosition","heightArrayStartPosition","u","v","height","i","getUint16","vertexDataEndPosition","decodeIndex","buffer","indicesCount","bytesPerIndex","encoded","indices","highest","length","code","decodeTriangleIndices","triangleCount","triangleIndicesCount","triangleIndices","triangleIndicesEndPosition","decodeEdgeIndices","westVertexCount","westIndices","southVertexCount","southIndices","eastVertexCount","eastIndices","northVertexCount","northIndices","edgeIndicesEndPosition","decodeVertexNormalsExtension","extensionDataView","Uint8Array","byteOffset","byteLength","decodeWaterMaskExtension","slice","decodeExtensions","indicesEndPosition","extensions","extensionsEndPosition","extensionId","getUint8","extensionLength","extensionView","DataView","vertexNormals","waterMask","DECODING_STEPS","vertices","edgeIndices","DEFAULT_OPTIONS","maxDecodingStep","decode","data","userOptions","options","Object","assign","view"],"mappings":"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","sourcesContent":["// Copyright (C) 2018-2019 HERE Europe B.V.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\nconst QUANTIZED_MESH_HEADER = new Map([\n ['centerX', Float64Array.BYTES_PER_ELEMENT],\n ['centerY', Float64Array.BYTES_PER_ELEMENT],\n ['centerZ', Float64Array.BYTES_PER_ELEMENT],\n\n ['minHeight', Float32Array.BYTES_PER_ELEMENT],\n ['maxHeight', Float32Array.BYTES_PER_ELEMENT],\n\n ['boundingSphereCenterX', Float64Array.BYTES_PER_ELEMENT],\n ['boundingSphereCenterY', Float64Array.BYTES_PER_ELEMENT],\n ['boundingSphereCenterZ', Float64Array.BYTES_PER_ELEMENT],\n ['boundingSphereRadius', Float64Array.BYTES_PER_ELEMENT],\n\n ['horizonOcclusionPointX', Float64Array.BYTES_PER_ELEMENT],\n ['horizonOcclusionPointY', Float64Array.BYTES_PER_ELEMENT],\n ['horizonOcclusionPointZ', Float64Array.BYTES_PER_ELEMENT]\n]);\n\nfunction decodeZigZag(value) {\n return (value >> 1) ^ -(value & 1);\n}\n\nfunction decodeHeader(dataView) {\n let position = 0;\n const header = {};\n\n for (const [key, bytesCount] of QUANTIZED_MESH_HEADER) {\n const getter = bytesCount === 8 ? dataView.getFloat64 : dataView.getFloat32;\n\n header[key] = getter.call(dataView, position, true);\n position += bytesCount;\n }\n\n return {header, headerEndPosition: position};\n}\n\nfunction decodeVertexData(dataView, headerEndPosition) {\n let position = headerEndPosition;\n const elementsPerVertex = 3;\n const vertexCount = dataView.getUint32(position, true);\n const vertexData = new Uint16Array(vertexCount * elementsPerVertex);\n\n position += Uint32Array.BYTES_PER_ELEMENT;\n\n const bytesPerArrayElement = Uint16Array.BYTES_PER_ELEMENT;\n const elementArrayLength = vertexCount * bytesPerArrayElement;\n const uArrayStartPosition = position;\n const vArrayStartPosition = uArrayStartPosition + elementArrayLength;\n const heightArrayStartPosition = vArrayStartPosition + elementArrayLength;\n\n let u = 0;\n let v = 0;\n let height = 0;\n\n for (let i = 0; i < vertexCount; i++) {\n u += decodeZigZag(dataView.getUint16(uArrayStartPosition + bytesPerArrayElement * i, true));\n v += decodeZigZag(dataView.getUint16(vArrayStartPosition + bytesPerArrayElement * i, true));\n height += decodeZigZag(\n dataView.getUint16(heightArrayStartPosition + bytesPerArrayElement * i, true)\n );\n\n vertexData[i] = u;\n vertexData[i + vertexCount] = v;\n vertexData[i + vertexCount * 2] = height;\n }\n\n position += elementArrayLength * 3;\n\n return {vertexData, vertexDataEndPosition: position};\n}\n\nfunction decodeIndex(buffer, position, indicesCount, bytesPerIndex, encoded = true) {\n let indices;\n\n if (bytesPerIndex === 2) {\n indices = new Uint16Array(buffer, position, indicesCount);\n } else {\n indices = new Uint32Array(buffer, position, indicesCount);\n }\n\n if (!encoded) {\n return indices;\n }\n\n let highest = 0;\n\n for (let i = 0; i < indices.length; ++i) {\n const code = indices[i];\n\n indices[i] = highest - code;\n\n if (code === 0) {\n ++highest;\n }\n }\n\n return indices;\n}\n\nfunction decodeTriangleIndices(dataView, vertexData, vertexDataEndPosition) {\n let position = vertexDataEndPosition;\n const elementsPerVertex = 3;\n const vertexCount = vertexData.length / elementsPerVertex;\n const bytesPerIndex =\n vertexCount > 65536 ? Uint32Array.BYTES_PER_ELEMENT : Uint16Array.BYTES_PER_ELEMENT;\n\n if (position % bytesPerIndex !== 0) {\n position += bytesPerIndex - (position % bytesPerIndex);\n }\n\n const triangleCount = dataView.getUint32(position, true);\n position += Uint32Array.BYTES_PER_ELEMENT;\n\n const triangleIndicesCount = triangleCount * 3;\n const triangleIndices = decodeIndex(\n dataView.buffer,\n position,\n triangleIndicesCount,\n bytesPerIndex\n );\n position += triangleIndicesCount * bytesPerIndex;\n\n return {\n triangleIndicesEndPosition: position,\n triangleIndices\n };\n}\n\nfunction decodeEdgeIndices(dataView, vertexData, triangleIndicesEndPosition) {\n let position = triangleIndicesEndPosition;\n const elementsPerVertex = 3;\n const vertexCount = vertexData.length / elementsPerVertex;\n const bytesPerIndex =\n vertexCount > 65536 ? Uint32Array.BYTES_PER_ELEMENT : Uint16Array.BYTES_PER_ELEMENT;\n\n const westVertexCount = dataView.getUint32(position, true);\n position += Uint32Array.BYTES_PER_ELEMENT;\n\n const westIndices = decodeIndex(dataView.buffer, position, westVertexCount, bytesPerIndex, false);\n position += westVertexCount * bytesPerIndex;\n\n const southVertexCount = dataView.getUint32(position, true);\n position += Uint32Array.BYTES_PER_ELEMENT;\n\n const southIndices = decodeIndex(\n dataView.buffer,\n position,\n southVertexCount,\n bytesPerIndex,\n false\n );\n position += southVertexCount * bytesPerIndex;\n\n const eastVertexCount = dataView.getUint32(position, true);\n position += Uint32Array.BYTES_PER_ELEMENT;\n\n const eastIndices = decodeIndex(dataView.buffer, position, eastVertexCount, bytesPerIndex, false);\n position += eastVertexCount * bytesPerIndex;\n\n const northVertexCount = dataView.getUint32(position, true);\n position += Uint32Array.BYTES_PER_ELEMENT;\n\n const northIndices = decodeIndex(\n dataView.buffer,\n position,\n northVertexCount,\n bytesPerIndex,\n false\n );\n position += northVertexCount * bytesPerIndex;\n\n return {\n edgeIndicesEndPosition: position,\n westIndices,\n southIndices,\n eastIndices,\n northIndices\n };\n}\n\nfunction decodeVertexNormalsExtension(extensionDataView) {\n return new Uint8Array(\n extensionDataView.buffer,\n extensionDataView.byteOffset,\n extensionDataView.byteLength\n );\n}\n\nfunction decodeWaterMaskExtension(extensionDataView) {\n return extensionDataView.buffer.slice(\n extensionDataView.byteOffset,\n extensionDataView.byteOffset + extensionDataView.byteLength\n );\n}\n\ntype Extensions = {\n vertexNormals?: any;\n waterMask?: any;\n};\n\nfunction decodeExtensions(dataView, indicesEndPosition) {\n const extensions: Extensions = {};\n\n if (dataView.byteLength <= indicesEndPosition) {\n return {extensions, extensionsEndPosition: indicesEndPosition};\n }\n\n let position = indicesEndPosition;\n\n while (position < dataView.byteLength) {\n const extensionId = dataView.getUint8(position, true);\n position += Uint8Array.BYTES_PER_ELEMENT;\n\n const extensionLength = dataView.getUint32(position, true);\n position += Uint32Array.BYTES_PER_ELEMENT;\n\n const extensionView = new DataView(dataView.buffer, position, extensionLength);\n\n switch (extensionId) {\n case 1: {\n extensions.vertexNormals = decodeVertexNormalsExtension(extensionView);\n\n break;\n }\n case 2: {\n extensions.waterMask = decodeWaterMaskExtension(extensionView);\n\n break;\n }\n default: {\n // console.warn(`Unknown extension with id ${extensionId}`)\n }\n }\n\n position += extensionLength;\n }\n\n return {extensions, extensionsEndPosition: position};\n}\n\nexport const DECODING_STEPS = {\n header: 0,\n vertices: 1,\n triangleIndices: 2,\n edgeIndices: 3,\n extensions: 4\n};\n\nconst DEFAULT_OPTIONS = {\n maxDecodingStep: DECODING_STEPS.extensions\n};\n\nexport default function decode(data, userOptions) {\n const options = Object.assign({}, DEFAULT_OPTIONS, userOptions);\n const view = new DataView(data);\n const {header, headerEndPosition} = decodeHeader(view);\n\n if (options.maxDecodingStep < DECODING_STEPS.vertices) {\n return {header};\n }\n\n const {vertexData, vertexDataEndPosition} = decodeVertexData(view, headerEndPosition);\n\n if (options.maxDecodingStep < DECODING_STEPS.triangleIndices) {\n return {header, vertexData};\n }\n\n const {triangleIndices, triangleIndicesEndPosition} = decodeTriangleIndices(\n view,\n vertexData,\n vertexDataEndPosition\n );\n\n if (options.maxDecodingStep < DECODING_STEPS.edgeIndices) {\n return {header, vertexData, triangleIndices};\n }\n\n const {westIndices, southIndices, eastIndices, northIndices, edgeIndicesEndPosition} =\n decodeEdgeIndices(view, vertexData, triangleIndicesEndPosition);\n\n if (options.maxDecodingStep < DECODING_STEPS.extensions) {\n return {\n header,\n vertexData,\n triangleIndices,\n westIndices,\n northIndices,\n eastIndices,\n southIndices\n };\n }\n\n const {extensions} = decodeExtensions(view, edgeIndicesEndPosition);\n\n return {\n header,\n vertexData,\n triangleIndices,\n westIndices,\n northIndices,\n eastIndices,\n southIndices,\n extensions\n };\n}\n"],"file":"decode-quantized-mesh.js"}