@loaders.gl/3d-tiles 3.3.0-alpha.4 → 3.3.0-alpha.6

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 (145) hide show
  1. package/dist/dist.min.js +924 -1372
  2. package/dist/es5/bundle.js +0 -1
  3. package/dist/es5/bundle.js.map +1 -1
  4. package/dist/es5/cesium-ion-loader.js +7 -26
  5. package/dist/es5/cesium-ion-loader.js.map +1 -1
  6. package/dist/es5/index.js +14 -23
  7. package/dist/es5/index.js.map +1 -1
  8. package/dist/es5/lib/classes/helpers/tile-3d-accessor-utils.js +1 -5
  9. package/dist/es5/lib/classes/helpers/tile-3d-accessor-utils.js.map +1 -1
  10. package/dist/es5/lib/classes/tile-3d-batch-table-hierarchy.js +1 -40
  11. package/dist/es5/lib/classes/tile-3d-batch-table-hierarchy.js.map +1 -1
  12. package/dist/es5/lib/classes/tile-3d-batch-table.js +12 -59
  13. package/dist/es5/lib/classes/tile-3d-batch-table.js.map +1 -1
  14. package/dist/es5/lib/classes/tile-3d-feature-table.js +4 -23
  15. package/dist/es5/lib/classes/tile-3d-feature-table.js.map +1 -1
  16. package/dist/es5/lib/constants.js +3 -1
  17. package/dist/es5/lib/constants.js.map +1 -1
  18. package/dist/es5/lib/encoders/encode-3d-tile-batched-model.js +7 -16
  19. package/dist/es5/lib/encoders/encode-3d-tile-batched-model.js.map +1 -1
  20. package/dist/es5/lib/encoders/encode-3d-tile-composite.js +2 -11
  21. package/dist/es5/lib/encoders/encode-3d-tile-composite.js.map +1 -1
  22. package/dist/es5/lib/encoders/encode-3d-tile-instanced-model.js +10 -17
  23. package/dist/es5/lib/encoders/encode-3d-tile-instanced-model.js.map +1 -1
  24. package/dist/es5/lib/encoders/encode-3d-tile-point-cloud.js +8 -16
  25. package/dist/es5/lib/encoders/encode-3d-tile-point-cloud.js.map +1 -1
  26. package/dist/es5/lib/encoders/encode-3d-tile.js +0 -12
  27. package/dist/es5/lib/encoders/encode-3d-tile.js.map +1 -1
  28. package/dist/es5/lib/encoders/helpers/encode-3d-tile-header.js +6 -9
  29. package/dist/es5/lib/encoders/helpers/encode-3d-tile-header.js.map +1 -1
  30. package/dist/es5/lib/ion/ion.js +5 -46
  31. package/dist/es5/lib/ion/ion.js.map +1 -1
  32. package/dist/es5/lib/parsers/helpers/normalize-3d-tile-colors.js +2 -11
  33. package/dist/es5/lib/parsers/helpers/normalize-3d-tile-colors.js.map +1 -1
  34. package/dist/es5/lib/parsers/helpers/normalize-3d-tile-normals.js +0 -8
  35. package/dist/es5/lib/parsers/helpers/normalize-3d-tile-normals.js.map +1 -1
  36. package/dist/es5/lib/parsers/helpers/normalize-3d-tile-positions.js +0 -5
  37. package/dist/es5/lib/parsers/helpers/normalize-3d-tile-positions.js.map +1 -1
  38. package/dist/es5/lib/parsers/helpers/parse-3d-implicit-tiles.js +17 -51
  39. package/dist/es5/lib/parsers/helpers/parse-3d-implicit-tiles.js.map +1 -1
  40. package/dist/es5/lib/parsers/helpers/parse-3d-tile-gltf-view.js +6 -25
  41. package/dist/es5/lib/parsers/helpers/parse-3d-tile-gltf-view.js.map +1 -1
  42. package/dist/es5/lib/parsers/helpers/parse-3d-tile-header.js +1 -1
  43. package/dist/es5/lib/parsers/helpers/parse-3d-tile-header.js.map +1 -1
  44. package/dist/es5/lib/parsers/helpers/parse-3d-tile-subtree.js +0 -38
  45. package/dist/es5/lib/parsers/helpers/parse-3d-tile-subtree.js.map +1 -1
  46. package/dist/es5/lib/parsers/helpers/parse-3d-tile-tables.js +6 -14
  47. package/dist/es5/lib/parsers/helpers/parse-3d-tile-tables.js.map +1 -1
  48. package/dist/es5/lib/parsers/helpers/parse-utils.js +1 -3
  49. package/dist/es5/lib/parsers/helpers/parse-utils.js.map +1 -1
  50. package/dist/es5/lib/parsers/parse-3d-tile-batched-model.js +0 -16
  51. package/dist/es5/lib/parsers/parse-3d-tile-batched-model.js.map +1 -1
  52. package/dist/es5/lib/parsers/parse-3d-tile-composite.js +1 -11
  53. package/dist/es5/lib/parsers/parse-3d-tile-composite.js.map +1 -1
  54. package/dist/es5/lib/parsers/parse-3d-tile-gltf.js +0 -8
  55. package/dist/es5/lib/parsers/parse-3d-tile-gltf.js.map +1 -1
  56. package/dist/es5/lib/parsers/parse-3d-tile-header.js +2 -70
  57. package/dist/es5/lib/parsers/parse-3d-tile-header.js.map +1 -1
  58. package/dist/es5/lib/parsers/parse-3d-tile-instanced-model.js +5 -41
  59. package/dist/es5/lib/parsers/parse-3d-tile-instanced-model.js.map +1 -1
  60. package/dist/es5/lib/parsers/parse-3d-tile-point-cloud.js +4 -71
  61. package/dist/es5/lib/parsers/parse-3d-tile-point-cloud.js.map +1 -1
  62. package/dist/es5/lib/parsers/parse-3d-tile.js +5 -28
  63. package/dist/es5/lib/parsers/parse-3d-tile.js.map +1 -1
  64. package/dist/es5/lib/utils/version.js +1 -1
  65. package/dist/es5/lib/utils/version.js.map +1 -1
  66. package/dist/es5/tile-3d-subtree-loader.js +0 -4
  67. package/dist/es5/tile-3d-subtree-loader.js.map +1 -1
  68. package/dist/es5/tile-3d-writer.js +0 -6
  69. package/dist/es5/tile-3d-writer.js.map +1 -1
  70. package/dist/es5/tiles-3d-loader.js +0 -29
  71. package/dist/es5/tiles-3d-loader.js.map +1 -1
  72. package/dist/es5/types.js.map +1 -1
  73. package/dist/esm/bundle.js +1 -1
  74. package/dist/esm/bundle.js.map +1 -1
  75. package/dist/esm/cesium-ion-loader.js +9 -7
  76. package/dist/esm/cesium-ion-loader.js.map +1 -1
  77. package/dist/esm/index.js +4 -0
  78. package/dist/esm/index.js.map +1 -1
  79. package/dist/esm/lib/classes/helpers/tile-3d-accessor-utils.js +1 -0
  80. package/dist/esm/lib/classes/helpers/tile-3d-accessor-utils.js.map +1 -1
  81. package/dist/esm/lib/classes/tile-3d-batch-table-hierarchy.js +3 -40
  82. package/dist/esm/lib/classes/tile-3d-batch-table-hierarchy.js.map +1 -1
  83. package/dist/esm/lib/classes/tile-3d-batch-table.js +7 -67
  84. package/dist/esm/lib/classes/tile-3d-batch-table.js.map +1 -1
  85. package/dist/esm/lib/classes/tile-3d-feature-table.js +5 -26
  86. package/dist/esm/lib/classes/tile-3d-feature-table.js.map +1 -1
  87. package/dist/esm/lib/constants.js +3 -0
  88. package/dist/esm/lib/constants.js.map +1 -1
  89. package/dist/esm/lib/encoders/encode-3d-tile-batched-model.js +5 -3
  90. package/dist/esm/lib/encoders/encode-3d-tile-batched-model.js.map +1 -1
  91. package/dist/esm/lib/encoders/encode-3d-tile-composite.js +2 -2
  92. package/dist/esm/lib/encoders/encode-3d-tile-composite.js.map +1 -1
  93. package/dist/esm/lib/encoders/encode-3d-tile-instanced-model.js +5 -1
  94. package/dist/esm/lib/encoders/encode-3d-tile-instanced-model.js.map +1 -1
  95. package/dist/esm/lib/encoders/encode-3d-tile-point-cloud.js +4 -1
  96. package/dist/esm/lib/encoders/encode-3d-tile-point-cloud.js.map +1 -1
  97. package/dist/esm/lib/encoders/encode-3d-tile.js +2 -6
  98. package/dist/esm/lib/encoders/encode-3d-tile.js.map +1 -1
  99. package/dist/esm/lib/encoders/helpers/encode-3d-tile-header.js +3 -3
  100. package/dist/esm/lib/encoders/helpers/encode-3d-tile-header.js.map +1 -1
  101. package/dist/esm/lib/ion/ion.js +10 -8
  102. package/dist/esm/lib/ion/ion.js.map +1 -1
  103. package/dist/esm/lib/parsers/helpers/normalize-3d-tile-colors.js +1 -6
  104. package/dist/esm/lib/parsers/helpers/normalize-3d-tile-colors.js.map +1 -1
  105. package/dist/esm/lib/parsers/helpers/normalize-3d-tile-normals.js +0 -4
  106. package/dist/esm/lib/parsers/helpers/normalize-3d-tile-normals.js.map +1 -1
  107. package/dist/esm/lib/parsers/helpers/normalize-3d-tile-positions.js +1 -2
  108. package/dist/esm/lib/parsers/helpers/normalize-3d-tile-positions.js.map +1 -1
  109. package/dist/esm/lib/parsers/helpers/parse-3d-implicit-tiles.js +2 -16
  110. package/dist/esm/lib/parsers/helpers/parse-3d-implicit-tiles.js.map +1 -1
  111. package/dist/esm/lib/parsers/helpers/parse-3d-tile-gltf-view.js +6 -9
  112. package/dist/esm/lib/parsers/helpers/parse-3d-tile-gltf-view.js.map +1 -1
  113. package/dist/esm/lib/parsers/helpers/parse-3d-tile-header.js +5 -2
  114. package/dist/esm/lib/parsers/helpers/parse-3d-tile-header.js.map +1 -1
  115. package/dist/esm/lib/parsers/helpers/parse-3d-tile-subtree.js +1 -13
  116. package/dist/esm/lib/parsers/helpers/parse-3d-tile-subtree.js.map +1 -1
  117. package/dist/esm/lib/parsers/helpers/parse-3d-tile-tables.js +4 -7
  118. package/dist/esm/lib/parsers/helpers/parse-3d-tile-tables.js.map +1 -1
  119. package/dist/esm/lib/parsers/helpers/parse-utils.js +6 -1
  120. package/dist/esm/lib/parsers/helpers/parse-utils.js.map +1 -1
  121. package/dist/esm/lib/parsers/parse-3d-tile-batched-model.js +3 -4
  122. package/dist/esm/lib/parsers/parse-3d-tile-batched-model.js.map +1 -1
  123. package/dist/esm/lib/parsers/parse-3d-tile-composite.js +5 -1
  124. package/dist/esm/lib/parsers/parse-3d-tile-composite.js.map +1 -1
  125. package/dist/esm/lib/parsers/parse-3d-tile-gltf.js.map +1 -1
  126. package/dist/esm/lib/parsers/parse-3d-tile-header.js +3 -26
  127. package/dist/esm/lib/parsers/parse-3d-tile-header.js.map +1 -1
  128. package/dist/esm/lib/parsers/parse-3d-tile-instanced-model.js +7 -25
  129. package/dist/esm/lib/parsers/parse-3d-tile-instanced-model.js.map +1 -1
  130. package/dist/esm/lib/parsers/parse-3d-tile-point-cloud.js +9 -37
  131. package/dist/esm/lib/parsers/parse-3d-tile-point-cloud.js.map +1 -1
  132. package/dist/esm/lib/parsers/parse-3d-tile.js +8 -6
  133. package/dist/esm/lib/parsers/parse-3d-tile.js.map +1 -1
  134. package/dist/esm/lib/utils/version.js +2 -1
  135. package/dist/esm/lib/utils/version.js.map +1 -1
  136. package/dist/esm/tile-3d-subtree-loader.js +1 -0
  137. package/dist/esm/tile-3d-subtree-loader.js.map +1 -1
  138. package/dist/esm/tile-3d-writer.js +1 -1
  139. package/dist/esm/tile-3d-writer.js.map +1 -1
  140. package/dist/esm/tiles-3d-loader.js +1 -8
  141. package/dist/esm/tiles-3d-loader.js.map +1 -1
  142. package/dist/esm/types.js.map +1 -1
  143. package/dist/lib/classes/helpers/tile-3d-accessor-utils.d.ts +1 -1
  144. package/dist/lib/classes/tile-3d-batch-table.d.ts +1 -1
  145. package/package.json +7 -7
