@loaders.gl/3d-tiles 3.3.0-alpha.3 → 3.3.0-alpha.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dist.min.js +60 -33
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/lib/parsers/helpers/parse-3d-implicit-tiles.js +2 -0
- package/dist/es5/lib/parsers/helpers/parse-3d-implicit-tiles.js.map +1 -1
- package/dist/es5/lib/parsers/helpers/parse-3d-tile-subtree.js +47 -18
- package/dist/es5/lib/parsers/helpers/parse-3d-tile-subtree.js.map +1 -1
- package/dist/es5/lib/parsers/parse-3d-tile-header.js +153 -69
- package/dist/es5/lib/parsers/parse-3d-tile-header.js.map +1 -1
- package/dist/es5/lib/utils/version.js +1 -1
- package/dist/es5/tiles-3d-loader.js +5 -26
- package/dist/es5/tiles-3d-loader.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/parsers/helpers/parse-3d-implicit-tiles.js +2 -0
- package/dist/esm/lib/parsers/helpers/parse-3d-implicit-tiles.js.map +1 -1
- package/dist/esm/lib/parsers/helpers/parse-3d-tile-subtree.js +28 -7
- package/dist/esm/lib/parsers/helpers/parse-3d-tile-subtree.js.map +1 -1
- package/dist/esm/lib/parsers/parse-3d-tile-header.js +38 -20
- package/dist/esm/lib/parsers/parse-3d-tile-header.js.map +1 -1
- package/dist/esm/lib/utils/version.js +1 -1
- package/dist/esm/tiles-3d-loader.js +2 -9
- package/dist/esm/tiles-3d-loader.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/lib/parsers/helpers/parse-3d-implicit-tiles.d.ts.map +1 -1
- package/dist/lib/parsers/helpers/parse-3d-implicit-tiles.js +2 -13
- package/dist/lib/parsers/helpers/parse-3d-tile-subtree.d.ts +2 -1
- package/dist/lib/parsers/helpers/parse-3d-tile-subtree.d.ts.map +1 -1
- package/dist/lib/parsers/helpers/parse-3d-tile-subtree.js +36 -7
- package/dist/lib/parsers/parse-3d-tile-header.d.ts +5 -4
- package/dist/lib/parsers/parse-3d-tile-header.d.ts.map +1 -1
- package/dist/lib/parsers/parse-3d-tile-header.js +37 -18
- package/dist/tiles-3d-loader.d.ts.map +1 -1
- package/dist/tiles-3d-loader.js +1 -8
- package/dist/types.d.ts +13 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +7 -7
- package/src/index.ts +1 -1
- package/src/lib/parsers/helpers/parse-3d-implicit-tiles.ts +2 -14
- package/src/lib/parsers/helpers/parse-3d-tile-subtree.ts +50 -7
- package/src/lib/parsers/parse-3d-tile-header.ts +59 -21
- package/src/tiles-3d-loader.ts +2 -16
- package/src/types.ts +15 -0
|
@@ -98,71 +98,149 @@ function normalizeTileData(tile, options) {
|
|
|
98
98
|
return tile;
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
-
function normalizeTileHeaders(
|
|
102
|
-
|
|
103
|
-
var root = normalizeTileData(tileset.root, tileset);
|
|
104
|
-
var stack = [];
|
|
105
|
-
stack.push(root);
|
|
106
|
-
|
|
107
|
-
while (stack.length > 0) {
|
|
108
|
-
var tile = stack.pop() || {};
|
|
109
|
-
var children = tile.children || [];
|
|
110
|
-
|
|
111
|
-
var _iterator = _createForOfIteratorHelper(children),
|
|
112
|
-
_step;
|
|
113
|
-
|
|
114
|
-
try {
|
|
115
|
-
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
116
|
-
var childHeader = _step.value;
|
|
117
|
-
normalizeTileData(childHeader, {
|
|
118
|
-
basePath: basePath
|
|
119
|
-
});
|
|
120
|
-
stack.push(childHeader);
|
|
121
|
-
}
|
|
122
|
-
} catch (err) {
|
|
123
|
-
_iterator.e(err);
|
|
124
|
-
} finally {
|
|
125
|
-
_iterator.f();
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
return root;
|
|
101
|
+
function normalizeTileHeaders(_x, _x2) {
|
|
102
|
+
return _normalizeTileHeaders.apply(this, arguments);
|
|
130
103
|
}
|
|
131
104
|
|
|
132
|
-
function
|
|
133
|
-
|
|
134
|
-
|
|
105
|
+
function _normalizeTileHeaders() {
|
|
106
|
+
_normalizeTileHeaders = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(tileset, options) {
|
|
107
|
+
var basePath, root, rootImplicitTilingExtension, stack, tile, children, _iterator, _step, childHeader, childImplicitTilingExtension;
|
|
135
108
|
|
|
136
|
-
function _normalizeImplicitTileHeaders() {
|
|
137
|
-
_normalizeImplicitTileHeaders = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(tileset) {
|
|
138
|
-
var basePath, implicitTilingExtension, subdivisionScheme, maximumLevel, subtreeLevels, subtreesUriTemplate, subtreeUrl, rootSubtreeUrl, rootSubtree, contentUrlTemplate, refine, rootLodMetricValue, rootBoundingVolume, options;
|
|
139
109
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
140
110
|
while (1) {
|
|
141
111
|
switch (_context.prev = _context.next) {
|
|
142
112
|
case 0:
|
|
143
|
-
|
|
144
|
-
|
|
113
|
+
basePath = tileset.basePath;
|
|
114
|
+
rootImplicitTilingExtension = getImplicitTilingExtensionData(tileset === null || tileset === void 0 ? void 0 : tileset.root);
|
|
115
|
+
|
|
116
|
+
if (!(rootImplicitTilingExtension && tileset.root)) {
|
|
117
|
+
_context.next = 8;
|
|
145
118
|
break;
|
|
146
119
|
}
|
|
147
120
|
|
|
148
|
-
|
|
121
|
+
_context.next = 5;
|
|
122
|
+
return normalizeImplicitTileHeaders(tileset.root, tileset, rootImplicitTilingExtension, options);
|
|
149
123
|
|
|
150
|
-
case
|
|
151
|
-
|
|
152
|
-
implicitTilingExtension = tileset.root.extensions['3DTILES_implicit_tiling'];
|
|
153
|
-
subdivisionScheme = implicitTilingExtension.subdivisionScheme, maximumLevel = implicitTilingExtension.maximumLevel, subtreeLevels = implicitTilingExtension.subtreeLevels, subtreesUriTemplate = implicitTilingExtension.subtrees.uri;
|
|
154
|
-
subtreeUrl = (0, _parse3dImplicitTiles.replaceContentUrlTemplate)(subtreesUriTemplate, 0, 0, 0, 0);
|
|
155
|
-
rootSubtreeUrl = resolveUri(subtreeUrl, basePath);
|
|
124
|
+
case 5:
|
|
125
|
+
root = _context.sent;
|
|
156
126
|
_context.next = 9;
|
|
157
|
-
|
|
127
|
+
break;
|
|
128
|
+
|
|
129
|
+
case 8:
|
|
130
|
+
root = normalizeTileData(tileset.root, tileset);
|
|
158
131
|
|
|
159
132
|
case 9:
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
133
|
+
stack = [];
|
|
134
|
+
stack.push(root);
|
|
135
|
+
|
|
136
|
+
case 11:
|
|
137
|
+
if (!(stack.length > 0)) {
|
|
138
|
+
_context.next = 40;
|
|
139
|
+
break;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
tile = stack.pop() || {};
|
|
143
|
+
children = tile.children || [];
|
|
144
|
+
_iterator = _createForOfIteratorHelper(children);
|
|
145
|
+
_context.prev = 15;
|
|
146
|
+
|
|
147
|
+
_iterator.s();
|
|
148
|
+
|
|
149
|
+
case 17:
|
|
150
|
+
if ((_step = _iterator.n()).done) {
|
|
151
|
+
_context.next = 30;
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
childHeader = _step.value;
|
|
156
|
+
childImplicitTilingExtension = getImplicitTilingExtensionData(childHeader);
|
|
157
|
+
|
|
158
|
+
if (!childImplicitTilingExtension) {
|
|
159
|
+
_context.next = 26;
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
_context.next = 23;
|
|
164
|
+
return normalizeImplicitTileHeaders(childHeader, tileset, childImplicitTilingExtension, options);
|
|
165
|
+
|
|
166
|
+
case 23:
|
|
167
|
+
childHeader = _context.sent;
|
|
168
|
+
_context.next = 27;
|
|
169
|
+
break;
|
|
170
|
+
|
|
171
|
+
case 26:
|
|
172
|
+
normalizeTileData(childHeader, {
|
|
173
|
+
basePath: basePath
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
case 27:
|
|
177
|
+
stack.push(childHeader);
|
|
178
|
+
|
|
179
|
+
case 28:
|
|
180
|
+
_context.next = 17;
|
|
181
|
+
break;
|
|
182
|
+
|
|
183
|
+
case 30:
|
|
184
|
+
_context.next = 35;
|
|
185
|
+
break;
|
|
186
|
+
|
|
187
|
+
case 32:
|
|
188
|
+
_context.prev = 32;
|
|
189
|
+
_context.t0 = _context["catch"](15);
|
|
190
|
+
|
|
191
|
+
_iterator.e(_context.t0);
|
|
192
|
+
|
|
193
|
+
case 35:
|
|
194
|
+
_context.prev = 35;
|
|
195
|
+
|
|
196
|
+
_iterator.f();
|
|
197
|
+
|
|
198
|
+
return _context.finish(35);
|
|
199
|
+
|
|
200
|
+
case 38:
|
|
201
|
+
_context.next = 11;
|
|
202
|
+
break;
|
|
203
|
+
|
|
204
|
+
case 40:
|
|
205
|
+
return _context.abrupt("return", root);
|
|
206
|
+
|
|
207
|
+
case 41:
|
|
208
|
+
case "end":
|
|
209
|
+
return _context.stop();
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}, _callee, null, [[15, 32, 35, 38]]);
|
|
213
|
+
}));
|
|
214
|
+
return _normalizeTileHeaders.apply(this, arguments);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
function normalizeImplicitTileHeaders(_x3, _x4, _x5, _x6) {
|
|
218
|
+
return _normalizeImplicitTileHeaders.apply(this, arguments);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
function _normalizeImplicitTileHeaders() {
|
|
222
|
+
_normalizeImplicitTileHeaders = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee2(tile, tileset, implicitTilingExtension, options) {
|
|
223
|
+
var _tileset$root;
|
|
224
|
+
|
|
225
|
+
var basePath, subdivisionScheme, maximumLevel, subtreeLevels, subtreesUriTemplate, replacedUrlTemplate, subtreeUrl, subtree, contentUrlTemplate, refine, rootLodMetricValue, rootBoundingVolume, implicitOptions;
|
|
226
|
+
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
227
|
+
while (1) {
|
|
228
|
+
switch (_context2.prev = _context2.next) {
|
|
229
|
+
case 0:
|
|
230
|
+
basePath = tileset.basePath;
|
|
231
|
+
subdivisionScheme = implicitTilingExtension.subdivisionScheme, maximumLevel = implicitTilingExtension.maximumLevel, subtreeLevels = implicitTilingExtension.subtreeLevels, subtreesUriTemplate = implicitTilingExtension.subtrees.uri;
|
|
232
|
+
replacedUrlTemplate = (0, _parse3dImplicitTiles.replaceContentUrlTemplate)(subtreesUriTemplate, 0, 0, 0, 0);
|
|
233
|
+
subtreeUrl = resolveUri(replacedUrlTemplate, basePath);
|
|
234
|
+
_context2.next = 6;
|
|
235
|
+
return (0, _core.load)(subtreeUrl, _tile3dSubtreeLoader.Tile3DSubtreeLoader, options);
|
|
236
|
+
|
|
237
|
+
case 6:
|
|
238
|
+
subtree = _context2.sent;
|
|
239
|
+
contentUrlTemplate = resolveUri(tile.content.uri, basePath);
|
|
240
|
+
refine = tileset === null || tileset === void 0 ? void 0 : (_tileset$root = tileset.root) === null || _tileset$root === void 0 ? void 0 : _tileset$root.refine;
|
|
241
|
+
rootLodMetricValue = tile.geometricError;
|
|
242
|
+
rootBoundingVolume = tile.boundingVolume;
|
|
243
|
+
implicitOptions = {
|
|
166
244
|
contentUrlTemplate: contentUrlTemplate,
|
|
167
245
|
subtreesUriTemplate: subtreesUriTemplate,
|
|
168
246
|
subdivisionScheme: subdivisionScheme,
|
|
@@ -176,53 +254,53 @@ function _normalizeImplicitTileHeaders() {
|
|
|
176
254
|
getTileType: getTileType,
|
|
177
255
|
getRefine: getRefine
|
|
178
256
|
};
|
|
179
|
-
|
|
180
|
-
return normalizeImplicitTileData(
|
|
257
|
+
_context2.next = 14;
|
|
258
|
+
return normalizeImplicitTileData(tile, subtree, implicitOptions);
|
|
181
259
|
|
|
182
|
-
case
|
|
183
|
-
return
|
|
260
|
+
case 14:
|
|
261
|
+
return _context2.abrupt("return", _context2.sent);
|
|
184
262
|
|
|
185
|
-
case
|
|
263
|
+
case 15:
|
|
186
264
|
case "end":
|
|
187
|
-
return
|
|
265
|
+
return _context2.stop();
|
|
188
266
|
}
|
|
189
267
|
}
|
|
190
|
-
},
|
|
268
|
+
}, _callee2);
|
|
191
269
|
}));
|
|
192
270
|
return _normalizeImplicitTileHeaders.apply(this, arguments);
|
|
193
271
|
}
|
|
194
272
|
|
|
195
|
-
function normalizeImplicitTileData(
|
|
273
|
+
function normalizeImplicitTileData(_x7, _x8, _x9) {
|
|
196
274
|
return _normalizeImplicitTileData.apply(this, arguments);
|
|
197
275
|
}
|
|
198
276
|
|
|
199
277
|
function _normalizeImplicitTileData() {
|
|
200
|
-
_normalizeImplicitTileData = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function
|
|
278
|
+
_normalizeImplicitTileData = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee3(tile, rootSubtree, options) {
|
|
201
279
|
var _yield$parseImplicitT, children, contentUrl;
|
|
202
280
|
|
|
203
|
-
return _regenerator.default.wrap(function
|
|
281
|
+
return _regenerator.default.wrap(function _callee3$(_context3) {
|
|
204
282
|
while (1) {
|
|
205
|
-
switch (
|
|
283
|
+
switch (_context3.prev = _context3.next) {
|
|
206
284
|
case 0:
|
|
207
285
|
if (tile) {
|
|
208
|
-
|
|
286
|
+
_context3.next = 2;
|
|
209
287
|
break;
|
|
210
288
|
}
|
|
211
289
|
|
|
212
|
-
return
|
|
290
|
+
return _context3.abrupt("return", null);
|
|
213
291
|
|
|
214
292
|
case 2:
|
|
215
293
|
tile.lodMetricType = _tiles.LOD_METRIC_TYPE.GEOMETRIC_ERROR;
|
|
216
294
|
tile.lodMetricValue = tile.geometricError;
|
|
217
295
|
tile.transformMatrix = tile.transform;
|
|
218
|
-
|
|
296
|
+
_context3.next = 7;
|
|
219
297
|
return (0, _parse3dImplicitTiles.parseImplicitTiles)({
|
|
220
298
|
subtree: rootSubtree,
|
|
221
299
|
options: options
|
|
222
300
|
});
|
|
223
301
|
|
|
224
302
|
case 7:
|
|
225
|
-
_yield$parseImplicitT =
|
|
303
|
+
_yield$parseImplicitT = _context3.sent;
|
|
226
304
|
children = _yield$parseImplicitT.children;
|
|
227
305
|
contentUrl = _yield$parseImplicitT.contentUrl;
|
|
228
306
|
|
|
@@ -237,15 +315,21 @@ function _normalizeImplicitTileData() {
|
|
|
237
315
|
tile.type = getTileType(tile);
|
|
238
316
|
tile.children = children;
|
|
239
317
|
tile.id = tile.contentUrl;
|
|
240
|
-
return
|
|
318
|
+
return _context3.abrupt("return", tile);
|
|
241
319
|
|
|
242
320
|
case 16:
|
|
243
321
|
case "end":
|
|
244
|
-
return
|
|
322
|
+
return _context3.stop();
|
|
245
323
|
}
|
|
246
324
|
}
|
|
247
|
-
},
|
|
325
|
+
}, _callee3);
|
|
248
326
|
}));
|
|
249
327
|
return _normalizeImplicitTileData.apply(this, arguments);
|
|
250
328
|
}
|
|
329
|
+
|
|
330
|
+
function getImplicitTilingExtensionData(tile) {
|
|
331
|
+
var _tile$extensions;
|
|
332
|
+
|
|
333
|
+
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
|
+
}
|
|
251
335
|
//# 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","root","stack","push","length","children","childHeader","normalizeImplicitTileHeaders","implicitTilingExtension","extensions","subdivisionScheme","maximumLevel","subtreeLevels","subtreesUriTemplate","subtrees","subtreeUrl","rootSubtreeUrl","Tile3DSubtreeLoader","rootSubtree","contentUrlTemplate","rootLodMetricValue","rootBoundingVolume","boundingVolume","normalizeImplicitTileData","subtree","replace"],"mappings":"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","sourcesContent":["import {Tile3DSubtreeLoader} from '../../tile-3d-subtree-loader';\nimport {load} from '@loaders.gl/core';\nimport {Tileset3D, LOD_METRIC_TYPE, TILE_REFINEMENT, TILE_TYPE} from '@loaders.gl/tiles';\nimport {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 function normalizeTileHeaders(tileset) {\n const basePath = tileset.basePath;\n const root = normalizeTileData(tileset.root, tileset);\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 (const childHeader of children) {\n normalizeTileData(childHeader, {basePath});\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(tileset: Tileset3D) {\n if (!tileset.root) {\n return null;\n }\n\n const basePath = tileset.basePath;\n const implicitTilingExtension = tileset.root.extensions['3DTILES_implicit_tiling'];\n const {\n subdivisionScheme,\n maximumLevel,\n subtreeLevels,\n subtrees: {uri: subtreesUriTemplate}\n } = implicitTilingExtension;\n const subtreeUrl = replaceContentUrlTemplate(subtreesUriTemplate, 0, 0, 0, 0);\n const rootSubtreeUrl = resolveUri(subtreeUrl, basePath);\n const rootSubtree = await load(rootSubtreeUrl, Tile3DSubtreeLoader);\n const contentUrlTemplate = resolveUri(tileset.root.content.uri, basePath);\n const refine = tileset.root.refine;\n // @ts-ignore\n const rootLodMetricValue = tileset.root.geometricError;\n const rootBoundingVolume = tileset.root.boundingVolume;\n\n const options = {\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(tileset.root, rootSubtree, options);\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"],"file":"parse-3d-tile-header.js"}
|
|
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"}
|
|
@@ -4,6 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.VERSION = void 0;
|
|
7
|
-
var VERSION = typeof "3.3.0-alpha.
|
|
7
|
+
var VERSION = typeof "3.3.0-alpha.5" !== 'undefined' ? "3.3.0-alpha.5" : 'latest';
|
|
8
8
|
exports.VERSION = VERSION;
|
|
9
9
|
//# sourceMappingURL=version.js.map
|
|
@@ -21,7 +21,6 @@ var _parse3dTile = require("./lib/parsers/parse-3d-tile");
|
|
|
21
21
|
|
|
22
22
|
var _parse3dTileHeader = require("./lib/parsers/parse-3d-tile-header");
|
|
23
23
|
|
|
24
|
-
var IMPLICIT_TILING_EXTENSION_NAME = '3DTILES_implicit_tiling';
|
|
25
24
|
var Tiles3DLoader = {
|
|
26
25
|
id: '3d-tiles',
|
|
27
26
|
name: '3D Tiles',
|
|
@@ -96,31 +95,17 @@ function _parseTileset() {
|
|
|
96
95
|
tilesetJson.loader = options.loader || Tiles3DLoader;
|
|
97
96
|
tilesetJson.url = context.url;
|
|
98
97
|
tilesetJson.basePath = getBaseUri(tilesetJson);
|
|
98
|
+
_context2.next = 6;
|
|
99
|
+
return (0, _parse3dTileHeader.normalizeTileHeaders)(tilesetJson, options);
|
|
99
100
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
break;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
_context2.next = 7;
|
|
106
|
-
return (0, _parse3dTileHeader.normalizeImplicitTileHeaders)(tilesetJson);
|
|
107
|
-
|
|
108
|
-
case 7:
|
|
109
|
-
_context2.t0 = _context2.sent;
|
|
110
|
-
_context2.next = 11;
|
|
111
|
-
break;
|
|
112
|
-
|
|
113
|
-
case 10:
|
|
114
|
-
_context2.t0 = (0, _parse3dTileHeader.normalizeTileHeaders)(tilesetJson);
|
|
115
|
-
|
|
116
|
-
case 11:
|
|
117
|
-
tilesetJson.root = _context2.t0;
|
|
101
|
+
case 6:
|
|
102
|
+
tilesetJson.root = _context2.sent;
|
|
118
103
|
tilesetJson.type = _tiles.TILESET_TYPE.TILES3D;
|
|
119
104
|
tilesetJson.lodMetricType = _tiles.LOD_METRIC_TYPE.GEOMETRIC_ERROR;
|
|
120
105
|
tilesetJson.lodMetricValue = ((_tilesetJson$root = tilesetJson.root) === null || _tilesetJson$root === void 0 ? void 0 : _tilesetJson$root.lodMetricValue) || 0;
|
|
121
106
|
return _context2.abrupt("return", tilesetJson);
|
|
122
107
|
|
|
123
|
-
case
|
|
108
|
+
case 11:
|
|
124
109
|
case "end":
|
|
125
110
|
return _context2.stop();
|
|
126
111
|
}
|
|
@@ -181,10 +166,4 @@ function _parse() {
|
|
|
181
166
|
}));
|
|
182
167
|
return _parse.apply(this, arguments);
|
|
183
168
|
}
|
|
184
|
-
|
|
185
|
-
function hasImplicitTilingExtension(tilesetJson) {
|
|
186
|
-
var _tilesetJson$extensio, _tilesetJson$extensio2;
|
|
187
|
-
|
|
188
|
-
return (tilesetJson === null || tilesetJson === void 0 ? void 0 : (_tilesetJson$extensio = tilesetJson.extensionsRequired) === null || _tilesetJson$extensio === void 0 ? void 0 : _tilesetJson$extensio.includes(IMPLICIT_TILING_EXTENSION_NAME)) && (tilesetJson === null || tilesetJson === void 0 ? void 0 : (_tilesetJson$extensio2 = tilesetJson.extensionsUsed) === null || _tilesetJson$extensio2 === void 0 ? void 0 : _tilesetJson$extensio2.includes(IMPLICIT_TILING_EXTENSION_NAME));
|
|
189
|
-
}
|
|
190
169
|
//# sourceMappingURL=tiles-3d-loader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/tiles-3d-loader.ts"],"names":["
|
|
1
|
+
{"version":3,"sources":["../../src/tiles-3d-loader.ts"],"names":["Tiles3DLoader","id","name","module","version","VERSION","extensions","mimeTypes","tests","parse","options","loadGLTF","decodeQuantizedPositions","isTileset","assetGltfUpAxis","getBaseUri","tileset","path","dirname","url","parseTile","arrayBuffer","context","tile","content","featureIds","byteOffset","parseTileset","data","tilesetJson","JSON","TextDecoder","decode","loader","basePath","root","type","TILESET_TYPE","TILES3D","lodMetricType","LOD_METRIC_TYPE","GEOMETRIC_ERROR","lodMetricValue","loaderOptions","indexOf"],"mappings":"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","sourcesContent":["import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {path} from '@loaders.gl/loader-utils';\nimport {TILESET_TYPE, LOD_METRIC_TYPE} from '@loaders.gl/tiles';\nimport {VERSION} from './lib/utils/version';\nimport {parse3DTile} from './lib/parsers/parse-3d-tile';\nimport {normalizeTileHeaders} from './lib/parsers/parse-3d-tile-header';\n\n/**\n * Loader for 3D Tiles\n */\nexport const Tiles3DLoader: LoaderWithParser = {\n id: '3d-tiles',\n name: '3D Tiles',\n module: '3d-tiles',\n version: VERSION,\n extensions: ['cmpt', 'pnts', 'b3dm', 'i3dm'],\n mimeTypes: ['application/octet-stream'],\n tests: ['cmpt', 'pnts', 'b3dm', 'i3dm'],\n parse,\n options: {\n '3d-tiles': {\n loadGLTF: true,\n decodeQuantizedPositions: false,\n isTileset: 'auto',\n assetGltfUpAxis: null\n }\n }\n};\n\nfunction getBaseUri(tileset) {\n return path.dirname(tileset.url);\n}\n\nasync function parseTile(arrayBuffer, options, context) {\n const tile = {\n content: {\n featureIds: null\n }\n };\n const byteOffset = 0;\n await parse3DTile(arrayBuffer, byteOffset, options, context, tile.content);\n return tile.content;\n}\n\nasync function parseTileset(data, options, context) {\n const tilesetJson = JSON.parse(new TextDecoder().decode(data));\n // eslint-disable-next-line no-use-before-define\n tilesetJson.loader = options.loader || Tiles3DLoader;\n tilesetJson.url = context.url;\n // base path that non-absolute paths in tileset are relative to.\n tilesetJson.basePath = getBaseUri(tilesetJson);\n tilesetJson.root = await normalizeTileHeaders(tilesetJson, options);\n\n tilesetJson.type = TILESET_TYPE.TILES3D;\n\n tilesetJson.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;\n tilesetJson.lodMetricValue = tilesetJson.root?.lodMetricValue || 0;\n\n return tilesetJson;\n}\n\nasync function parse(data, options, context) {\n // auto detect file type\n const loaderOptions = options['3d-tiles'] || {};\n let isTileset;\n if (loaderOptions.isTileset === 'auto') {\n isTileset = context.url && context.url.indexOf('.json') !== -1;\n } else {\n isTileset = loaderOptions.isTileset;\n }\n\n if (isTileset) {\n data = await parseTileset(data, options, context);\n } else {\n data = await parseTile(data, options, context);\n }\n\n return data;\n}\n"],"file":"tiles-3d-loader.js"}
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts"],"names":["Tiles3DLoader","CesiumIonLoader","Tile3DSubtreeLoader","Tile3DWriter","default","Tile3DFeatureTable","Tile3DBatchTable","TILE3D_TYPE","getIonTilesetMetadata","_getIonTilesetMetadata"],"mappings":"AACA,SAAQA,aAAR,QAA4B,mBAA5B;AACA,SAAQC,eAAR,QAA8B,qBAA9B;AACA,SAAQC,mBAAR,QAAkC,0BAAlC;AAGA,SAAQC,YAAR,QAA2B,kBAA3B;AAGA,SAAQC,OAAO,IAAIC,kBAAnB,QAA4C,qCAA5C;AACA,SAAQD,OAAO,IAAIE,gBAAnB,QAA0C,mCAA1C;AAGA,SAAQC,WAAR,QAA0B,iBAA1B;AACA,SAAQC,qBAAqB,IAAIC,sBAAjC,QAA8D,eAA9D","sourcesContent":["// LOADERS\nexport {Tiles3DLoader} from './tiles-3d-loader';\nexport {CesiumIonLoader} from './cesium-ion-loader';\nexport {Tile3DSubtreeLoader} from './tile-3d-subtree-loader';\n\n// WRITERS\nexport {Tile3DWriter} from './tile-3d-writer';\n\n// CLASSES\nexport {default as Tile3DFeatureTable} from './lib/classes/tile-3d-feature-table';\nexport {default as Tile3DBatchTable} from './lib/classes/tile-3d-batch-table';\n\n// EXPERIMENTAL\nexport {TILE3D_TYPE} from './lib/constants';\nexport {getIonTilesetMetadata as _getIonTilesetMetadata} from './lib/ion/ion';\nexport type {FeatureTableJson, B3DMContent, Node3D} from './types';\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts"],"names":["Tiles3DLoader","CesiumIonLoader","Tile3DSubtreeLoader","Tile3DWriter","default","Tile3DFeatureTable","Tile3DBatchTable","TILE3D_TYPE","getIonTilesetMetadata","_getIonTilesetMetadata"],"mappings":"AACA,SAAQA,aAAR,QAA4B,mBAA5B;AACA,SAAQC,eAAR,QAA8B,qBAA9B;AACA,SAAQC,mBAAR,QAAkC,0BAAlC;AAGA,SAAQC,YAAR,QAA2B,kBAA3B;AAGA,SAAQC,OAAO,IAAIC,kBAAnB,QAA4C,qCAA5C;AACA,SAAQD,OAAO,IAAIE,gBAAnB,QAA0C,mCAA1C;AAGA,SAAQC,WAAR,QAA0B,iBAA1B;AACA,SAAQC,qBAAqB,IAAIC,sBAAjC,QAA8D,eAA9D","sourcesContent":["// LOADERS\nexport {Tiles3DLoader} from './tiles-3d-loader';\nexport {CesiumIonLoader} from './cesium-ion-loader';\nexport {Tile3DSubtreeLoader} from './tile-3d-subtree-loader';\n\n// WRITERS\nexport {Tile3DWriter} from './tile-3d-writer';\n\n// CLASSES\nexport {default as Tile3DFeatureTable} from './lib/classes/tile-3d-feature-table';\nexport {default as Tile3DBatchTable} from './lib/classes/tile-3d-batch-table';\n\n// EXPERIMENTAL\nexport {TILE3D_TYPE} from './lib/constants';\nexport {getIonTilesetMetadata as _getIonTilesetMetadata} from './lib/ion/ion';\nexport type {FeatureTableJson, B3DMContent, Node3D, ImplicitTilingExtension} from './types';\n"],"file":"index.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/lib/parsers/helpers/parse-3d-implicit-tiles.ts"],"names":["Tile3DSubtreeLoader","load","QUADTREE_DEVISION_COUNT","OCTREE_DEVISION_COUNT","SUBDIVISION_COUNT_MAP","QUADTREE","OCTREE","parseImplicitTiles","params","options","parentData","mortonIndex","x","y","z","childIndex","globalData","level","subtree","subdivisionScheme","subtreeLevels","maximumLevel","contentUrlTemplate","subtreesUriTemplate","basePath","tile","children","lodMetricValue","contentUrl","childrenPerTile","childX","childY","childZ","levelOffset","childTileMortonIndex","concatBits","tileAvailabilityIndex","childTileX","childTileY","childTileZ","isChildSubtreeAvailable","getAvailabilityResult","childSubtreeAvailability","lev","subtreePath","childSubtreeUrl","replaceContentUrlTemplate","childSubtree","isTileAvailable","tileAvailability","isContentAvailable","contentAvailability","childTileLevel","pData","index","currentTile","length","globalLevel","childCoordinates","formattedTile","formatTileData","push","availabilityData","Boolean","constant","explicitBitstream","getBooleanValueFromBitstream","refine","getRefine","lodMetricType","getTileType","rootLodMetricValue","rootBoundingVolume","uri","replace","boundingVolume","calculateBoundingVolumeForChildTile","content","id","type","region","west","south","east","north","minimumHeight","maximumHeight","boundingVolumesCount","sizeX","sizeY","sizeZ","childWest","childEast","childSouth","childNorth","childMinimumHeight","childMaximumHeight","console","warn","first","second","parseInt","toString","templateUrl","mapUrl","generateMapUrl","matched","items","key","availabilityIndex","availabilityBuffer","byteIndex","Math","floor","bitIndex","bitValue"],"mappings":"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","sourcesContent":["import type {Availability, BoundingVolume, Subtree} from '../../../types';\nimport {Tile3DSubtreeLoader} from '../../../tile-3d-subtree-loader';\nimport {load} from '@loaders.gl/core';\n\nconst QUADTREE_DEVISION_COUNT = 4;\nconst OCTREE_DEVISION_COUNT = 8;\n\nconst SUBDIVISION_COUNT_MAP = {\n QUADTREE: QUADTREE_DEVISION_COUNT,\n OCTREE: OCTREE_DEVISION_COUNT\n};\n\n/**\n * Recursively parse implicit tiles tree\n * Spec - https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_implicit_tiling\n * TODO Check out do we able to use Tile3D class as return type here.\n * @param subtree\n * @param lodMetricValue\n * @param options\n * @param parentData\n * @param childIndex\n * @param level\n * @param globalData\n */\n// eslint-disable-next-line max-statements\nexport async function parseImplicitTiles(params: {\n subtree: Subtree;\n options: any;\n parentData?: {mortonIndex: number; x: number; y: number; z: number};\n childIndex?: number;\n level?: number;\n globalData?: {level: number; mortonIndex: number; x: number; y: number; z: number};\n}) {\n const {\n options,\n parentData = {\n mortonIndex: 0,\n x: 0,\n y: 0,\n z: 0\n },\n childIndex = 0,\n globalData = {\n level: 0,\n mortonIndex: 0,\n x: 0,\n y: 0,\n z: 0\n }\n } = params;\n let {subtree, level = 0} = params;\n const {\n subdivisionScheme,\n subtreeLevels,\n maximumLevel,\n contentUrlTemplate,\n subtreesUriTemplate,\n basePath\n } = options;\n\n const tile = {children: [], lodMetricValue: 0, contentUrl: ''};\n\n const childrenPerTile = SUBDIVISION_COUNT_MAP[subdivisionScheme];\n\n const childX = childIndex & 0b01;\n const childY = (childIndex >> 1) & 0b01;\n const childZ = (childIndex >> 2) & 0b01;\n\n const levelOffset = (childrenPerTile ** level - 1) / (childrenPerTile - 1);\n let childTileMortonIndex = concatBits(parentData.mortonIndex, childIndex);\n let tileAvailabilityIndex = levelOffset + childTileMortonIndex;\n\n // Local tile coordinates\n let childTileX = concatBits(parentData.x, childX);\n let childTileY = concatBits(parentData.y, childY);\n let childTileZ = concatBits(parentData.z, childZ);\n\n // TODO Remove after real implicit tileset will be tested.\n // Degug data\n // tile.level = level + globalData.level;\n // tile.x = concatBits(globalData.x, childTileX);\n // tile.y = concatBits(globalData.y, childTileY);\n // tile.z = concatBits(globalData.z, childTileZ);\n // tile.mortonIndex = childTileMortonIndex;\n // End of debug data\n\n let isChildSubtreeAvailable = false;\n\n if (level + 1 > subtreeLevels) {\n isChildSubtreeAvailable = getAvailabilityResult(\n subtree.childSubtreeAvailability,\n childTileMortonIndex\n );\n }\n\n const x = concatBits(globalData.x, childTileX);\n const y = concatBits(globalData.y, childTileY);\n const z = concatBits(globalData.z, childTileZ);\n const lev = level + globalData.level;\n\n if (isChildSubtreeAvailable) {\n const subtreePath = `${basePath}/${subtreesUriTemplate}`;\n const childSubtreeUrl = replaceContentUrlTemplate(subtreePath, lev, x, y, z);\n const childSubtree = await load(childSubtreeUrl, Tile3DSubtreeLoader);\n\n subtree = childSubtree;\n\n globalData.mortonIndex = childTileMortonIndex;\n globalData.x = childTileX;\n globalData.y = childTileY;\n globalData.z = childTileZ;\n globalData.level = level;\n\n childTileMortonIndex = 0;\n tileAvailabilityIndex = 0;\n childTileX = 0;\n childTileY = 0;\n childTileZ = 0;\n level = 0;\n }\n\n const isTileAvailable = getAvailabilityResult(subtree.tileAvailability, tileAvailabilityIndex);\n\n if (!isTileAvailable || level > maximumLevel) {\n return tile;\n }\n\n const isContentAvailable = getAvailabilityResult(\n subtree.contentAvailability,\n tileAvailabilityIndex\n );\n\n if (isContentAvailable) {\n tile.contentUrl = replaceContentUrlTemplate(contentUrlTemplate, lev, x, y, z);\n }\n\n const childTileLevel = level + 1;\n const pData = {mortonIndex: childTileMortonIndex, x: childTileX, y: childTileY, z: childTileZ};\n\n for (let index = 0; index < childrenPerTile; index++) {\n const currentTile = await parseImplicitTiles({\n subtree,\n options,\n parentData: pData,\n childIndex: index,\n level: childTileLevel,\n globalData\n });\n\n if (currentTile.contentUrl || currentTile.children.length) {\n const globalLevel = lev + 1;\n const childCoordinates = {childTileX, childTileY, childTileZ};\n const formattedTile = formatTileData(currentTile, globalLevel, childCoordinates, options);\n // @ts-ignore\n tile.children.push(formattedTile);\n }\n }\n\n return tile;\n}\n\nfunction getAvailabilityResult(availabilityData: Availability, index: number): boolean {\n if ('constant' in availabilityData) {\n return Boolean(availabilityData.constant);\n }\n\n if (availabilityData.explicitBitstream) {\n return getBooleanValueFromBitstream(index, availabilityData.explicitBitstream);\n }\n\n return false;\n}\n\n/**\n * Do formatting of implicit tile data.\n * TODO Check out do we able to use Tile3D class as type here.\n * @param tile\n * @param lodMetricValue\n * @param options\n * @returns\n */\nfunction formatTileData(\n tile,\n level: number,\n childCoordinates: {childTileX: number; childTileY: number; childTileZ: number},\n options: any\n) {\n const {\n basePath,\n refine,\n getRefine,\n lodMetricType,\n getTileType,\n rootLodMetricValue,\n rootBoundingVolume\n } = options;\n const uri = tile.contentUrl && tile.contentUrl.replace(`${basePath}/`, '');\n const lodMetricValue = rootLodMetricValue / 2 ** level;\n const boundingVolume = calculateBoundingVolumeForChildTile(\n level,\n rootBoundingVolume,\n childCoordinates\n );\n\n return {\n children: tile.children,\n contentUrl: tile.contentUrl,\n content: {uri},\n id: tile.contentUrl,\n refine: getRefine(refine),\n type: getTileType(tile),\n lodMetricType,\n lodMetricValue,\n boundingVolume\n // Temp debug values. Remove when real implicit tileset will be tested.\n // x: tile.x,\n // y: tile.y,\n // z: tile.z,\n // level: tile.level\n };\n}\n\n/**\n * Calculate child bounding volume.\n * Spec - https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_implicit_tiling#subdivision-rules\n * @param level\n * @param rootBoundingVolume\n * @param childCoordinates\n */\nfunction calculateBoundingVolumeForChildTile(\n level: number,\n rootBoundingVolume: BoundingVolume,\n childCoordinates: {childTileX: number; childTileY: number; childTileZ: number}\n): BoundingVolume | null {\n if (rootBoundingVolume.region) {\n const {childTileX, childTileY, childTileZ} = childCoordinates;\n const [west, south, east, north, minimumHeight, maximumHeight] = rootBoundingVolume.region;\n const boundingVolumesCount = 2 ** level;\n\n const sizeX = (east - west) / boundingVolumesCount;\n const sizeY = (north - south) / boundingVolumesCount;\n const sizeZ = (maximumHeight - minimumHeight) / boundingVolumesCount;\n\n const [childWest, childEast] = [west + sizeX * childTileX, west + sizeX * (childTileX + 1)];\n const [childSouth, childNorth] = [south + sizeY * childTileY, south + sizeY * (childTileY + 1)];\n const [childMinimumHeight, childMaximumHeight] = [\n minimumHeight + sizeZ * childTileZ,\n minimumHeight + sizeZ * (childTileZ + 1)\n ];\n\n return {\n region: [childWest, childSouth, childEast, childNorth, childMinimumHeight, childMaximumHeight]\n };\n }\n\n // eslint-disable-next-line no-console\n console.warn('Unsupported bounding volume type: ', rootBoundingVolume);\n return null;\n}\n\n/**\n * Do binary concatenation\n * @param first\n * @param second\n */\nfunction concatBits(first: number, second: number): number {\n return parseInt(first.toString(2) + second.toString(2), 2);\n}\n\n/**\n * Replace implicit tile content url with real coordinates.\n * @param templateUrl\n * @param level\n * @param x\n * @param y\n * @param z\n */\nexport function replaceContentUrlTemplate(\n templateUrl: string,\n level: number,\n x: number,\n y: number,\n z: number\n): string {\n const mapUrl = generateMapUrl({level, x, y, z});\n return templateUrl.replace(/{level}|{x}|{y}|{z}/gi, (matched) => mapUrl[matched]);\n}\n\n/**\n * Get Map object for content url generation\n * @param items\n */\nfunction generateMapUrl(items: {[key: string]: number}): {[key: string]: string} {\n const mapUrl = {};\n\n for (const key in items) {\n mapUrl[`{${key}}`] = items[key];\n }\n return mapUrl;\n}\n\n/**\n * Get boolean value from bistream by index\n * A boolean value is encoded as a single bit, either 0 (false) or 1 (true).\n * Multiple boolean values are packed tightly in the same buffer.\n * These buffers of tightly-packed bits are sometimes referred to as bitstreams.\n * Spec - https://github.com/CesiumGS/3d-tiles/tree/implicit-revisions/specification/Metadata#booleans\n * @param availabilitiIndex\n */\nfunction getBooleanValueFromBitstream(\n availabilityIndex: number,\n availabilityBuffer: Uint8Array\n): boolean {\n const byteIndex = Math.floor(availabilityIndex / 8);\n const bitIndex = availabilityIndex % 8;\n const bitValue = (availabilityBuffer[byteIndex] >> bitIndex) & 1;\n\n return bitValue === 1;\n}\n"],"file":"parse-3d-implicit-tiles.js"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/lib/parsers/helpers/parse-3d-implicit-tiles.ts"],"names":["Tile3DSubtreeLoader","load","QUADTREE_DEVISION_COUNT","OCTREE_DEVISION_COUNT","SUBDIVISION_COUNT_MAP","QUADTREE","OCTREE","parseImplicitTiles","params","options","parentData","mortonIndex","x","y","z","childIndex","globalData","level","subtree","subdivisionScheme","subtreeLevels","maximumLevel","contentUrlTemplate","subtreesUriTemplate","basePath","tile","children","lodMetricValue","contentUrl","childrenPerTile","childX","childY","childZ","levelOffset","childTileMortonIndex","concatBits","tileAvailabilityIndex","childTileX","childTileY","childTileZ","isChildSubtreeAvailable","getAvailabilityResult","childSubtreeAvailability","lev","subtreePath","childSubtreeUrl","replaceContentUrlTemplate","childSubtree","isTileAvailable","tileAvailability","isContentAvailable","contentAvailability","childTileLevel","pData","index","currentTile","length","globalLevel","childCoordinates","formattedTile","formatTileData","push","availabilityData","Boolean","constant","explicitBitstream","getBooleanValueFromBitstream","refine","getRefine","lodMetricType","getTileType","rootLodMetricValue","rootBoundingVolume","uri","replace","boundingVolume","calculateBoundingVolumeForChildTile","content","id","type","geometricError","transform","region","west","south","east","north","minimumHeight","maximumHeight","boundingVolumesCount","sizeX","sizeY","sizeZ","childWest","childEast","childSouth","childNorth","childMinimumHeight","childMaximumHeight","console","warn","first","second","parseInt","toString","templateUrl","mapUrl","generateMapUrl","matched","items","key","availabilityIndex","availabilityBuffer","byteIndex","Math","floor","bitIndex","bitValue"],"mappings":"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","sourcesContent":["import type {Availability, BoundingVolume, Subtree} from '../../../types';\nimport {Tile3DSubtreeLoader} from '../../../tile-3d-subtree-loader';\nimport {load} from '@loaders.gl/core';\n\nconst QUADTREE_DEVISION_COUNT = 4;\nconst OCTREE_DEVISION_COUNT = 8;\n\nconst SUBDIVISION_COUNT_MAP = {\n QUADTREE: QUADTREE_DEVISION_COUNT,\n OCTREE: OCTREE_DEVISION_COUNT\n};\n\n/**\n * Recursively parse implicit tiles tree\n * Spec - https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_implicit_tiling\n * TODO Check out do we able to use Tile3D class as return type here.\n * @param subtree\n * @param lodMetricValue\n * @param options\n * @param parentData\n * @param childIndex\n * @param level\n * @param globalData\n */\n// eslint-disable-next-line max-statements\nexport async function parseImplicitTiles(params: {\n subtree: Subtree;\n options: any;\n parentData?: {mortonIndex: number; x: number; y: number; z: number};\n childIndex?: number;\n level?: number;\n globalData?: {level: number; mortonIndex: number; x: number; y: number; z: number};\n}) {\n const {\n options,\n parentData = {\n mortonIndex: 0,\n x: 0,\n y: 0,\n z: 0\n },\n childIndex = 0,\n globalData = {\n level: 0,\n mortonIndex: 0,\n x: 0,\n y: 0,\n z: 0\n }\n } = params;\n let {subtree, level = 0} = params;\n const {\n subdivisionScheme,\n subtreeLevels,\n maximumLevel,\n contentUrlTemplate,\n subtreesUriTemplate,\n basePath\n } = options;\n\n const tile = {children: [], lodMetricValue: 0, contentUrl: ''};\n\n const childrenPerTile = SUBDIVISION_COUNT_MAP[subdivisionScheme];\n\n const childX = childIndex & 0b01;\n const childY = (childIndex >> 1) & 0b01;\n const childZ = (childIndex >> 2) & 0b01;\n\n const levelOffset = (childrenPerTile ** level - 1) / (childrenPerTile - 1);\n let childTileMortonIndex = concatBits(parentData.mortonIndex, childIndex);\n let tileAvailabilityIndex = levelOffset + childTileMortonIndex;\n\n // Local tile coordinates\n let childTileX = concatBits(parentData.x, childX);\n let childTileY = concatBits(parentData.y, childY);\n let childTileZ = concatBits(parentData.z, childZ);\n\n let isChildSubtreeAvailable = false;\n\n if (level + 1 > subtreeLevels) {\n isChildSubtreeAvailable = getAvailabilityResult(\n subtree.childSubtreeAvailability,\n childTileMortonIndex\n );\n }\n\n const x = concatBits(globalData.x, childTileX);\n const y = concatBits(globalData.y, childTileY);\n const z = concatBits(globalData.z, childTileZ);\n const lev = level + globalData.level;\n\n if (isChildSubtreeAvailable) {\n const subtreePath = `${basePath}/${subtreesUriTemplate}`;\n const childSubtreeUrl = replaceContentUrlTemplate(subtreePath, lev, x, y, z);\n const childSubtree = await load(childSubtreeUrl, Tile3DSubtreeLoader);\n\n subtree = childSubtree;\n\n globalData.mortonIndex = childTileMortonIndex;\n globalData.x = childTileX;\n globalData.y = childTileY;\n globalData.z = childTileZ;\n globalData.level = level;\n\n childTileMortonIndex = 0;\n tileAvailabilityIndex = 0;\n childTileX = 0;\n childTileY = 0;\n childTileZ = 0;\n level = 0;\n }\n\n const isTileAvailable = getAvailabilityResult(subtree.tileAvailability, tileAvailabilityIndex);\n\n if (!isTileAvailable || level > maximumLevel) {\n return tile;\n }\n\n const isContentAvailable = getAvailabilityResult(\n subtree.contentAvailability,\n tileAvailabilityIndex\n );\n\n if (isContentAvailable) {\n tile.contentUrl = replaceContentUrlTemplate(contentUrlTemplate, lev, x, y, z);\n }\n\n const childTileLevel = level + 1;\n const pData = {mortonIndex: childTileMortonIndex, x: childTileX, y: childTileY, z: childTileZ};\n\n for (let index = 0; index < childrenPerTile; index++) {\n const currentTile = await parseImplicitTiles({\n subtree,\n options,\n parentData: pData,\n childIndex: index,\n level: childTileLevel,\n globalData\n });\n\n if (currentTile.contentUrl || currentTile.children.length) {\n const globalLevel = lev + 1;\n const childCoordinates = {childTileX, childTileY, childTileZ};\n const formattedTile = formatTileData(currentTile, globalLevel, childCoordinates, options);\n // @ts-ignore\n tile.children.push(formattedTile);\n }\n }\n\n return tile;\n}\n\nfunction getAvailabilityResult(availabilityData: Availability, index: number): boolean {\n if ('constant' in availabilityData) {\n return Boolean(availabilityData.constant);\n }\n\n if (availabilityData.explicitBitstream) {\n return getBooleanValueFromBitstream(index, availabilityData.explicitBitstream);\n }\n\n return false;\n}\n\n/**\n * Do formatting of implicit tile data.\n * TODO Check out do we able to use Tile3D class as type here.\n * @param tile\n * @param lodMetricValue\n * @param options\n * @returns\n */\nfunction formatTileData(\n tile,\n level: number,\n childCoordinates: {childTileX: number; childTileY: number; childTileZ: number},\n options: any\n) {\n const {\n basePath,\n refine,\n getRefine,\n lodMetricType,\n getTileType,\n rootLodMetricValue,\n rootBoundingVolume\n } = options;\n const uri = tile.contentUrl && tile.contentUrl.replace(`${basePath}/`, '');\n const lodMetricValue = rootLodMetricValue / 2 ** level;\n const boundingVolume = calculateBoundingVolumeForChildTile(\n level,\n rootBoundingVolume,\n childCoordinates\n );\n\n return {\n children: tile.children,\n contentUrl: tile.contentUrl,\n content: {uri},\n id: tile.contentUrl,\n refine: getRefine(refine),\n type: getTileType(tile),\n lodMetricType,\n lodMetricValue,\n geometricError: lodMetricValue,\n transform: tile.transform,\n boundingVolume\n };\n}\n\n/**\n * Calculate child bounding volume.\n * Spec - https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_implicit_tiling#subdivision-rules\n * @param level\n * @param rootBoundingVolume\n * @param childCoordinates\n */\nfunction calculateBoundingVolumeForChildTile(\n level: number,\n rootBoundingVolume: BoundingVolume,\n childCoordinates: {childTileX: number; childTileY: number; childTileZ: number}\n): BoundingVolume | null {\n if (rootBoundingVolume.region) {\n const {childTileX, childTileY, childTileZ} = childCoordinates;\n const [west, south, east, north, minimumHeight, maximumHeight] = rootBoundingVolume.region;\n const boundingVolumesCount = 2 ** level;\n\n const sizeX = (east - west) / boundingVolumesCount;\n const sizeY = (north - south) / boundingVolumesCount;\n const sizeZ = (maximumHeight - minimumHeight) / boundingVolumesCount;\n\n const [childWest, childEast] = [west + sizeX * childTileX, west + sizeX * (childTileX + 1)];\n const [childSouth, childNorth] = [south + sizeY * childTileY, south + sizeY * (childTileY + 1)];\n const [childMinimumHeight, childMaximumHeight] = [\n minimumHeight + sizeZ * childTileZ,\n minimumHeight + sizeZ * (childTileZ + 1)\n ];\n\n return {\n region: [childWest, childSouth, childEast, childNorth, childMinimumHeight, childMaximumHeight]\n };\n }\n\n // eslint-disable-next-line no-console\n console.warn('Unsupported bounding volume type: ', rootBoundingVolume);\n return null;\n}\n\n/**\n * Do binary concatenation\n * @param first\n * @param second\n */\nfunction concatBits(first: number, second: number): number {\n return parseInt(first.toString(2) + second.toString(2), 2);\n}\n\n/**\n * Replace implicit tile content url with real coordinates.\n * @param templateUrl\n * @param level\n * @param x\n * @param y\n * @param z\n */\nexport function replaceContentUrlTemplate(\n templateUrl: string,\n level: number,\n x: number,\n y: number,\n z: number\n): string {\n const mapUrl = generateMapUrl({level, x, y, z});\n return templateUrl.replace(/{level}|{x}|{y}|{z}/gi, (matched) => mapUrl[matched]);\n}\n\n/**\n * Get Map object for content url generation\n * @param items\n */\nfunction generateMapUrl(items: {[key: string]: number}): {[key: string]: string} {\n const mapUrl = {};\n\n for (const key in items) {\n mapUrl[`{${key}}`] = items[key];\n }\n return mapUrl;\n}\n\n/**\n * Get boolean value from bistream by index\n * A boolean value is encoded as a single bit, either 0 (false) or 1 (true).\n * Multiple boolean values are packed tightly in the same buffer.\n * These buffers of tightly-packed bits are sometimes referred to as bitstreams.\n * Spec - https://github.com/CesiumGS/3d-tiles/tree/implicit-revisions/specification/Metadata#booleans\n * @param availabilitiIndex\n */\nfunction getBooleanValueFromBitstream(\n availabilityIndex: number,\n availabilityBuffer: Uint8Array\n): boolean {\n const byteIndex = Math.floor(availabilityIndex / 8);\n const bitIndex = availabilityIndex % 8;\n const bitValue = (availabilityBuffer[byteIndex] >> bitIndex) & 1;\n\n return bitValue === 1;\n}\n"],"file":"parse-3d-implicit-tiles.js"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { fetchFile } from '@loaders.gl/core';
|
|
2
1
|
const SUBTREE_FILE_MAGIC = 0x74627573;
|
|
3
2
|
const SUBTREE_FILE_VERSION = 1;
|
|
4
|
-
export default async function parse3DTilesSubtree(data) {
|
|
3
|
+
export default async function parse3DTilesSubtree(data, options, context) {
|
|
5
4
|
const magic = new Uint32Array(data.slice(0, 4));
|
|
6
5
|
|
|
7
6
|
if (magic[0] !== SUBTREE_FILE_MAGIC) {
|
|
@@ -27,27 +26,49 @@ export default async function parse3DTilesSubtree(data) {
|
|
|
27
26
|
}
|
|
28
27
|
|
|
29
28
|
if ('bufferView' in subtree.tileAvailability) {
|
|
30
|
-
subtree.tileAvailability.explicitBitstream = await getExplicitBitstream(subtree, 'tileAvailability', internalBinaryBuffer);
|
|
29
|
+
subtree.tileAvailability.explicitBitstream = await getExplicitBitstream(subtree, 'tileAvailability', internalBinaryBuffer, context);
|
|
31
30
|
}
|
|
32
31
|
|
|
33
32
|
if ('bufferView' in subtree.contentAvailability) {
|
|
34
|
-
subtree.contentAvailability.explicitBitstream = await getExplicitBitstream(subtree, 'contentAvailability', internalBinaryBuffer);
|
|
33
|
+
subtree.contentAvailability.explicitBitstream = await getExplicitBitstream(subtree, 'contentAvailability', internalBinaryBuffer, context);
|
|
35
34
|
}
|
|
36
35
|
|
|
37
36
|
if ('bufferView' in subtree.childSubtreeAvailability) {
|
|
38
|
-
subtree.childSubtreeAvailability.explicitBitstream = await getExplicitBitstream(subtree, 'childSubtreeAvailability', internalBinaryBuffer);
|
|
37
|
+
subtree.childSubtreeAvailability.explicitBitstream = await getExplicitBitstream(subtree, 'childSubtreeAvailability', internalBinaryBuffer, context);
|
|
39
38
|
}
|
|
40
39
|
|
|
41
40
|
return subtree;
|
|
42
41
|
}
|
|
43
42
|
|
|
44
|
-
|
|
43
|
+
function resolveBufferUri(bitstreamRelativeUri, basePath) {
|
|
44
|
+
const hasProtocol = basePath.startsWith('http');
|
|
45
|
+
|
|
46
|
+
if (hasProtocol) {
|
|
47
|
+
const resolvedUri = new URL(bitstreamRelativeUri, basePath);
|
|
48
|
+
return decodeURI(resolvedUri.toString());
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const basePathWithProtocol = "http://".concat(basePath);
|
|
52
|
+
const resolvedUri = new URL(bitstreamRelativeUri, basePathWithProtocol);
|
|
53
|
+
return "/".concat(resolvedUri.host).concat(resolvedUri.pathname);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
async function getExplicitBitstream(subtree, name, internalBinaryBuffer, context) {
|
|
45
57
|
const bufferViewIndex = subtree[name].bufferView;
|
|
46
58
|
const bufferView = subtree.bufferViews[bufferViewIndex];
|
|
47
59
|
const buffer = subtree.buffers[bufferView.buffer];
|
|
48
60
|
|
|
61
|
+
if (!(context !== null && context !== void 0 && context.url) || !context.fetch) {
|
|
62
|
+
throw new Error('Url is not provided');
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (!context.fetch) {
|
|
66
|
+
throw new Error('fetch is not provided');
|
|
67
|
+
}
|
|
68
|
+
|
|
49
69
|
if (buffer.uri) {
|
|
50
|
-
const
|
|
70
|
+
const bufferUri = resolveBufferUri(buffer.uri, context === null || context === void 0 ? void 0 : context.url);
|
|
71
|
+
const response = await context.fetch(bufferUri);
|
|
51
72
|
const data = await response.arrayBuffer();
|
|
52
73
|
return new Uint8Array(data, bufferView.byteOffset, bufferView.byteLength);
|
|
53
74
|
}
|