@@ -1,94 +1,70 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
7
+ exports.normalizeImplicitTileData = normalizeImplicitTileData;
8
+ exports.normalizeImplicitTileHeaders = normalizeImplicitTileHeaders;
8
9
  exports.normalizeTileData = normalizeTileData;
9
10
  exports.normalizeTileHeaders = normalizeTileHeaders;
10
- exports.normalizeImplicitTileHeaders = normalizeImplicitTileHeaders;
11
- exports.normalizeImplicitTileData = normalizeImplicitTileData;
12
-
13
11
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
14
-
15
12
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
16
-
17
13
  var _tile3dSubtreeLoader = require("../../tile-3d-subtree-loader");
18
-
19
14
  var _core = require("@loaders.gl/core");
20
-
21
15
  var _tiles = require("@loaders.gl/tiles");
22
-
23
16
  var _parse3dImplicitTiles = require("./helpers/parse-3d-implicit-tiles");
24
-
25
17
  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; } } }; }
26
-
27
18
  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); }
28
-
29
19
  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; }
30
-
31
20
  function getTileType(tile) {
32
21
  if (!tile.contentUrl) {
33
22
  return _tiles.TILE_TYPE.EMPTY;
34
23
  }
35
-
36
24
  var contentUrl = tile.contentUrl;
37
25
  var fileExtension = contentUrl.split('.').pop();
38
-
39
26
  switch (fileExtension) {
40
27
  case 'pnts':
41
28
  return _tiles.TILE_TYPE.POINTCLOUD;
42
-
43
29
  case 'i3dm':
44
30
  case 'b3dm':
45
31
  case 'glb':
46
32
  case 'gltf':
47
33
  return _tiles.TILE_TYPE.SCENEGRAPH;
48
-
49
34
  default:
50
35
  return fileExtension;
51
36
  }
52
37
  }
53
-
54
38
  function getRefine(refine) {
55
39
  switch (refine) {
56
40
  case 'REPLACE':
57
41
  case 'replace':
58
42
  return _tiles.TILE_REFINEMENT.REPLACE;
59
-
60
43
  case 'ADD':
61
44
  case 'add':
62
45
  return _tiles.TILE_REFINEMENT.ADD;
63
-
64
46
  default:
65
47
  return refine;
66
48
  }
67
49
  }
68
-
69
50
  function resolveUri(uri, basePath) {
70
51
  var urlSchemeRegex = /^[a-z][0-9a-z+.-]*:/i;
71
-
72
52
  if (urlSchemeRegex.test(basePath)) {
73
53
  var url = new URL(uri, "".concat(basePath, "/"));
74
54
  return decodeURI(url.toString());
75
55
  } else if (uri.startsWith('/')) {
76
56
  return uri;
77
57
  }
78
-
79
58
  return "".concat(basePath, "/").concat(uri);
80
59
  }
81
-
82
60
  function normalizeTileData(tile, options) {
83
61
  if (!tile) {
84
62
  return null;
85
63
  }
86
-
87
64
  if (tile.content) {
88
65
  var contentUri = tile.content.uri || tile.content.url;
89
66
  tile.contentUrl = resolveUri(contentUri, options.basePath);
90
67
  }
91
-
92
68
  tile.id = tile.contentUrl;
93
69
  tile.lodMetricType = _tiles.LOD_METRIC_TYPE.GEOMETRIC_ERROR;
94
70
  tile.lodMetricValue = tile.geometricError;
@@ -101,109 +77,82 @@ function normalizeTileData(tile, options) {
101
77
  function normalizeTileHeaders(_x, _x2) {
102
78
  return _normalizeTileHeaders.apply(this, arguments);
103
79
  }
104
-
105
80
  function _normalizeTileHeaders() {
106
81
  _normalizeTileHeaders = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(tileset, options) {
107
82
  var basePath, root, rootImplicitTilingExtension, stack, tile, children, _iterator, _step, childHeader, childImplicitTilingExtension;
108
-
109
83
  return _regenerator.default.wrap(function _callee$(_context) {
110
84
  while (1) {
111
85
  switch (_context.prev = _context.next) {
112
86
  case 0:
113
87
  basePath = tileset.basePath;
114
88
  rootImplicitTilingExtension = getImplicitTilingExtensionData(tileset === null || tileset === void 0 ? void 0 : tileset.root);
115
-
116
89
  if (!(rootImplicitTilingExtension && tileset.root)) {
117
90
  _context.next = 8;
118
91
  break;
119
92
  }
120
-
121
93
  _context.next = 5;
122
94
  return normalizeImplicitTileHeaders(tileset.root, tileset, rootImplicitTilingExtension, options);
123
-
124
95
  case 5:
125
96
  root = _context.sent;
126
97
  _context.next = 9;
127
98
  break;
128
-
129
99
  case 8:
130
100
  root = normalizeTileData(tileset.root, tileset);
131
-
132
101
  case 9:
133
102
  stack = [];
134
103
  stack.push(root);
135
-
136
104
  case 11:
137
105
  if (!(stack.length > 0)) {
138
106
  _context.next = 40;
139
107
  break;
140
108
  }
141
-
142
109
  tile = stack.pop() || {};
143
110
  children = tile.children || [];
144
111
  _iterator = _createForOfIteratorHelper(children);
145
112
  _context.prev = 15;
146
-
147
113
  _iterator.s();
148
-
149
114
  case 17:
150
115
  if ((_step = _iterator.n()).done) {
151
116
  _context.next = 30;
152
117
  break;
153
118
  }
154
-
155
119
  childHeader = _step.value;
156
120
  childImplicitTilingExtension = getImplicitTilingExtensionData(childHeader);
157
-
158
121
  if (!childImplicitTilingExtension) {
159
122
  _context.next = 26;
160
123
  break;
161
124
  }
162
-
163
125
  _context.next = 23;
164
126
  return normalizeImplicitTileHeaders(childHeader, tileset, childImplicitTilingExtension, options);
165
-
166
127
  case 23:
167
128
  childHeader = _context.sent;
168
129
  _context.next = 27;
169
130
  break;
170
-
171
131
  case 26:
172
132
  normalizeTileData(childHeader, {
173
133
  basePath: basePath
174
134
  });
175
-
176
135
  case 27:
177
136
  stack.push(childHeader);
178
-
179
137
  case 28:
180
138
  _context.next = 17;
181
139
  break;
182
-
183
140
  case 30:
184
141
  _context.next = 35;
185
142
  break;
186
-
187
143
  case 32:
188
144
  _context.prev = 32;
189
145
  _context.t0 = _context["catch"](15);
190
-
191
146
  _iterator.e(_context.t0);
192
-
193
147
  case 35:
194
148
  _context.prev = 35;
195
-
196
149
  _iterator.f();
197
-
198
150
  return _context.finish(35);
199
-
200
151
  case 38:
201
152
  _context.next = 11;
202
153
  break;
203
-
204
154
  case 40:
205
155
  return _context.abrupt("return", root);
206
-
207
156
  case 41:
208
157
  case "end":
209
158
  return _context.stop();
@@ -213,15 +162,12 @@ function _normalizeTileHeaders() {
213
162
  }));
214
163
  return _normalizeTileHeaders.apply(this, arguments);
215
164
  }
216
-
217
165
  function normalizeImplicitTileHeaders(_x3, _x4, _x5, _x6) {
218
166
  return _normalizeImplicitTileHeaders.apply(this, arguments);
219
167
  }
220
-
221
168
  function _normalizeImplicitTileHeaders() {
222
169
  _normalizeImplicitTileHeaders = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee2(tile, tileset, implicitTilingExtension, options) {
223
170
  var _tileset$root;
224
-
225
171
  var basePath, subdivisionScheme, maximumLevel, subtreeLevels, subtreesUriTemplate, replacedUrlTemplate, subtreeUrl, subtree, contentUrlTemplate, refine, rootLodMetricValue, rootBoundingVolume, implicitOptions;
226
172
  return _regenerator.default.wrap(function _callee2$(_context2) {
227
173
  while (1) {
@@ -233,7 +179,6 @@ function _normalizeImplicitTileHeaders() {
233
179
  subtreeUrl = resolveUri(replacedUrlTemplate, basePath);
234
180
  _context2.next = 6;
235
181
  return (0, _core.load)(subtreeUrl, _tile3dSubtreeLoader.Tile3DSubtreeLoader, options);
236
-
237
182
  case 6:
238
183
  subtree = _context2.sent;
239
184
  contentUrlTemplate = resolveUri(tile.content.uri, basePath);
@@ -256,10 +201,8 @@ function _normalizeImplicitTileHeaders() {
256
201
  };
257
202
  _context2.next = 14;
258
203
  return normalizeImplicitTileData(tile, subtree, implicitOptions);
259
-
260
204
  case 14:
261
205
  return _context2.abrupt("return", _context2.sent);
262
-
263
206
  case 15:
264
207
  case "end":
265
208
  return _context2.stop();
@@ -269,15 +212,12 @@ function _normalizeImplicitTileHeaders() {
269
212
  }));
270
213
  return _normalizeImplicitTileHeaders.apply(this, arguments);
271
214
  }
272
-
273
215
  function normalizeImplicitTileData(_x7, _x8, _x9) {
274
216
  return _normalizeImplicitTileData.apply(this, arguments);
275
217
  }
276
-
277
218
  function _normalizeImplicitTileData() {
278
219
  _normalizeImplicitTileData = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee3(tile, rootSubtree, options) {
279
220
  var _yield$parseImplicitT, children, contentUrl;
280
-
281
221
  return _regenerator.default.wrap(function _callee3$(_context3) {
282
222
  while (1) {
283
223
  switch (_context3.prev = _context3.next) {
@@ -286,9 +226,7 @@ function _normalizeImplicitTileData() {
286
226
  _context3.next = 2;
287
227
  break;
288
228
  }
289
-
290
229
  return _context3.abrupt("return", null);
291
-
292
230
  case 2:
293
231
  tile.lodMetricType = _tiles.LOD_METRIC_TYPE.GEOMETRIC_ERROR;
294
232
  tile.lodMetricValue = tile.geometricError;
@@ -298,25 +236,21 @@ function _normalizeImplicitTileData() {
298
236
  subtree: rootSubtree,
299
237
  options: options
300
238
  });
301
-
302
239
  case 7:
303
240
  _yield$parseImplicitT = _context3.sent;
304
241
  children = _yield$parseImplicitT.children;
305
242
  contentUrl = _yield$parseImplicitT.contentUrl;
306
-
307
243
  if (contentUrl) {
308
244
  tile.contentUrl = contentUrl;
309
245
  tile.content = {
310
246
  uri: contentUrl.replace("".concat(options.basePath, "/"), '')
311
247
  };
312
248
  }
313
-
314
249
  tile.refine = getRefine(tile.refine);
315
250
  tile.type = getTileType(tile);
316
251
  tile.children = children;
317
252
  tile.id = tile.contentUrl;
318
253
  return _context3.abrupt("return", tile);
319
-
320
254
  case 16:
321
255
  case "end":
322
256
  return _context3.stop();
@@ -326,10 +260,8 @@ function _normalizeImplicitTileData() {
326
260
  }));
327
261
  return _normalizeImplicitTileData.apply(this, arguments);
328
262
  }
329
-
330
263
  function getImplicitTilingExtensionData(tile) {
331
264
  var _tile$extensions;
332
-
333
265
  return (tile === null || tile === void 0 ? void 0 : (_tile$extensions = tile.extensions) === null || _tile$extensions === void 0 ? void 0 : _tile$extensions['3DTILES_implicit_tiling']) || (tile === null || tile === void 0 ? void 0 : tile.implicitTiling);
334
266
  }
335
267
  //# sourceMappingURL=parse-3d-tile-header.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/parsers/parse-3d-tile-header.ts"],"names":["getTileType","tile","contentUrl","TILE_TYPE","EMPTY","fileExtension","split","pop","POINTCLOUD","SCENEGRAPH","getRefine","refine","TILE_REFINEMENT","REPLACE","ADD","resolveUri","uri","basePath","urlSchemeRegex","test","url","URL","decodeURI","toString","startsWith","normalizeTileData","options","content","contentUri","id","lodMetricType","LOD_METRIC_TYPE","GEOMETRIC_ERROR","lodMetricValue","geometricError","transformMatrix","transform","type","normalizeTileHeaders","tileset","rootImplicitTilingExtension","getImplicitTilingExtensionData","root","normalizeImplicitTileHeaders","stack","push","length","children","childHeader","childImplicitTilingExtension","implicitTilingExtension","subdivisionScheme","maximumLevel","subtreeLevels","subtreesUriTemplate","subtrees","replacedUrlTemplate","subtreeUrl","Tile3DSubtreeLoader","subtree","contentUrlTemplate","rootLodMetricValue","rootBoundingVolume","boundingVolume","implicitOptions","normalizeImplicitTileData","rootSubtree","replace","extensions","implicitTiling"],"mappings":"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","sourcesContent":["import type {LoaderOptions} from '@loaders.gl/loader-utils';\nimport {Tile3DSubtreeLoader} from '../../tile-3d-subtree-loader';\nimport {load} from '@loaders.gl/core';\nimport {Tileset3D, LOD_METRIC_TYPE, TILE_REFINEMENT, TILE_TYPE, Tile3D} from '@loaders.gl/tiles';\nimport {ImplicitTilingExtension, Subtree} from '../../types';\nimport {parseImplicitTiles, replaceContentUrlTemplate} from './helpers/parse-3d-implicit-tiles';\n\nfunction getTileType(tile) {\n if (!tile.contentUrl) {\n return TILE_TYPE.EMPTY;\n }\n\n const contentUrl = tile.contentUrl;\n const fileExtension = contentUrl.split('.').pop();\n switch (fileExtension) {\n case 'pnts':\n return TILE_TYPE.POINTCLOUD;\n case 'i3dm':\n case 'b3dm':\n case 'glb':\n case 'gltf':\n return TILE_TYPE.SCENEGRAPH;\n default:\n return fileExtension;\n }\n}\n\nfunction getRefine(refine) {\n switch (refine) {\n case 'REPLACE':\n case 'replace':\n return TILE_REFINEMENT.REPLACE;\n case 'ADD':\n case 'add':\n return TILE_REFINEMENT.ADD;\n default:\n return refine;\n }\n}\n\nfunction resolveUri(uri, basePath) {\n // url scheme per RFC3986\n const urlSchemeRegex = /^[a-z][0-9a-z+.-]*:/i;\n\n if (urlSchemeRegex.test(basePath)) {\n const url = new URL(uri, `${basePath}/`);\n return decodeURI(url.toString());\n } else if (uri.startsWith('/')) {\n return uri;\n }\n\n return `${basePath}/${uri}`;\n}\n\nexport function normalizeTileData(tile, options) {\n if (!tile) {\n return null;\n }\n if (tile.content) {\n const contentUri = tile.content.uri || tile.content.url;\n tile.contentUrl = resolveUri(contentUri, options.basePath);\n }\n tile.id = tile.contentUrl;\n tile.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;\n tile.lodMetricValue = tile.geometricError;\n tile.transformMatrix = tile.transform;\n tile.type = getTileType(tile);\n tile.refine = getRefine(tile.refine);\n\n return tile;\n}\n\n// normalize tile headers\nexport async function normalizeTileHeaders(\n tileset: Tileset3D,\n options: LoaderOptions\n): Promise<Tileset3D> {\n const basePath = tileset.basePath;\n let root: Tileset3D;\n\n const rootImplicitTilingExtension = getImplicitTilingExtensionData(tileset?.root);\n if (rootImplicitTilingExtension && tileset.root) {\n root = await normalizeImplicitTileHeaders(\n tileset.root,\n tileset,\n rootImplicitTilingExtension,\n options\n );\n } else {\n root = normalizeTileData(tileset.root, tileset);\n }\n\n const stack: any[] = [];\n stack.push(root);\n\n while (stack.length > 0) {\n const tile = stack.pop() || {};\n const children = tile.children || [];\n for (let childHeader of children) {\n const childImplicitTilingExtension = getImplicitTilingExtensionData(childHeader);\n if (childImplicitTilingExtension) {\n childHeader = await normalizeImplicitTileHeaders(\n childHeader,\n tileset,\n childImplicitTilingExtension,\n options\n );\n } else {\n normalizeTileData(childHeader, {basePath});\n }\n\n stack.push(childHeader);\n }\n }\n\n return root;\n}\n\n/**\n * Do normalisation of implicit tile headers\n * TODO Check if Tile3D class can be a return type here.\n * @param tileset\n */\nexport async function normalizeImplicitTileHeaders(\n tile: Tile3D,\n tileset: Tileset3D,\n implicitTilingExtension: ImplicitTilingExtension,\n options: LoaderOptions\n) {\n const basePath = tileset.basePath;\n const {\n subdivisionScheme,\n maximumLevel,\n subtreeLevels,\n subtrees: {uri: subtreesUriTemplate}\n } = implicitTilingExtension;\n const replacedUrlTemplate = replaceContentUrlTemplate(subtreesUriTemplate, 0, 0, 0, 0);\n const subtreeUrl = resolveUri(replacedUrlTemplate, basePath);\n const subtree = await load(subtreeUrl, Tile3DSubtreeLoader, options);\n const contentUrlTemplate = resolveUri(tile.content.uri, basePath);\n const refine = tileset?.root?.refine;\n // @ts-ignore\n const rootLodMetricValue = tile.geometricError;\n const rootBoundingVolume = tile.boundingVolume;\n\n const implicitOptions = {\n contentUrlTemplate,\n subtreesUriTemplate,\n subdivisionScheme,\n subtreeLevels,\n maximumLevel,\n refine,\n basePath,\n lodMetricType: LOD_METRIC_TYPE.GEOMETRIC_ERROR,\n rootLodMetricValue,\n rootBoundingVolume,\n getTileType,\n getRefine\n };\n\n return await normalizeImplicitTileData(tile, subtree, implicitOptions);\n}\n\n/**\n * Do implicit data normalisation to create hierarchical tile structure\n * @param tile\n * @param rootSubtree\n * @param options\n * @returns\n */\nexport async function normalizeImplicitTileData(tile, rootSubtree: Subtree, options: any) {\n if (!tile) {\n return null;\n }\n\n tile.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;\n tile.lodMetricValue = tile.geometricError;\n tile.transformMatrix = tile.transform;\n\n const {children, contentUrl} = await parseImplicitTiles({subtree: rootSubtree, options});\n\n if (contentUrl) {\n tile.contentUrl = contentUrl;\n tile.content = {uri: contentUrl.replace(`${options.basePath}/`, '')};\n }\n\n tile.refine = getRefine(tile.refine);\n tile.type = getTileType(tile);\n tile.children = children;\n tile.id = tile.contentUrl;\n\n return tile;\n}\n\n/**\n * Implicit Tiling data can be in 3DTILES_implicit_tiling for 3DTiles v.Next or directly in implicitTiling object for 3DTiles v1.1.\n * Spec 3DTiles v.Next - https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_implicit_tiling\n * Spec 3DTiles v.1.1 - https://github.com/CesiumGS/3d-tiles/tree/draft-1.1/specification/ImplicitTiling\n * @param tile\n * @returns\n */\nfunction getImplicitTilingExtensionData(tile: Tile3D | null): ImplicitTilingExtension {\n return tile?.extensions?.['3DTILES_implicit_tiling'] || tile?.implicitTiling;\n}\n"],"file":"parse-3d-tile-header.js"}
1
+ {"version":3,"file":"parse-3d-tile-header.js","names":["getTileType","tile","contentUrl","TILE_TYPE","EMPTY","fileExtension","split","pop","POINTCLOUD","SCENEGRAPH","getRefine","refine","TILE_REFINEMENT","REPLACE","ADD","resolveUri","uri","basePath","urlSchemeRegex","test","url","URL","decodeURI","toString","startsWith","normalizeTileData","options","content","contentUri","id","lodMetricType","LOD_METRIC_TYPE","GEOMETRIC_ERROR","lodMetricValue","geometricError","transformMatrix","transform","type","normalizeTileHeaders","tileset","rootImplicitTilingExtension","getImplicitTilingExtensionData","root","normalizeImplicitTileHeaders","stack","push","length","children","childHeader","childImplicitTilingExtension","implicitTilingExtension","subdivisionScheme","maximumLevel","subtreeLevels","subtreesUriTemplate","subtrees","replacedUrlTemplate","replaceContentUrlTemplate","subtreeUrl","load","Tile3DSubtreeLoader","subtree","contentUrlTemplate","rootLodMetricValue","rootBoundingVolume","boundingVolume","implicitOptions","normalizeImplicitTileData","rootSubtree","parseImplicitTiles","replace","extensions","implicitTiling"],"sources":["../../../../src/lib/parsers/parse-3d-tile-header.ts"],"sourcesContent":["import type {LoaderOptions} from '@loaders.gl/loader-utils';\nimport {Tile3DSubtreeLoader} from '../../tile-3d-subtree-loader';\nimport {load} from '@loaders.gl/core';\nimport {Tileset3D, LOD_METRIC_TYPE, TILE_REFINEMENT, TILE_TYPE, Tile3D} from '@loaders.gl/tiles';\nimport {ImplicitTilingExtension, Subtree} from '../../types';\nimport {parseImplicitTiles, replaceContentUrlTemplate} from './helpers/parse-3d-implicit-tiles';\n\nfunction getTileType(tile) {\n if (!tile.contentUrl) {\n return TILE_TYPE.EMPTY;\n }\n\n const contentUrl = tile.contentUrl;\n const fileExtension = contentUrl.split('.').pop();\n switch (fileExtension) {\n case 'pnts':\n return TILE_TYPE.POINTCLOUD;\n case 'i3dm':\n case 'b3dm':\n case 'glb':\n case 'gltf':\n return TILE_TYPE.SCENEGRAPH;\n default:\n return fileExtension;\n }\n}\n\nfunction getRefine(refine) {\n switch (refine) {\n case 'REPLACE':\n case 'replace':\n return TILE_REFINEMENT.REPLACE;\n case 'ADD':\n case 'add':\n return TILE_REFINEMENT.ADD;\n default:\n return refine;\n }\n}\n\nfunction resolveUri(uri, basePath) {\n // url scheme per RFC3986\n const urlSchemeRegex = /^[a-z][0-9a-z+.-]*:/i;\n\n if (urlSchemeRegex.test(basePath)) {\n const url = new URL(uri, `${basePath}/`);\n return decodeURI(url.toString());\n } else if (uri.startsWith('/')) {\n return uri;\n }\n\n return `${basePath}/${uri}`;\n}\n\nexport function normalizeTileData(tile, options) {\n if (!tile) {\n return null;\n }\n if (tile.content) {\n const contentUri = tile.content.uri || tile.content.url;\n tile.contentUrl = resolveUri(contentUri, options.basePath);\n }\n tile.id = tile.contentUrl;\n tile.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;\n tile.lodMetricValue = tile.geometricError;\n tile.transformMatrix = tile.transform;\n tile.type = getTileType(tile);\n tile.refine = getRefine(tile.refine);\n\n return tile;\n}\n\n// normalize tile headers\nexport async function normalizeTileHeaders(\n tileset: Tileset3D,\n options: LoaderOptions\n): Promise<Tileset3D> {\n const basePath = tileset.basePath;\n let root: Tileset3D;\n\n const rootImplicitTilingExtension = getImplicitTilingExtensionData(tileset?.root);\n if (rootImplicitTilingExtension && tileset.root) {\n root = await normalizeImplicitTileHeaders(\n tileset.root,\n tileset,\n rootImplicitTilingExtension,\n options\n );\n } else {\n root = normalizeTileData(tileset.root, tileset);\n }\n\n const stack: any[] = [];\n stack.push(root);\n\n while (stack.length > 0) {\n const tile = stack.pop() || {};\n const children = tile.children || [];\n for (let childHeader of children) {\n const childImplicitTilingExtension = getImplicitTilingExtensionData(childHeader);\n if (childImplicitTilingExtension) {\n childHeader = await normalizeImplicitTileHeaders(\n childHeader,\n tileset,\n childImplicitTilingExtension,\n options\n );\n } else {\n normalizeTileData(childHeader, {basePath});\n }\n\n stack.push(childHeader);\n }\n }\n\n return root;\n}\n\n/**\n * Do normalisation of implicit tile headers\n * TODO Check if Tile3D class can be a return type here.\n * @param tileset\n */\nexport async function normalizeImplicitTileHeaders(\n tile: Tile3D,\n tileset: Tileset3D,\n implicitTilingExtension: ImplicitTilingExtension,\n options: LoaderOptions\n) {\n const basePath = tileset.basePath;\n const {\n subdivisionScheme,\n maximumLevel,\n subtreeLevels,\n subtrees: {uri: subtreesUriTemplate}\n } = implicitTilingExtension;\n const replacedUrlTemplate = replaceContentUrlTemplate(subtreesUriTemplate, 0, 0, 0, 0);\n const subtreeUrl = resolveUri(replacedUrlTemplate, basePath);\n const subtree = await load(subtreeUrl, Tile3DSubtreeLoader, options);\n const contentUrlTemplate = resolveUri(tile.content.uri, basePath);\n const refine = tileset?.root?.refine;\n // @ts-ignore\n const rootLodMetricValue = tile.geometricError;\n const rootBoundingVolume = tile.boundingVolume;\n\n const implicitOptions = {\n contentUrlTemplate,\n subtreesUriTemplate,\n subdivisionScheme,\n subtreeLevels,\n maximumLevel,\n refine,\n basePath,\n lodMetricType: LOD_METRIC_TYPE.GEOMETRIC_ERROR,\n rootLodMetricValue,\n rootBoundingVolume,\n getTileType,\n getRefine\n };\n\n return await normalizeImplicitTileData(tile, subtree, implicitOptions);\n}\n\n/**\n * Do implicit data normalisation to create hierarchical tile structure\n * @param tile\n * @param rootSubtree\n * @param options\n * @returns\n */\nexport async function normalizeImplicitTileData(tile, rootSubtree: Subtree, options: any) {\n if (!tile) {\n return null;\n }\n\n tile.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;\n tile.lodMetricValue = tile.geometricError;\n tile.transformMatrix = tile.transform;\n\n const {children, contentUrl} = await parseImplicitTiles({subtree: rootSubtree, options});\n\n if (contentUrl) {\n tile.contentUrl = contentUrl;\n tile.content = {uri: contentUrl.replace(`${options.basePath}/`, '')};\n }\n\n tile.refine = getRefine(tile.refine);\n tile.type = getTileType(tile);\n tile.children = children;\n tile.id = tile.contentUrl;\n\n return tile;\n}\n\n/**\n * Implicit Tiling data can be in 3DTILES_implicit_tiling for 3DTiles v.Next or directly in implicitTiling object for 3DTiles v1.1.\n * Spec 3DTiles v.Next - https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_implicit_tiling\n * Spec 3DTiles v.1.1 - https://github.com/CesiumGS/3d-tiles/tree/draft-1.1/specification/ImplicitTiling\n * @param tile\n * @returns\n */\nfunction getImplicitTilingExtensionData(tile: Tile3D | null): ImplicitTilingExtension {\n return tile?.extensions?.['3DTILES_implicit_tiling'] || tile?.implicitTiling;\n}\n"],"mappings":"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"}
@@ -1,36 +1,23 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.parseInstancedModel3DTile = parseInstancedModel3DTile;
9
-
10
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
-
12
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
-
14
10
  var _core = require("@math.gl/core");
15
-
16
11
  var _geospatial = require("@math.gl/geospatial");
17
-
18
12
  var _math = require("@loaders.gl/math");
19
-
20
13
  var _tile3dFeatureTable = _interopRequireDefault(require("../classes/tile-3d-feature-table"));
21
-
22
14
  var _tile3dBatchTable = _interopRequireDefault(require("../classes/tile-3d-batch-table"));
23
-
24
15
  var _parse3dTileHeader = require("./helpers/parse-3d-tile-header");
25
-
26
16
  var _parse3dTileTables = require("./helpers/parse-3d-tile-tables");
27
-
28
17
  var _parse3dTileGltfView = require("./helpers/parse-3d-tile-gltf-view");
29
-
30
18
  function parseInstancedModel3DTile(_x, _x2, _x3, _x4, _x5) {
31
19
  return _parseInstancedModel3DTile.apply(this, arguments);
32
20
  }
33
-
34
21
  function _parseInstancedModel3DTile() {
35
22
  _parseInstancedModel3DTile = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(tile, arrayBuffer, byteOffset, options, context) {
36
23
  return _regenerator.default.wrap(function _callee$(_context) {
@@ -40,10 +27,8 @@ function _parseInstancedModel3DTile() {
40
27
  byteOffset = parseInstancedModel(tile, arrayBuffer, byteOffset, options, context);
41
28
  _context.next = 3;
42
29
  return (0, _parse3dTileGltfView.extractGLTF)(tile, tile.gltfFormat, options, context);
43
-
44
30
  case 3:
45
31
  return _context.abrupt("return", byteOffset);
46
-
47
32
  case 4:
48
33
  case "end":
49
34
  return _context.stop();
@@ -53,33 +38,28 @@ function _parseInstancedModel3DTile() {
53
38
  }));
54
39
  return _parseInstancedModel3DTile.apply(this, arguments);
55
40
  }
56
-
57
41
  function parseInstancedModel(tile, arrayBuffer, byteOffset, options, context) {
58
42
  byteOffset = (0, _parse3dTileHeader.parse3DTileHeaderSync)(tile, arrayBuffer, byteOffset);
59
-
60
43
  if (tile.version !== 1) {
61
44
  throw new Error("Instanced 3D Model version ".concat(tile.version, " is not supported"));
62
45
  }
63
-
64
46
  byteOffset = (0, _parse3dTileTables.parse3DTileTablesHeaderSync)(tile, arrayBuffer, byteOffset);
65
47
  var view = new DataView(arrayBuffer);
66
48
  tile.gltfFormat = view.getUint32(byteOffset, true);
67
49
  byteOffset += 4;
50
+
68
51
  byteOffset = (0, _parse3dTileTables.parse3DTileTablesSync)(tile, arrayBuffer, byteOffset, options);
69
52
  byteOffset = (0, _parse3dTileGltfView.parse3DTileGLTFViewSync)(tile, arrayBuffer, byteOffset, options);
70
53
 
71
54
  if (tile.featureTableJsonByteLength === 0) {
72
55
  throw new Error('i3dm parser: featureTableJsonByteLength is zero.');
73
56
  }
74
-
75
57
  var featureTable = new _tile3dFeatureTable.default(tile.featureTableJson, tile.featureTableBinary);
76
58
  var instancesLength = featureTable.getGlobalProperty('INSTANCES_LENGTH');
77
59
  featureTable.featuresLength = instancesLength;
78
-
79
60
  if (!Number.isFinite(instancesLength)) {
80
61
  throw new Error('i3dm parser: INSTANCES_LENGTH must be defined');
81
62
  }
82
-
83
63
  tile.eastNorthUp = featureTable.getGlobalProperty('EAST_NORTH_UP');
84
64
  tile.rtcCenter = featureTable.getGlobalProperty('RTC_CENTER', _math.GL.FLOAT, 3);
85
65
  var batchTable = new _tile3dBatchTable.default(tile.batchTableJson, tile.batchTableBinary, instancesLength);
@@ -112,7 +92,6 @@ function extractInstancedAttributes(tile, featureTable, batchTable, instancesLen
112
92
  var scratch2 = [];
113
93
  var scratchVector1 = new _core.Vector3();
114
94
  var scratchVector2 = new _core.Vector3();
115
-
116
95
  for (var i = 0; i < instancesLength; i++) {
117
96
  var position = void 0;
118
97
 
@@ -121,89 +100,75 @@ function extractInstancedAttributes(tile, featureTable, batchTable, instancesLen
121
100
  } else if (featureTable.hasProperty('POSITION_QUANTIZED')) {
122
101
  position = featureTable.getProperty('POSITION_QUANTIZED', _math.GL.UNSIGNED_SHORT, 3, i, instancePosition);
123
102
  var quantizedVolumeOffset = featureTable.getGlobalProperty('QUANTIZED_VOLUME_OFFSET', _math.GL.FLOAT, 3, scratchVector1);
124
-
125
103
  if (!quantizedVolumeOffset) {
126
104
  throw new Error('i3dm parser: QUANTIZED_VOLUME_OFFSET must be defined for quantized positions.');
127
105
  }
128
-
129
106
  var quantizedVolumeScale = featureTable.getGlobalProperty('QUANTIZED_VOLUME_SCALE', _math.GL.FLOAT, 3, scratchVector2);
130
-
131
107
  if (!quantizedVolumeScale) {
132
108
  throw new Error('i3dm parser: QUANTIZED_VOLUME_SCALE must be defined for quantized positions.');
133
109
  }
134
-
135
110
  var MAX_UNSIGNED_SHORT = 65535.0;
136
-
137
111
  for (var j = 0; j < 3; j++) {
138
112
  position[j] = position[j] / MAX_UNSIGNED_SHORT * quantizedVolumeScale[j] + quantizedVolumeOffset[j];
139
113
  }
140
114
  }
141
-
142
115
  if (!position) {
143
116
  throw new Error('i3dm: POSITION or POSITION_QUANTIZED must be defined for each instance.');
144
117
  }
145
-
146
118
  instancePosition.copy(position);
147
119
  instanceTranslationRotationScale.translation = instancePosition;
120
+
148
121
  tile.normalUp = featureTable.getProperty('NORMAL_UP', _math.GL.FLOAT, 3, i, scratch1);
149
122
  tile.normalRight = featureTable.getProperty('NORMAL_RIGHT', _math.GL.FLOAT, 3, i, scratch2);
150
123
  var hasCustomOrientation = false;
151
-
152
124
  if (tile.normalUp) {
153
125
  if (!tile.normalRight) {
154
126
  throw new Error('i3dm: Custom orientation requires both NORMAL_UP and NORMAL_RIGHT.');
155
127
  }
156
-
157
128
  tile.hasCustomOrientation = true;
158
129
  } else {
159
130
  tile.octNormalUp = featureTable.getProperty('NORMAL_UP_OCT32P', _math.GL.UNSIGNED_SHORT, 2, scratch1);
160
131
  tile.octNormalRight = featureTable.getProperty('NORMAL_RIGHT_OCT32P', _math.GL.UNSIGNED_SHORT, 2, scratch2);
161
-
162
132
  if (tile.octNormalUp) {
163
133
  if (!tile.octNormalRight) {
164
134
  throw new Error('i3dm: oct-encoded orientation requires NORMAL_UP_OCT32P and NORMAL_RIGHT_OCT32P');
165
135
  }
166
-
167
136
  throw new Error('i3dm: oct-encoded orientation not implemented');
168
137
  } else if (tile.eastNorthUp) {
169
138
  _geospatial.Ellipsoid.WGS84.eastNorthUpToFixedFrame(instancePosition, instanceTransform);
170
-
171
139
  instanceTransform.getRotationMatrix3(instanceRotation);
172
140
  } else {
173
141
  instanceRotation.identity();
174
142
  }
175
143
  }
176
-
177
144
  if (hasCustomOrientation) {
178
145
  instanceNormalForward.copy(instanceNormalRight).cross(instanceNormalUp).normalize();
179
146
  instanceRotation.setColumn(0, instanceNormalRight);
180
147
  instanceRotation.setColumn(1, instanceNormalUp);
181
148
  instanceRotation.setColumn(2, instanceNormalForward);
182
149
  }
183
-
184
150
  instanceQuaternion.fromMatrix3(instanceRotation);
185
151
  instanceTranslationRotationScale.rotation = instanceQuaternion;
152
+
186
153
  instanceScale.set(1.0, 1.0, 1.0);
187
154
  var scale = featureTable.getProperty('SCALE', _math.GL.FLOAT, 1, i);
188
-
189
155
  if (Number.isFinite(scale)) {
190
156
  instanceScale.multiplyByScalar(scale);
191
157
  }
192
-
193
158
  var nonUniformScale = featureTable.getProperty('SCALE_NON_UNIFORM', _math.GL.FLOAT, 3, i, scratch1);
194
-
195
159
  if (nonUniformScale) {
196
160
  instanceScale.scale(nonUniformScale);
197
161
  }
198
162
 
199
163
  instanceTranslationRotationScale.scale = instanceScale;
200
- var batchId = featureTable.getProperty('BATCH_ID', _math.GL.UNSIGNED_SHORT, 1, i);
201
164
 
165
+ var batchId = featureTable.getProperty('BATCH_ID', _math.GL.UNSIGNED_SHORT, 1, i);
202
166
  if (batchId === undefined) {
203
167
  batchId = i;
204
168
  }
205
169
 
206
170
  var rotationMatrix = new _core.Matrix4().fromQuaternion(instanceTranslationRotationScale.rotation);
171
+
207
172
  instanceTransform.identity();
208
173
  instanceTransform.translate(instanceTranslationRotationScale.translation);
209
174
  instanceTransform.multiplyRight(rotationMatrix);
@@ -214,7 +179,6 @@ function extractInstancedAttributes(tile, featureTable, batchTable, instancesLen
214
179
  batchId: batchId
215
180
  };
216
181
  }
217
-
218
182
  tile.instances = instances;
219
183
  }
220
184
  //# sourceMappingURL=parse-3d-tile-instanced-model.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/parsers/parse-3d-tile-instanced-model.ts"],"names":["parseInstancedModel3DTile","tile","arrayBuffer","byteOffset","options","context","parseInstancedModel","gltfFormat","version","Error","view","DataView","getUint32","featureTableJsonByteLength","featureTable","Tile3DFeatureTable","featureTableJson","featureTableBinary","instancesLength","getGlobalProperty","featuresLength","Number","isFinite","eastNorthUp","rtcCenter","GL","FLOAT","batchTable","Tile3DBatchTable","batchTableJson","batchTableBinary","extractInstancedAttributes","collectionOptions","instances","Array","_batchTable","cull","url","undefined","gltf","basePath","incrementallyLoadTextures","forwardAxis","instancePosition","Vector3","instanceNormalRight","instanceNormalUp","instanceNormalForward","instanceRotation","Matrix3","instanceQuaternion","Quaternion","instanceScale","instanceTranslationRotationScale","instanceTransform","Matrix4","scratch1","scratch2","scratchVector1","scratchVector2","i","position","hasProperty","getProperty","UNSIGNED_SHORT","quantizedVolumeOffset","quantizedVolumeScale","MAX_UNSIGNED_SHORT","j","copy","translation","normalUp","normalRight","hasCustomOrientation","octNormalUp","octNormalRight","Ellipsoid","WGS84","eastNorthUpToFixedFrame","getRotationMatrix3","identity","cross","normalize","setColumn","fromMatrix3","rotation","set","scale","multiplyByScalar","nonUniformScale","batchId","rotationMatrix","fromQuaternion","translate","multiplyRight","modelMatrix","clone"],"mappings":"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","sourcesContent":["// This file is derived from the Cesium code base under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport {Vector3, Matrix3, Matrix4, Quaternion} from '@math.gl/core';\nimport {Ellipsoid} from '@math.gl/geospatial';\nimport {GL} from '@loaders.gl/math'; // 'math.gl/geometry';\nimport Tile3DFeatureTable from '../classes/tile-3d-feature-table';\nimport Tile3DBatchTable from '../classes/tile-3d-batch-table';\n\nimport {parse3DTileHeaderSync} from './helpers/parse-3d-tile-header';\nimport {parse3DTileTablesHeaderSync, parse3DTileTablesSync} from './helpers/parse-3d-tile-tables';\nimport {parse3DTileGLTFViewSync, extractGLTF} from './helpers/parse-3d-tile-gltf-view';\n\nexport async function parseInstancedModel3DTile(tile, arrayBuffer, byteOffset, options, context) {\n byteOffset = parseInstancedModel(tile, arrayBuffer, byteOffset, options, context);\n await extractGLTF(tile, tile.gltfFormat, options, context);\n return byteOffset;\n}\n\nfunction parseInstancedModel(tile, arrayBuffer, byteOffset, options, context) {\n byteOffset = parse3DTileHeaderSync(tile, arrayBuffer, byteOffset);\n if (tile.version !== 1) {\n throw new Error(`Instanced 3D Model version ${tile.version} is not supported`);\n }\n\n byteOffset = parse3DTileTablesHeaderSync(tile, arrayBuffer, byteOffset);\n\n const view = new DataView(arrayBuffer);\n\n tile.gltfFormat = view.getUint32(byteOffset, true);\n byteOffset += 4;\n\n // PARSE FEATURE TABLE\n byteOffset = parse3DTileTablesSync(tile, arrayBuffer, byteOffset, options);\n\n byteOffset = parse3DTileGLTFViewSync(tile, arrayBuffer, byteOffset, options);\n\n // TODO - Is the feature table sometimes optional or can check be moved into table header parser?\n if (tile.featureTableJsonByteLength === 0) {\n throw new Error('i3dm parser: featureTableJsonByteLength is zero.');\n }\n\n const featureTable = new Tile3DFeatureTable(tile.featureTableJson, tile.featureTableBinary);\n\n const instancesLength = featureTable.getGlobalProperty('INSTANCES_LENGTH');\n featureTable.featuresLength = instancesLength;\n\n if (!Number.isFinite(instancesLength)) {\n throw new Error('i3dm parser: INSTANCES_LENGTH must be defined');\n }\n\n tile.eastNorthUp = featureTable.getGlobalProperty('EAST_NORTH_UP');\n tile.rtcCenter = featureTable.getGlobalProperty('RTC_CENTER', GL.FLOAT, 3);\n\n const batchTable = new Tile3DBatchTable(\n tile.batchTableJson,\n tile.batchTableBinary,\n instancesLength\n );\n\n extractInstancedAttributes(tile, featureTable, batchTable, instancesLength);\n\n return byteOffset;\n}\n\n// eslint-disable-next-line max-statements, complexity\nfunction extractInstancedAttributes(tile, featureTable, batchTable, instancesLength) {\n // Create model instance collection\n const collectionOptions = {\n instances: new Array(instancesLength),\n batchTable: tile._batchTable,\n cull: false, // Already culled by 3D Tiles\n url: undefined,\n // requestType: RequestType.TILES3D,\n gltf: undefined,\n basePath: undefined,\n incrementallyLoadTextures: false,\n // TODO - tileset is not available at this stage, tile is parsed independently\n // upAxis: (tileset && tileset._gltfUpAxis) || [0, 1, 0],\n forwardAxis: [1, 0, 0]\n };\n\n const instances = collectionOptions.instances;\n const instancePosition = new Vector3();\n const instanceNormalRight = new Vector3();\n const instanceNormalUp = new Vector3();\n const instanceNormalForward = new Vector3();\n const instanceRotation = new Matrix3();\n const instanceQuaternion = new Quaternion();\n const instanceScale = new Vector3();\n const instanceTranslationRotationScale = {};\n const instanceTransform = new Matrix4();\n const scratch1 = [];\n const scratch2 = [];\n const scratchVector1 = new Vector3();\n const scratchVector2 = new Vector3();\n\n for (let i = 0; i < instancesLength; i++) {\n let position;\n\n // Get the instance position\n if (featureTable.hasProperty('POSITION')) {\n position = featureTable.getProperty('POSITION', GL.FLOAT, 3, i, instancePosition);\n } else if (featureTable.hasProperty('POSITION_QUANTIZED')) {\n position = featureTable.getProperty(\n 'POSITION_QUANTIZED',\n GL.UNSIGNED_SHORT,\n 3,\n i,\n instancePosition\n );\n\n const quantizedVolumeOffset = featureTable.getGlobalProperty(\n 'QUANTIZED_VOLUME_OFFSET',\n GL.FLOAT,\n 3,\n scratchVector1\n );\n if (!quantizedVolumeOffset) {\n throw new Error(\n 'i3dm parser: QUANTIZED_VOLUME_OFFSET must be defined for quantized positions.'\n );\n }\n\n const quantizedVolumeScale = featureTable.getGlobalProperty(\n 'QUANTIZED_VOLUME_SCALE',\n GL.FLOAT,\n 3,\n scratchVector2\n );\n if (!quantizedVolumeScale) {\n throw new Error(\n 'i3dm parser: QUANTIZED_VOLUME_SCALE must be defined for quantized positions.'\n );\n }\n\n const MAX_UNSIGNED_SHORT = 65535.0;\n for (let j = 0; j < 3; j++) {\n position[j] =\n (position[j] / MAX_UNSIGNED_SHORT) * quantizedVolumeScale[j] + quantizedVolumeOffset[j];\n }\n }\n\n if (!position) {\n throw new Error('i3dm: POSITION or POSITION_QUANTIZED must be defined for each instance.');\n }\n\n instancePosition.copy(position);\n // @ts-expect-error\n instanceTranslationRotationScale.translation = instancePosition;\n\n // Get the instance rotation\n tile.normalUp = featureTable.getProperty('NORMAL_UP', GL.FLOAT, 3, i, scratch1);\n tile.normalRight = featureTable.getProperty('NORMAL_RIGHT', GL.FLOAT, 3, i, scratch2);\n\n const hasCustomOrientation = false;\n if (tile.normalUp) {\n if (!tile.normalRight) {\n throw new Error('i3dm: Custom orientation requires both NORMAL_UP and NORMAL_RIGHT.');\n }\n // Vector3.unpack(normalUp, 0, instanceNormalUp);\n // Vector3.unpack(normalRight, 0, instanceNormalRight);\n tile.hasCustomOrientation = true;\n } else {\n tile.octNormalUp = featureTable.getProperty(\n 'NORMAL_UP_OCT32P',\n GL.UNSIGNED_SHORT,\n 2,\n scratch1\n );\n tile.octNormalRight = featureTable.getProperty(\n 'NORMAL_RIGHT_OCT32P',\n GL.UNSIGNED_SHORT,\n 2,\n scratch2\n );\n\n if (tile.octNormalUp) {\n if (!tile.octNormalRight) {\n throw new Error(\n 'i3dm: oct-encoded orientation requires NORMAL_UP_OCT32P and NORMAL_RIGHT_OCT32P'\n );\n }\n\n throw new Error('i3dm: oct-encoded orientation not implemented');\n /*\n AttributeCompression.octDecodeInRange(octNormalUp[0], octNormalUp[1], 65535, instanceNormalUp);\n AttributeCompression.octDecodeInRange(octNormalRight[0], octNormalRight[1], 65535, instanceNormalRight);\n hasCustomOrientation = true;\n */\n } else if (tile.eastNorthUp) {\n Ellipsoid.WGS84.eastNorthUpToFixedFrame(instancePosition, instanceTransform);\n instanceTransform.getRotationMatrix3(instanceRotation);\n } else {\n instanceRotation.identity();\n }\n }\n\n if (hasCustomOrientation) {\n instanceNormalForward.copy(instanceNormalRight).cross(instanceNormalUp).normalize();\n instanceRotation.setColumn(0, instanceNormalRight);\n instanceRotation.setColumn(1, instanceNormalUp);\n instanceRotation.setColumn(2, instanceNormalForward);\n }\n\n instanceQuaternion.fromMatrix3(instanceRotation);\n // @ts-expect-error\n instanceTranslationRotationScale.rotation = instanceQuaternion;\n\n // Get the instance scale\n instanceScale.set(1.0, 1.0, 1.0);\n const scale = featureTable.getProperty('SCALE', GL.FLOAT, 1, i);\n if (Number.isFinite(scale)) {\n instanceScale.multiplyByScalar(scale);\n }\n const nonUniformScale = featureTable.getProperty('SCALE_NON_UNIFORM', GL.FLOAT, 3, i, scratch1);\n if (nonUniformScale) {\n instanceScale.scale(nonUniformScale);\n }\n\n // @ts-expect-error\n instanceTranslationRotationScale.scale = instanceScale;\n\n // Get the batchId\n let batchId = featureTable.getProperty('BATCH_ID', GL.UNSIGNED_SHORT, 1, i);\n if (batchId === undefined) {\n // If BATCH_ID semantic is undefined, batchId is just the instance number\n batchId = i;\n }\n\n // @ts-expect-error\n const rotationMatrix = new Matrix4().fromQuaternion(instanceTranslationRotationScale.rotation);\n\n // Create the model matrix and the instance\n instanceTransform.identity();\n // @ts-expect-error\n instanceTransform.translate(instanceTranslationRotationScale.translation);\n instanceTransform.multiplyRight(rotationMatrix);\n // @ts-expect-error\n instanceTransform.scale(instanceTranslationRotationScale.scale);\n\n const modelMatrix = instanceTransform.clone();\n instances[i] = {\n modelMatrix,\n batchId\n };\n }\n\n tile.instances = instances;\n}\n"],"file":"parse-3d-tile-instanced-model.js"}
1
+ {"version":3,"file":"parse-3d-tile-instanced-model.js","names":["parseInstancedModel3DTile","tile","arrayBuffer","byteOffset","options","context","parseInstancedModel","extractGLTF","gltfFormat","parse3DTileHeaderSync","version","Error","parse3DTileTablesHeaderSync","view","DataView","getUint32","parse3DTileTablesSync","parse3DTileGLTFViewSync","featureTableJsonByteLength","featureTable","Tile3DFeatureTable","featureTableJson","featureTableBinary","instancesLength","getGlobalProperty","featuresLength","Number","isFinite","eastNorthUp","rtcCenter","GL","FLOAT","batchTable","Tile3DBatchTable","batchTableJson","batchTableBinary","extractInstancedAttributes","collectionOptions","instances","Array","_batchTable","cull","url","undefined","gltf","basePath","incrementallyLoadTextures","forwardAxis","instancePosition","Vector3","instanceNormalRight","instanceNormalUp","instanceNormalForward","instanceRotation","Matrix3","instanceQuaternion","Quaternion","instanceScale","instanceTranslationRotationScale","instanceTransform","Matrix4","scratch1","scratch2","scratchVector1","scratchVector2","i","position","hasProperty","getProperty","UNSIGNED_SHORT","quantizedVolumeOffset","quantizedVolumeScale","MAX_UNSIGNED_SHORT","j","copy","translation","normalUp","normalRight","hasCustomOrientation","octNormalUp","octNormalRight","Ellipsoid","WGS84","eastNorthUpToFixedFrame","getRotationMatrix3","identity","cross","normalize","setColumn","fromMatrix3","rotation","set","scale","multiplyByScalar","nonUniformScale","batchId","rotationMatrix","fromQuaternion","translate","multiplyRight","modelMatrix","clone"],"sources":["../../../../src/lib/parsers/parse-3d-tile-instanced-model.ts"],"sourcesContent":["// This file is derived from the Cesium code base under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport {Vector3, Matrix3, Matrix4, Quaternion} from '@math.gl/core';\nimport {Ellipsoid} from '@math.gl/geospatial';\nimport {GL} from '@loaders.gl/math'; // 'math.gl/geometry';\nimport Tile3DFeatureTable from '../classes/tile-3d-feature-table';\nimport Tile3DBatchTable from '../classes/tile-3d-batch-table';\n\nimport {parse3DTileHeaderSync} from './helpers/parse-3d-tile-header';\nimport {parse3DTileTablesHeaderSync, parse3DTileTablesSync} from './helpers/parse-3d-tile-tables';\nimport {parse3DTileGLTFViewSync, extractGLTF} from './helpers/parse-3d-tile-gltf-view';\n\nexport async function parseInstancedModel3DTile(tile, arrayBuffer, byteOffset, options, context) {\n byteOffset = parseInstancedModel(tile, arrayBuffer, byteOffset, options, context);\n await extractGLTF(tile, tile.gltfFormat, options, context);\n return byteOffset;\n}\n\nfunction parseInstancedModel(tile, arrayBuffer, byteOffset, options, context) {\n byteOffset = parse3DTileHeaderSync(tile, arrayBuffer, byteOffset);\n if (tile.version !== 1) {\n throw new Error(`Instanced 3D Model version ${tile.version} is not supported`);\n }\n\n byteOffset = parse3DTileTablesHeaderSync(tile, arrayBuffer, byteOffset);\n\n const view = new DataView(arrayBuffer);\n\n tile.gltfFormat = view.getUint32(byteOffset, true);\n byteOffset += 4;\n\n // PARSE FEATURE TABLE\n byteOffset = parse3DTileTablesSync(tile, arrayBuffer, byteOffset, options);\n\n byteOffset = parse3DTileGLTFViewSync(tile, arrayBuffer, byteOffset, options);\n\n // TODO - Is the feature table sometimes optional or can check be moved into table header parser?\n if (tile.featureTableJsonByteLength === 0) {\n throw new Error('i3dm parser: featureTableJsonByteLength is zero.');\n }\n\n const featureTable = new Tile3DFeatureTable(tile.featureTableJson, tile.featureTableBinary);\n\n const instancesLength = featureTable.getGlobalProperty('INSTANCES_LENGTH');\n featureTable.featuresLength = instancesLength;\n\n if (!Number.isFinite(instancesLength)) {\n throw new Error('i3dm parser: INSTANCES_LENGTH must be defined');\n }\n\n tile.eastNorthUp = featureTable.getGlobalProperty('EAST_NORTH_UP');\n tile.rtcCenter = featureTable.getGlobalProperty('RTC_CENTER', GL.FLOAT, 3);\n\n const batchTable = new Tile3DBatchTable(\n tile.batchTableJson,\n tile.batchTableBinary,\n instancesLength\n );\n\n extractInstancedAttributes(tile, featureTable, batchTable, instancesLength);\n\n return byteOffset;\n}\n\n// eslint-disable-next-line max-statements, complexity\nfunction extractInstancedAttributes(tile, featureTable, batchTable, instancesLength) {\n // Create model instance collection\n const collectionOptions = {\n instances: new Array(instancesLength),\n batchTable: tile._batchTable,\n cull: false, // Already culled by 3D Tiles\n url: undefined,\n // requestType: RequestType.TILES3D,\n gltf: undefined,\n basePath: undefined,\n incrementallyLoadTextures: false,\n // TODO - tileset is not available at this stage, tile is parsed independently\n // upAxis: (tileset && tileset._gltfUpAxis) || [0, 1, 0],\n forwardAxis: [1, 0, 0]\n };\n\n const instances = collectionOptions.instances;\n const instancePosition = new Vector3();\n const instanceNormalRight = new Vector3();\n const instanceNormalUp = new Vector3();\n const instanceNormalForward = new Vector3();\n const instanceRotation = new Matrix3();\n const instanceQuaternion = new Quaternion();\n const instanceScale = new Vector3();\n const instanceTranslationRotationScale = {};\n const instanceTransform = new Matrix4();\n const scratch1 = [];\n const scratch2 = [];\n const scratchVector1 = new Vector3();\n const scratchVector2 = new Vector3();\n\n for (let i = 0; i < instancesLength; i++) {\n let position;\n\n // Get the instance position\n if (featureTable.hasProperty('POSITION')) {\n position = featureTable.getProperty('POSITION', GL.FLOAT, 3, i, instancePosition);\n } else if (featureTable.hasProperty('POSITION_QUANTIZED')) {\n position = featureTable.getProperty(\n 'POSITION_QUANTIZED',\n GL.UNSIGNED_SHORT,\n 3,\n i,\n instancePosition\n );\n\n const quantizedVolumeOffset = featureTable.getGlobalProperty(\n 'QUANTIZED_VOLUME_OFFSET',\n GL.FLOAT,\n 3,\n scratchVector1\n );\n if (!quantizedVolumeOffset) {\n throw new Error(\n 'i3dm parser: QUANTIZED_VOLUME_OFFSET must be defined for quantized positions.'\n );\n }\n\n const quantizedVolumeScale = featureTable.getGlobalProperty(\n 'QUANTIZED_VOLUME_SCALE',\n GL.FLOAT,\n 3,\n scratchVector2\n );\n if (!quantizedVolumeScale) {\n throw new Error(\n 'i3dm parser: QUANTIZED_VOLUME_SCALE must be defined for quantized positions.'\n );\n }\n\n const MAX_UNSIGNED_SHORT = 65535.0;\n for (let j = 0; j < 3; j++) {\n position[j] =\n (position[j] / MAX_UNSIGNED_SHORT) * quantizedVolumeScale[j] + quantizedVolumeOffset[j];\n }\n }\n\n if (!position) {\n throw new Error('i3dm: POSITION or POSITION_QUANTIZED must be defined for each instance.');\n }\n\n instancePosition.copy(position);\n // @ts-expect-error\n instanceTranslationRotationScale.translation = instancePosition;\n\n // Get the instance rotation\n tile.normalUp = featureTable.getProperty('NORMAL_UP', GL.FLOAT, 3, i, scratch1);\n tile.normalRight = featureTable.getProperty('NORMAL_RIGHT', GL.FLOAT, 3, i, scratch2);\n\n const hasCustomOrientation = false;\n if (tile.normalUp) {\n if (!tile.normalRight) {\n throw new Error('i3dm: Custom orientation requires both NORMAL_UP and NORMAL_RIGHT.');\n }\n // Vector3.unpack(normalUp, 0, instanceNormalUp);\n // Vector3.unpack(normalRight, 0, instanceNormalRight);\n tile.hasCustomOrientation = true;\n } else {\n tile.octNormalUp = featureTable.getProperty(\n 'NORMAL_UP_OCT32P',\n GL.UNSIGNED_SHORT,\n 2,\n scratch1\n );\n tile.octNormalRight = featureTable.getProperty(\n 'NORMAL_RIGHT_OCT32P',\n GL.UNSIGNED_SHORT,\n 2,\n scratch2\n );\n\n if (tile.octNormalUp) {\n if (!tile.octNormalRight) {\n throw new Error(\n 'i3dm: oct-encoded orientation requires NORMAL_UP_OCT32P and NORMAL_RIGHT_OCT32P'\n );\n }\n\n throw new Error('i3dm: oct-encoded orientation not implemented');\n /*\n AttributeCompression.octDecodeInRange(octNormalUp[0], octNormalUp[1], 65535, instanceNormalUp);\n AttributeCompression.octDecodeInRange(octNormalRight[0], octNormalRight[1], 65535, instanceNormalRight);\n hasCustomOrientation = true;\n */\n } else if (tile.eastNorthUp) {\n Ellipsoid.WGS84.eastNorthUpToFixedFrame(instancePosition, instanceTransform);\n instanceTransform.getRotationMatrix3(instanceRotation);\n } else {\n instanceRotation.identity();\n }\n }\n\n if (hasCustomOrientation) {\n instanceNormalForward.copy(instanceNormalRight).cross(instanceNormalUp).normalize();\n instanceRotation.setColumn(0, instanceNormalRight);\n instanceRotation.setColumn(1, instanceNormalUp);\n instanceRotation.setColumn(2, instanceNormalForward);\n }\n\n instanceQuaternion.fromMatrix3(instanceRotation);\n // @ts-expect-error\n instanceTranslationRotationScale.rotation = instanceQuaternion;\n\n // Get the instance scale\n instanceScale.set(1.0, 1.0, 1.0);\n const scale = featureTable.getProperty('SCALE', GL.FLOAT, 1, i);\n if (Number.isFinite(scale)) {\n instanceScale.multiplyByScalar(scale);\n }\n const nonUniformScale = featureTable.getProperty('SCALE_NON_UNIFORM', GL.FLOAT, 3, i, scratch1);\n if (nonUniformScale) {\n instanceScale.scale(nonUniformScale);\n }\n\n // @ts-expect-error\n instanceTranslationRotationScale.scale = instanceScale;\n\n // Get the batchId\n let batchId = featureTable.getProperty('BATCH_ID', GL.UNSIGNED_SHORT, 1, i);\n if (batchId === undefined) {\n // If BATCH_ID semantic is undefined, batchId is just the instance number\n batchId = i;\n }\n\n // @ts-expect-error\n const rotationMatrix = new Matrix4().fromQuaternion(instanceTranslationRotationScale.rotation);\n\n // Create the model matrix and the instance\n instanceTransform.identity();\n // @ts-expect-error\n instanceTransform.translate(instanceTranslationRotationScale.translation);\n instanceTransform.multiplyRight(rotationMatrix);\n // @ts-expect-error\n instanceTransform.scale(instanceTranslationRotationScale.scale);\n\n const modelMatrix = instanceTransform.clone();\n instances[i] = {\n modelMatrix,\n batchId\n };\n }\n\n tile.instances = instances;\n}\n"],"mappings":"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"}