@loaders.gl/tile-converter 3.3.0-alpha.3 → 3.3.0-alpha.4
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/3d-tiles-attributes-worker.js +1 -1
- package/dist/3d-tiles-converter/3d-tiles-converter.d.ts +8 -0
- package/dist/3d-tiles-converter/3d-tiles-converter.d.ts.map +1 -1
- package/dist/3d-tiles-converter/3d-tiles-converter.js +57 -43
- package/dist/converter.min.js +21 -21
- package/dist/deps-installer/deps-installer.d.ts +5 -1
- package/dist/deps-installer/deps-installer.d.ts.map +1 -1
- package/dist/deps-installer/deps-installer.js +21 -1
- package/dist/dist.min.js +660 -1016
- package/dist/es5/3d-tiles-attributes-worker.js +1 -1
- package/dist/es5/3d-tiles-converter/3d-tiles-converter.js +115 -101
- package/dist/es5/3d-tiles-converter/3d-tiles-converter.js.map +1 -1
- package/dist/es5/deps-installer/deps-installer.js +70 -6
- package/dist/es5/deps-installer/deps-installer.js.map +1 -1
- package/dist/es5/i3s-attributes-worker.js +1 -1
- package/dist/es5/i3s-attributes-worker.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js +4 -0
- package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/coordinate-converter.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/feature-attributes.js +153 -0
- package/dist/es5/i3s-converter/helpers/feature-attributes.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/geometry-converter.js +40 -44
- package/dist/es5/i3s-converter/helpers/geometry-converter.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/gltf-attributes.js +55 -36
- package/dist/es5/i3s-converter/helpers/gltf-attributes.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/node-pages.js +10 -2
- package/dist/es5/i3s-converter/helpers/node-pages.js.map +1 -1
- package/dist/es5/i3s-converter/i3s-converter.js +364 -435
- package/dist/es5/i3s-converter/i3s-converter.js.map +1 -1
- package/dist/es5/pgm-loader.js +1 -1
- package/dist/esm/3d-tiles-attributes-worker.js +1 -1
- package/dist/esm/3d-tiles-converter/3d-tiles-converter.js +59 -44
- package/dist/esm/3d-tiles-converter/3d-tiles-converter.js.map +1 -1
- package/dist/esm/deps-installer/deps-installer.js +21 -2
- package/dist/esm/deps-installer/deps-installer.js.map +1 -1
- package/dist/esm/i3s-attributes-worker.js +1 -1
- package/dist/esm/i3s-attributes-worker.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/batch-ids-extensions.js +4 -0
- package/dist/esm/i3s-converter/helpers/batch-ids-extensions.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/coordinate-converter.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/feature-attributes.js +138 -0
- package/dist/esm/i3s-converter/helpers/feature-attributes.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/geometry-converter.js +19 -21
- package/dist/esm/i3s-converter/helpers/geometry-converter.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/gltf-attributes.js +55 -36
- package/dist/esm/i3s-converter/helpers/gltf-attributes.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/node-pages.js +9 -2
- package/dist/esm/i3s-converter/helpers/node-pages.js.map +1 -1
- package/dist/esm/i3s-converter/i3s-converter.js +93 -183
- package/dist/esm/i3s-converter/i3s-converter.js.map +1 -1
- package/dist/esm/pgm-loader.js +1 -1
- package/dist/i3s-attributes-worker.d.ts +5 -1
- package/dist/i3s-attributes-worker.d.ts.map +1 -1
- package/dist/i3s-attributes-worker.js +3 -3
- package/dist/i3s-attributes-worker.js.map +2 -2
- package/dist/i3s-converter/helpers/batch-ids-extensions.d.ts +2 -3
- package/dist/i3s-converter/helpers/batch-ids-extensions.d.ts.map +1 -1
- package/dist/i3s-converter/helpers/batch-ids-extensions.js +3 -0
- package/dist/i3s-converter/helpers/coordinate-converter.d.ts +2 -2
- package/dist/i3s-converter/helpers/coordinate-converter.d.ts.map +1 -1
- package/dist/i3s-converter/helpers/feature-attributes.d.ts +32 -0
- package/dist/i3s-converter/helpers/feature-attributes.d.ts.map +1 -1
- package/dist/i3s-converter/helpers/feature-attributes.js +162 -1
- package/dist/i3s-converter/helpers/geometry-converter.d.ts +5 -4
- package/dist/i3s-converter/helpers/geometry-converter.d.ts.map +1 -1
- package/dist/i3s-converter/helpers/geometry-converter.js +29 -27
- package/dist/i3s-converter/helpers/gltf-attributes.d.ts.map +1 -1
- package/dist/i3s-converter/helpers/gltf-attributes.js +50 -30
- package/dist/i3s-converter/helpers/node-pages.d.ts +4 -0
- package/dist/i3s-converter/helpers/node-pages.d.ts.map +1 -1
- package/dist/i3s-converter/helpers/node-pages.js +9 -2
- package/dist/i3s-converter/i3s-converter.d.ts +24 -48
- package/dist/i3s-converter/i3s-converter.d.ts.map +1 -1
- package/dist/i3s-converter/i3s-converter.js +88 -186
- package/dist/i3s-converter/types.d.ts +4 -0
- package/dist/i3s-converter/types.d.ts.map +1 -1
- package/package.json +15 -15
- package/src/3d-tiles-converter/3d-tiles-converter.ts +71 -55
- package/src/deps-installer/deps-installer.ts +29 -2
- package/src/i3s-attributes-worker.ts +5 -1
- package/src/i3s-converter/helpers/batch-ids-extensions.ts +13 -6
- package/src/i3s-converter/helpers/coordinate-converter.ts +2 -2
- package/src/i3s-converter/helpers/feature-attributes.ts +182 -0
- package/src/i3s-converter/helpers/geometry-converter.ts +45 -36
- package/src/i3s-converter/helpers/gltf-attributes.ts +54 -33
- package/src/i3s-converter/helpers/node-pages.ts +10 -2
- package/src/i3s-converter/i3s-converter.ts +125 -210
- package/src/i3s-converter/types.ts +4 -0
|
@@ -8,7 +8,7 @@ exports._typecheckI3SAttributesWorker = exports.Tile3dAttributesWorker = void 0;
|
|
|
8
8
|
|
|
9
9
|
var _workerUtils = require("@loaders.gl/worker-utils");
|
|
10
10
|
|
|
11
|
-
var VERSION = typeof "3.3.0-alpha.
|
|
11
|
+
var VERSION = typeof "3.3.0-alpha.4" !== 'undefined' ? "3.3.0-alpha.4" : 'latest';
|
|
12
12
|
var Tile3dAttributesWorker = {
|
|
13
13
|
id: '3d-tiles-attributes',
|
|
14
14
|
name: '3DTiles Attributes Worker',
|
|
@@ -43,8 +43,6 @@ var _statisticUtills = require("../lib/utils/statistic-utills");
|
|
|
43
43
|
|
|
44
44
|
var _tileset = require("./json-templates/tileset");
|
|
45
45
|
|
|
46
|
-
var _b3dmConverter = _interopRequireDefault(require("./helpers/b3dm-converter"));
|
|
47
|
-
|
|
48
46
|
var _coordinateConverter = require("../i3s-converter/helpers/coordinate-converter");
|
|
49
47
|
|
|
50
48
|
var _dTilesAttributesWorker = require("../3d-tiles-attributes-worker");
|
|
@@ -127,6 +125,11 @@ var Tiles3DConverter = function () {
|
|
|
127
125
|
sourceTilesetJson = _context.sent;
|
|
128
126
|
this.sourceTileset = new _tiles.Tileset3D(sourceTilesetJson, {
|
|
129
127
|
loadOptions: {
|
|
128
|
+
_nodeWorkers: true,
|
|
129
|
+
reuseWorkers: true,
|
|
130
|
+
'i3s-content-nodejs': {
|
|
131
|
+
workerUrl: './modules/i3s/dist/i3s-content-nodejs-worker.js'
|
|
132
|
+
},
|
|
130
133
|
i3s: {
|
|
131
134
|
coordinateSystem: _i3s.COORDINATE_SYSTEM.LNGLAT_OFFSETS,
|
|
132
135
|
decodeTextures: false
|
|
@@ -200,66 +203,46 @@ var Tiles3DConverter = function () {
|
|
|
200
203
|
return convert;
|
|
201
204
|
}()
|
|
202
205
|
}, {
|
|
203
|
-
key: "
|
|
206
|
+
key: "convertChildNode",
|
|
204
207
|
value: function () {
|
|
205
|
-
var
|
|
206
|
-
var
|
|
208
|
+
var _convertChildNode = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee2(parentSourceNode, parentNode, level, childNodeInfo) {
|
|
209
|
+
var sourceChild, _sourceChild$header, featureAttributes, boundingVolume, child, i3sAttributesData, b3dm;
|
|
207
210
|
|
|
208
211
|
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
209
212
|
while (1) {
|
|
210
213
|
switch (_context2.prev = _context2.next) {
|
|
211
214
|
case 0:
|
|
212
|
-
|
|
213
|
-
_context2.next = 2;
|
|
214
|
-
break;
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
return _context2.abrupt("return");
|
|
218
|
-
|
|
219
|
-
case 2:
|
|
220
|
-
_iterator = _createForOfIteratorHelper(parentSourceNode.header.children || []);
|
|
221
|
-
_context2.prev = 3;
|
|
222
|
-
|
|
223
|
-
_iterator.s();
|
|
224
|
-
|
|
225
|
-
case 5:
|
|
226
|
-
if ((_step = _iterator.n()).done) {
|
|
227
|
-
_context2.next = 40;
|
|
228
|
-
break;
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
childNodeInfo = _step.value;
|
|
232
|
-
_context2.next = 9;
|
|
215
|
+
_context2.next = 2;
|
|
233
216
|
return this._loadChildNode(parentSourceNode, childNodeInfo);
|
|
234
217
|
|
|
235
|
-
case
|
|
218
|
+
case 2:
|
|
236
219
|
sourceChild = _context2.sent;
|
|
237
220
|
parentSourceNode.children.push(sourceChild);
|
|
238
221
|
|
|
239
222
|
if (!sourceChild.contentUrl) {
|
|
240
|
-
_context2.next =
|
|
223
|
+
_context2.next = 29;
|
|
241
224
|
break;
|
|
242
225
|
}
|
|
243
226
|
|
|
244
|
-
_context2.next =
|
|
227
|
+
_context2.next = 7;
|
|
245
228
|
return this.sourceTileset._loadTile(sourceChild);
|
|
246
229
|
|
|
247
|
-
case
|
|
230
|
+
case 7:
|
|
248
231
|
this.vertexCounter += sourceChild.content.vertexCount;
|
|
249
232
|
featureAttributes = null;
|
|
250
233
|
|
|
251
234
|
if (!this.attributeStorageInfo) {
|
|
252
|
-
_context2.next =
|
|
235
|
+
_context2.next = 13;
|
|
253
236
|
break;
|
|
254
237
|
}
|
|
255
238
|
|
|
256
|
-
_context2.next =
|
|
239
|
+
_context2.next = 12;
|
|
257
240
|
return this._loadChildAttributes(sourceChild, this.attributeStorageInfo);
|
|
258
241
|
|
|
259
|
-
case
|
|
242
|
+
case 12:
|
|
260
243
|
featureAttributes = _context2.sent;
|
|
261
244
|
|
|
262
|
-
case
|
|
245
|
+
case 13:
|
|
263
246
|
if (!sourceChild.header.obb) {
|
|
264
247
|
sourceChild.header.obb = (0, _coordinateConverter.createObbFromMbs)(sourceChild.header.mbs);
|
|
265
248
|
}
|
|
@@ -276,62 +259,93 @@ var Tiles3DConverter = function () {
|
|
|
276
259
|
tileContent: sourceChild.content,
|
|
277
260
|
textureFormat: sourceChild === null || sourceChild === void 0 ? void 0 : (_sourceChild$header = sourceChild.header) === null || _sourceChild$header === void 0 ? void 0 : _sourceChild$header.textureFormat
|
|
278
261
|
};
|
|
279
|
-
_context2.next =
|
|
280
|
-
return
|
|
262
|
+
_context2.next = 19;
|
|
263
|
+
return (0, _dTilesAttributesWorker.transform3DTilesAttributesOnWorker)(i3sAttributesData, {
|
|
264
|
+
source: this.workerSource.tile3dWorkerSource,
|
|
265
|
+
featureAttributes: featureAttributes
|
|
266
|
+
});
|
|
281
267
|
|
|
282
|
-
case
|
|
268
|
+
case 19:
|
|
283
269
|
b3dm = _context2.sent;
|
|
284
270
|
child.content = {
|
|
285
271
|
uri: "".concat(sourceChild.id, ".b3dm"),
|
|
286
272
|
boundingVolume: boundingVolume
|
|
287
273
|
};
|
|
288
|
-
_context2.next =
|
|
274
|
+
_context2.next = 23;
|
|
289
275
|
return (0, _fileUtils.writeFile)(this.tilesetPath, new Uint8Array(b3dm), "".concat(sourceChild.id, ".b3dm"));
|
|
290
276
|
|
|
291
|
-
case
|
|
277
|
+
case 23:
|
|
292
278
|
parentNode.children.push(child);
|
|
293
279
|
sourceChild.unloadContent();
|
|
294
|
-
_context2.next =
|
|
280
|
+
_context2.next = 27;
|
|
295
281
|
return this._addChildren(sourceChild, child, level + 1);
|
|
296
282
|
|
|
297
|
-
case
|
|
298
|
-
_context2.next =
|
|
283
|
+
case 27:
|
|
284
|
+
_context2.next = 31;
|
|
299
285
|
break;
|
|
300
286
|
|
|
301
|
-
case
|
|
302
|
-
_context2.next =
|
|
287
|
+
case 29:
|
|
288
|
+
_context2.next = 31;
|
|
303
289
|
return this._addChildren(sourceChild, parentNode, level + 1);
|
|
304
290
|
|
|
305
|
-
case
|
|
306
|
-
|
|
307
|
-
|
|
291
|
+
case 31:
|
|
292
|
+
case "end":
|
|
293
|
+
return _context2.stop();
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}, _callee2, this);
|
|
297
|
+
}));
|
|
308
298
|
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
299
|
+
function convertChildNode(_x2, _x3, _x4, _x5) {
|
|
300
|
+
return _convertChildNode.apply(this, arguments);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
return convertChildNode;
|
|
304
|
+
}()
|
|
305
|
+
}, {
|
|
306
|
+
key: "_addChildren",
|
|
307
|
+
value: function () {
|
|
308
|
+
var _addChildren2 = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee3(parentSourceNode, parentNode, level) {
|
|
309
|
+
var promises, _iterator, _step, childNodeInfo;
|
|
312
310
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
311
|
+
return _regenerator.default.wrap(function _callee3$(_context3) {
|
|
312
|
+
while (1) {
|
|
313
|
+
switch (_context3.prev = _context3.next) {
|
|
314
|
+
case 0:
|
|
315
|
+
if (!(this.options.maxDepth && level > this.options.maxDepth)) {
|
|
316
|
+
_context3.next = 2;
|
|
317
|
+
break;
|
|
318
|
+
}
|
|
316
319
|
|
|
317
|
-
|
|
320
|
+
return _context3.abrupt("return");
|
|
318
321
|
|
|
319
|
-
case
|
|
320
|
-
|
|
322
|
+
case 2:
|
|
323
|
+
promises = [];
|
|
324
|
+
_iterator = _createForOfIteratorHelper(parentSourceNode.header.children || []);
|
|
321
325
|
|
|
322
|
-
|
|
326
|
+
try {
|
|
327
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
328
|
+
childNodeInfo = _step.value;
|
|
329
|
+
promises.push(this.convertChildNode(parentSourceNode, parentNode, level, childNodeInfo));
|
|
330
|
+
}
|
|
331
|
+
} catch (err) {
|
|
332
|
+
_iterator.e(err);
|
|
333
|
+
} finally {
|
|
334
|
+
_iterator.f();
|
|
335
|
+
}
|
|
323
336
|
|
|
324
|
-
|
|
337
|
+
_context3.next = 7;
|
|
338
|
+
return Promise.all(promises);
|
|
325
339
|
|
|
326
|
-
case
|
|
340
|
+
case 7:
|
|
327
341
|
case "end":
|
|
328
|
-
return
|
|
342
|
+
return _context3.stop();
|
|
329
343
|
}
|
|
330
344
|
}
|
|
331
|
-
},
|
|
345
|
+
}, _callee3, this);
|
|
332
346
|
}));
|
|
333
347
|
|
|
334
|
-
function _addChildren(
|
|
348
|
+
function _addChildren(_x6, _x7, _x8) {
|
|
335
349
|
return _addChildren2.apply(this, arguments);
|
|
336
350
|
}
|
|
337
351
|
|
|
@@ -340,25 +354,25 @@ var Tiles3DConverter = function () {
|
|
|
340
354
|
}, {
|
|
341
355
|
key: "_loadChildNode",
|
|
342
356
|
value: function () {
|
|
343
|
-
var _loadChildNode2 = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function
|
|
357
|
+
var _loadChildNode2 = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee4(parentNode, childNodeInfo) {
|
|
344
358
|
var header, _ref, loader, nodeUrl, options;
|
|
345
359
|
|
|
346
|
-
return _regenerator.default.wrap(function
|
|
360
|
+
return _regenerator.default.wrap(function _callee4$(_context4) {
|
|
347
361
|
while (1) {
|
|
348
|
-
switch (
|
|
362
|
+
switch (_context4.prev = _context4.next) {
|
|
349
363
|
case 0:
|
|
350
364
|
if (!this.sourceTileset.tileset.nodePages) {
|
|
351
|
-
|
|
365
|
+
_context4.next = 7;
|
|
352
366
|
break;
|
|
353
367
|
}
|
|
354
368
|
|
|
355
369
|
console.log("Node conversion: ".concat(childNodeInfo.id));
|
|
356
|
-
|
|
370
|
+
_context4.next = 4;
|
|
357
371
|
return this.sourceTileset.tileset.nodePagesTile.formTileFromNodePages(childNodeInfo.id);
|
|
358
372
|
|
|
359
373
|
case 4:
|
|
360
|
-
header =
|
|
361
|
-
|
|
374
|
+
header = _context4.sent;
|
|
375
|
+
_context4.next = 14;
|
|
362
376
|
break;
|
|
363
377
|
|
|
364
378
|
case 7:
|
|
@@ -371,24 +385,24 @@ var Tiles3DConverter = function () {
|
|
|
371
385
|
})
|
|
372
386
|
};
|
|
373
387
|
console.log("Node conversion: ".concat(nodeUrl));
|
|
374
|
-
|
|
388
|
+
_context4.next = 13;
|
|
375
389
|
return (0, _core.load)(nodeUrl, loader, options);
|
|
376
390
|
|
|
377
391
|
case 13:
|
|
378
|
-
header =
|
|
392
|
+
header = _context4.sent;
|
|
379
393
|
|
|
380
394
|
case 14:
|
|
381
|
-
return
|
|
395
|
+
return _context4.abrupt("return", new _tiles.Tile3D(this.sourceTileset, header, parentNode));
|
|
382
396
|
|
|
383
397
|
case 15:
|
|
384
398
|
case "end":
|
|
385
|
-
return
|
|
399
|
+
return _context4.stop();
|
|
386
400
|
}
|
|
387
401
|
}
|
|
388
|
-
},
|
|
402
|
+
}, _callee4, this);
|
|
389
403
|
}));
|
|
390
404
|
|
|
391
|
-
function _loadChildNode(
|
|
405
|
+
function _loadChildNode(_x9, _x10) {
|
|
392
406
|
return _loadChildNode2.apply(this, arguments);
|
|
393
407
|
}
|
|
394
408
|
|
|
@@ -430,11 +444,11 @@ var Tiles3DConverter = function () {
|
|
|
430
444
|
}, {
|
|
431
445
|
key: "_loadChildAttributes",
|
|
432
446
|
value: function () {
|
|
433
|
-
var _loadChildAttributes2 = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function
|
|
447
|
+
var _loadChildAttributes2 = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee5(sourceChild, attributeStorageInfo) {
|
|
434
448
|
var promises, attributeUrls, index, inputUrl, attribute, options, attributesList;
|
|
435
|
-
return _regenerator.default.wrap(function
|
|
449
|
+
return _regenerator.default.wrap(function _callee5$(_context5) {
|
|
436
450
|
while (1) {
|
|
437
|
-
switch (
|
|
451
|
+
switch (_context5.prev = _context5.next) {
|
|
438
452
|
case 0:
|
|
439
453
|
promises = [];
|
|
440
454
|
attributeUrls = sourceChild.header.attributeUrls;
|
|
@@ -449,25 +463,25 @@ var Tiles3DConverter = function () {
|
|
|
449
463
|
promises.push((0, _core.load)(inputUrl, _i3s.I3SAttributeLoader, options));
|
|
450
464
|
}
|
|
451
465
|
|
|
452
|
-
|
|
466
|
+
_context5.next = 5;
|
|
453
467
|
return Promise.all(promises);
|
|
454
468
|
|
|
455
469
|
case 5:
|
|
456
|
-
attributesList =
|
|
470
|
+
attributesList = _context5.sent;
|
|
457
471
|
|
|
458
472
|
this._replaceNestedArrays(attributesList);
|
|
459
473
|
|
|
460
|
-
return
|
|
474
|
+
return _context5.abrupt("return", Object.assign.apply(Object, [{}].concat((0, _toConsumableArray2.default)(attributesList))));
|
|
461
475
|
|
|
462
476
|
case 8:
|
|
463
477
|
case "end":
|
|
464
|
-
return
|
|
478
|
+
return _context5.stop();
|
|
465
479
|
}
|
|
466
480
|
}
|
|
467
|
-
},
|
|
481
|
+
}, _callee5, this);
|
|
468
482
|
}));
|
|
469
483
|
|
|
470
|
-
function _loadChildAttributes(
|
|
484
|
+
function _loadChildAttributes(_x11, _x12) {
|
|
471
485
|
return _loadChildAttributes2.apply(this, arguments);
|
|
472
486
|
}
|
|
473
487
|
|
|
@@ -498,17 +512,17 @@ var Tiles3DConverter = function () {
|
|
|
498
512
|
}, {
|
|
499
513
|
key: "_finishConversion",
|
|
500
514
|
value: function () {
|
|
501
|
-
var _finishConversion2 = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function
|
|
515
|
+
var _finishConversion2 = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee6(params) {
|
|
502
516
|
var filesSize, diff, conversionTime;
|
|
503
|
-
return _regenerator.default.wrap(function
|
|
517
|
+
return _regenerator.default.wrap(function _callee6$(_context6) {
|
|
504
518
|
while (1) {
|
|
505
|
-
switch (
|
|
519
|
+
switch (_context6.prev = _context6.next) {
|
|
506
520
|
case 0:
|
|
507
|
-
|
|
521
|
+
_context6.next = 2;
|
|
508
522
|
return (0, _statisticUtills.calculateFilesSize)(params);
|
|
509
523
|
|
|
510
524
|
case 2:
|
|
511
|
-
filesSize =
|
|
525
|
+
filesSize = _context6.sent;
|
|
512
526
|
diff = _process.default.hrtime(this.conversionStartTime);
|
|
513
527
|
conversionTime = (0, _statisticUtills.timeConverter)(diff);
|
|
514
528
|
console.log("------------------------------------------------");
|
|
@@ -520,13 +534,13 @@ var Tiles3DConverter = function () {
|
|
|
520
534
|
|
|
521
535
|
case 11:
|
|
522
536
|
case "end":
|
|
523
|
-
return
|
|
537
|
+
return _context6.stop();
|
|
524
538
|
}
|
|
525
539
|
}
|
|
526
|
-
},
|
|
540
|
+
}, _callee6, this);
|
|
527
541
|
}));
|
|
528
542
|
|
|
529
|
-
function _finishConversion(
|
|
543
|
+
function _finishConversion(_x13) {
|
|
530
544
|
return _finishConversion2.apply(this, arguments);
|
|
531
545
|
}
|
|
532
546
|
|
|
@@ -535,33 +549,33 @@ var Tiles3DConverter = function () {
|
|
|
535
549
|
}, {
|
|
536
550
|
key: "loadWorkers",
|
|
537
551
|
value: function () {
|
|
538
|
-
var _loadWorkers = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function
|
|
552
|
+
var _loadWorkers = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee7() {
|
|
539
553
|
var tile3dAttributesWorkerUrl, sourceResponse, source;
|
|
540
|
-
return _regenerator.default.wrap(function
|
|
554
|
+
return _regenerator.default.wrap(function _callee7$(_context7) {
|
|
541
555
|
while (1) {
|
|
542
|
-
switch (
|
|
556
|
+
switch (_context7.prev = _context7.next) {
|
|
543
557
|
case 0:
|
|
544
558
|
console.log("Loading workers source...");
|
|
545
559
|
tile3dAttributesWorkerUrl = (0, _workerUtils.getWorkerURL)(_dTilesAttributesWorker.Tile3dAttributesWorker, _objectSpread({}, (0, _core.getLoaderOptions)()));
|
|
546
|
-
|
|
560
|
+
_context7.next = 4;
|
|
547
561
|
return (0, _core.fetchFile)(tile3dAttributesWorkerUrl);
|
|
548
562
|
|
|
549
563
|
case 4:
|
|
550
|
-
sourceResponse =
|
|
551
|
-
|
|
564
|
+
sourceResponse = _context7.sent;
|
|
565
|
+
_context7.next = 7;
|
|
552
566
|
return sourceResponse.text();
|
|
553
567
|
|
|
554
568
|
case 7:
|
|
555
|
-
source =
|
|
569
|
+
source = _context7.sent;
|
|
556
570
|
this.workerSource.tile3dWorkerSource = source;
|
|
557
571
|
console.log("Loading workers source completed!");
|
|
558
572
|
|
|
559
573
|
case 10:
|
|
560
574
|
case "end":
|
|
561
|
-
return
|
|
575
|
+
return _context7.stop();
|
|
562
576
|
}
|
|
563
577
|
}
|
|
564
|
-
},
|
|
578
|
+
}, _callee7, this);
|
|
565
579
|
}));
|
|
566
580
|
|
|
567
581
|
function loadWorkers() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/3d-tiles-converter/3d-tiles-converter.ts"],"names":["I3S","Tiles3DConverter","options","tilesetPath","vertexCounter","conversionStartTime","geoidHeightModel","sourceTileset","attributeStorageInfo","workerSource","isBrowser","console","log","BROWSER_ERROR_MESSAGE","inputUrl","outputPath","tilesetName","maxDepth","egmFilePath","process","hrtime","PGMLoader","loadWorkers","I3SLoader","sourceTilesetJson","Tileset3D","loadOptions","i3s","coordinateSystem","COORDINATE_SYSTEM","LNGLAT_OFFSETS","decodeTextures","tilesetInitializationPromise","rootNode","root","header","obb","mbs","rootTile","boundingVolume","box","geometricError","children","_addChildren","tileset","JSON","stringify","_finishConversion","slpk","workerFarm","WorkerFarm","getWorkerFarm","destroy","parentSourceNode","parentNode","level","childNodeInfo","_loadChildNode","sourceChild","push","contentUrl","_loadTile","content","vertexCount","featureAttributes","_loadChildAttributes","child","i3sAttributesData","tileContent","textureFormat","B3dmConverter","convert","b3dm","uri","id","Uint8Array","unloadContent","nodePages","nodePagesTile","formTileFromNodePages","loader","nodeUrl","_relativeUrlToFullUrl","url","href","isTileHeader","loadContent","Tile3D","baseUrl","relativeUrl","resultArray","split","relativeUrlArray","folder","slice","join","promises","attributeUrls","index","length","attribute","attributeName","name","attributeType","_getAttributeType","I3SAttributeLoader","Promise","all","attributesList","_replaceNestedArrays","Object","assign","attributeValues","valueType","objectIds","attributeObject","key","Array","from","params","filesSize","diff","conversionTime","tile3dAttributesWorkerUrl","Tile3dAttributesWorker","sourceResponse","text","source","tile3dWorkerSource"],"mappings":"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","sourcesContent":["import type {AttributeStorageInfo, FeatureAttribute, NodeReference} from '@loaders.gl/i3s';\nimport type {Node3D} from '@loaders.gl/3d-tiles';\n\nimport {join} from 'path';\nimport process from 'process';\nimport transform from 'json-map-transform';\nimport {fetchFile, getLoaderOptions, load, isBrowser} from '@loaders.gl/core';\nimport {I3SLoader, I3SAttributeLoader, COORDINATE_SYSTEM} from '@loaders.gl/i3s';\nimport {Tileset3D, Tile3D} from '@loaders.gl/tiles';\nimport {Geoid} from '@math.gl/geoid';\n\nimport {PGMLoader} from '../pgm-loader';\nimport {i3sObbTo3dTilesObb} from './helpers/i3s-obb-to-3d-tiles-obb';\nimport {convertScreenThresholdToGeometricError} from '../lib/utils/lod-conversion-utils';\nimport {writeFile, removeDir} from '../lib/utils/file-utils';\nimport {calculateFilesSize, timeConverter} from '../lib/utils/statistic-utills';\nimport {TILESET as tilesetTemplate} from './json-templates/tileset';\nimport B3dmConverter from './helpers/b3dm-converter';\nimport {createObbFromMbs} from '../i3s-converter/helpers/coordinate-converter';\nimport {\n I3SAttributesData,\n Tile3dAttributesWorker\n /*transform3DTilesAttributesOnWorker*/\n} from '../3d-tiles-attributes-worker';\nimport {getWorkerURL, WorkerFarm} from '@loaders.gl/worker-utils';\nimport {BROWSER_ERROR_MESSAGE} from '../constants';\n\nconst I3S = 'I3S';\n\n/**\n * Converter from i3s to 3d-tiles\n */\nexport default class Tiles3DConverter {\n options: any;\n tilesetPath: string;\n vertexCounter: number;\n conversionStartTime: [number, number];\n geoidHeightModel: Geoid | null;\n sourceTileset: Tileset3D | null;\n attributeStorageInfo: AttributeStorageInfo | null;\n workerSource: {[key: string]: string} = {};\n\n constructor() {\n this.options = {};\n this.tilesetPath = '';\n this.vertexCounter = 0;\n this.conversionStartTime = [0, 0];\n this.geoidHeightModel = null;\n this.sourceTileset = null;\n this.attributeStorageInfo = null;\n this.workerSource = {};\n }\n\n /**\n * Convert i3s format data to 3dTiles\n * @param options\n * @param options.inputUrl the url to read the tileset from\n * @param options.outputPath the output filename\n * @param options.tilesetName the output name of the tileset\n * @param options.egmFilePath location of *.pgm file to convert heights from ellipsoidal to gravity-related format\n * @param options.maxDepth The max tree depth of conversion\n */\n public async convert(options: {\n inputUrl: string;\n outputPath: string;\n tilesetName: string;\n maxDepth?: number;\n egmFilePath: string;\n }): Promise<any> {\n if (isBrowser) {\n console.log(BROWSER_ERROR_MESSAGE);\n return BROWSER_ERROR_MESSAGE;\n }\n const {inputUrl, outputPath, tilesetName, maxDepth, egmFilePath} = options;\n this.conversionStartTime = process.hrtime();\n this.options = {maxDepth};\n\n console.log('Loading egm file...'); // eslint-disable-line\n this.geoidHeightModel = await load(egmFilePath, PGMLoader);\n console.log('Loading egm file completed!'); // eslint-disable-line\n\n await this.loadWorkers();\n\n const sourceTilesetJson = await load(inputUrl, I3SLoader, {});\n\n this.sourceTileset = new Tileset3D(sourceTilesetJson, {\n loadOptions: {\n i3s: {coordinateSystem: COORDINATE_SYSTEM.LNGLAT_OFFSETS, decodeTextures: false}\n }\n });\n\n await this.sourceTileset.tilesetInitializationPromise;\n const rootNode = this.sourceTileset.root!;\n if (!rootNode.header.obb) {\n rootNode.header.obb = createObbFromMbs(rootNode.header.mbs);\n }\n\n this.tilesetPath = join(`${outputPath}`, `${tilesetName}`);\n this.attributeStorageInfo = sourceTilesetJson.attributeStorageInfo;\n // Removing the tilesetPath needed to exclude erroneous files after conversion\n try {\n await removeDir(this.tilesetPath);\n } catch (e) {\n // do nothing\n }\n\n const rootTile: Node3D = {\n boundingVolume: {\n box: i3sObbTo3dTilesObb(rootNode.header.obb, this.geoidHeightModel)\n },\n geometricError: convertScreenThresholdToGeometricError(rootNode),\n children: []\n };\n\n await this._addChildren(rootNode, rootTile, 1);\n\n const tileset = transform({root: rootTile}, tilesetTemplate());\n await writeFile(this.tilesetPath, JSON.stringify(tileset), 'tileset.json');\n\n this._finishConversion({slpk: false, outputPath, tilesetName});\n\n // Clean up worker pools\n const workerFarm = WorkerFarm.getWorkerFarm({});\n workerFarm.destroy();\n }\n\n /**\n * The recursive function of traversal of a nodes tree\n * @param parentSourceNode the parent node tile object (@loaders.gl/tiles/Tile3D)\n * @param parentNode object in resulting tileset\n * @param level a current level of a tree depth\n */\n private async _addChildren(\n parentSourceNode: Tile3D,\n parentNode: Node3D,\n level: number\n ): Promise<void> {\n if (this.options.maxDepth && level > this.options.maxDepth) {\n return;\n }\n for (const childNodeInfo of parentSourceNode.header.children || []) {\n const sourceChild = await this._loadChildNode(parentSourceNode, childNodeInfo);\n parentSourceNode.children.push(sourceChild);\n if (sourceChild.contentUrl) {\n await this.sourceTileset!._loadTile(sourceChild);\n this.vertexCounter += sourceChild.content.vertexCount;\n\n let featureAttributes: FeatureAttribute | null = null;\n if (this.attributeStorageInfo) {\n featureAttributes = await this._loadChildAttributes(\n sourceChild,\n this.attributeStorageInfo\n );\n }\n\n if (!sourceChild.header.obb) {\n sourceChild.header.obb = createObbFromMbs(sourceChild.header.mbs);\n }\n\n const boundingVolume = {\n box: i3sObbTo3dTilesObb(sourceChild.header.obb, this.geoidHeightModel)\n };\n const child: Node3D = {\n boundingVolume,\n geometricError: convertScreenThresholdToGeometricError(sourceChild),\n children: []\n };\n\n const i3sAttributesData: I3SAttributesData = {\n tileContent: sourceChild.content,\n textureFormat: sourceChild?.header?.textureFormat\n };\n\n // TODO Uncomment when 3d-tiles-attributes-worker will be published on CDN.\n // const b3dm = await transform3DTilesAttributesOnWorker(i3sAttributesData, {\n // source: this.workerSource.tile3dWorkerSource,\n // featureAttributes\n // });\n\n const b3dm = await new B3dmConverter().convert(i3sAttributesData, featureAttributes);\n\n child.content = {\n uri: `${sourceChild.id}.b3dm`,\n boundingVolume\n };\n await writeFile(this.tilesetPath, new Uint8Array(b3dm), `${sourceChild.id}.b3dm`);\n parentNode.children.push(child);\n\n sourceChild.unloadContent();\n await this._addChildren(sourceChild, child, level + 1);\n } else {\n await this._addChildren(sourceChild, parentNode, level + 1);\n }\n }\n }\n\n /**\n * Load a child node having information from the node header\n * @param parentNode a parent node tile object (@loaders.gl/tiles/Tile3D)\n * @param childNodeInfo child information from 3DNodeIndexDocument\n * (https://github.com/Esri/i3s-spec/blob/master/docs/1.7/nodeReference.cmn.md)\n */\n private async _loadChildNode(parentNode: Tile3D, childNodeInfo: NodeReference): Promise<Tile3D> {\n let header;\n if (this.sourceTileset!.tileset.nodePages) {\n console.log(`Node conversion: ${childNodeInfo.id}`); // eslint-disable-line no-console,no-undef\n header = await this.sourceTileset!.tileset.nodePagesTile.formTileFromNodePages(\n childNodeInfo.id\n );\n } else {\n const {loader} = this.sourceTileset!;\n const nodeUrl = this._relativeUrlToFullUrl(parentNode.url, childNodeInfo.href!);\n // load metadata\n const options = {\n i3s: {\n ...this.sourceTileset!.loadOptions,\n isTileHeader: true,\n loadContent: false\n }\n };\n\n console.log(`Node conversion: ${nodeUrl}`); // eslint-disable-line no-console,no-undef\n header = await load(nodeUrl, loader, options);\n }\n return new Tile3D(this.sourceTileset!, header, parentNode);\n }\n\n /**\n * Make an url of a resource from its relative url having the base url\n * @param baseUrl the base url. A resulting url will be related from this url\n * @param relativeUrl a realtive url of a resource\n */\n private _relativeUrlToFullUrl(baseUrl: string, relativeUrl: string): string {\n let resultArray = baseUrl.split('/');\n const relativeUrlArray = relativeUrl.split('/');\n for (const folder of relativeUrlArray) {\n switch (folder) {\n case '.':\n continue; // eslint-disable-line no-continue\n case '..':\n resultArray = resultArray.slice(0, -1);\n break;\n default:\n resultArray.push(folder);\n }\n }\n return resultArray.join('/');\n }\n\n /**\n * Do loading all attributes related to particular node.\n * @param sourceChild\n * @param attributeStorageInfo\n * @returns Promise of attributes object.\n */\n private async _loadChildAttributes(\n sourceChild: Tile3D,\n attributeStorageInfo: AttributeStorageInfo\n ): Promise<FeatureAttribute> {\n const promises: any[] = [];\n const {attributeUrls} = sourceChild.header;\n\n for (let index = 0; index < attributeUrls.length; index++) {\n const inputUrl = attributeUrls[index];\n const attribute = attributeStorageInfo[index];\n const options = {\n attributeName: attribute.name,\n attributeType: this._getAttributeType(attribute)\n };\n\n promises.push(load(inputUrl, I3SAttributeLoader, options));\n }\n const attributesList = await Promise.all(promises);\n this._replaceNestedArrays(attributesList);\n return Object.assign({}, ...attributesList);\n }\n\n /**\n * Returns attribute type for loading attributes\n * @param attribute\n * Workaround for I3S v1.6. There is no attribute.attributeValues.valueType field in attribute.\n * There is an 'Oid32' type if attribute has objectIds property.\n * Doc: https://github.com/Esri/i3s-spec/blob/master/docs/1.6/attributeStorageInfo.cmn.md\n */\n private _getAttributeType(attribute: AttributeStorageInfo): string {\n if (attribute.attributeValues) {\n return attribute.attributeValues.valueType;\n } else if (attribute.objectIds) {\n return 'Oid32';\n }\n return '';\n }\n\n /**\n * Make simple arrays from attribute typed arrays.\n * @param attributesList\n */\n private _replaceNestedArrays(attributesList: FeatureAttribute[]): void {\n for (let index = 0; index < attributesList.length; index++) {\n const attributeObject = attributesList[index];\n\n for (const key in attributeObject) {\n attributeObject[key] = Array.from(attributeObject[key]);\n }\n }\n }\n\n /**\n * Print statistics in the end of conversion\n * @param params - output files data\n */\n private async _finishConversion(params: {\n slpk: boolean;\n outputPath: string;\n tilesetName: string;\n }): Promise<void> {\n const filesSize = await calculateFilesSize(params);\n const diff = process.hrtime(this.conversionStartTime);\n const conversionTime = timeConverter(diff);\n\n console.log(`------------------------------------------------`); // eslint-disable-line\n console.log(`Finish conversion of ${I3S}`); // eslint-disable-line\n console.log(`Total conversion time: ${conversionTime}`); // eslint-disable-line\n console.log(`Vertex count: `, this.vertexCounter); // eslint-disable-line\n console.log(`File(s) size: `, filesSize, ' bytes'); // eslint-disable-line\n console.log(`------------------------------------------------`); // eslint-disable-line\n }\n\n private async loadWorkers(): Promise<void> {\n console.log(`Loading workers source...`); // eslint-disable-line no-undef, no-console\n const tile3dAttributesWorkerUrl = getWorkerURL(Tile3dAttributesWorker, {...getLoaderOptions()});\n const sourceResponse = await fetchFile(tile3dAttributesWorkerUrl);\n const source = await sourceResponse.text();\n\n this.workerSource.tile3dWorkerSource = source;\n console.log(`Loading workers source completed!`); // eslint-disable-line no-undef, no-console\n }\n}\n"],"file":"3d-tiles-converter.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/3d-tiles-converter/3d-tiles-converter.ts"],"names":["I3S","Tiles3DConverter","options","tilesetPath","vertexCounter","conversionStartTime","geoidHeightModel","sourceTileset","attributeStorageInfo","workerSource","isBrowser","console","log","BROWSER_ERROR_MESSAGE","inputUrl","outputPath","tilesetName","maxDepth","egmFilePath","process","hrtime","PGMLoader","loadWorkers","I3SLoader","sourceTilesetJson","Tileset3D","loadOptions","_nodeWorkers","reuseWorkers","workerUrl","i3s","coordinateSystem","COORDINATE_SYSTEM","LNGLAT_OFFSETS","decodeTextures","tilesetInitializationPromise","rootNode","root","header","obb","mbs","rootTile","boundingVolume","box","geometricError","children","_addChildren","tileset","JSON","stringify","_finishConversion","slpk","workerFarm","WorkerFarm","getWorkerFarm","destroy","parentSourceNode","parentNode","level","childNodeInfo","_loadChildNode","sourceChild","push","contentUrl","_loadTile","content","vertexCount","featureAttributes","_loadChildAttributes","child","i3sAttributesData","tileContent","textureFormat","source","tile3dWorkerSource","b3dm","uri","id","Uint8Array","unloadContent","promises","convertChildNode","Promise","all","nodePages","nodePagesTile","formTileFromNodePages","loader","nodeUrl","_relativeUrlToFullUrl","url","href","isTileHeader","loadContent","Tile3D","baseUrl","relativeUrl","resultArray","split","relativeUrlArray","folder","slice","join","attributeUrls","index","length","attribute","attributeName","name","attributeType","_getAttributeType","I3SAttributeLoader","attributesList","_replaceNestedArrays","Object","assign","attributeValues","valueType","objectIds","attributeObject","key","Array","from","params","filesSize","diff","conversionTime","tile3dAttributesWorkerUrl","Tile3dAttributesWorker","sourceResponse","text"],"mappings":"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","sourcesContent":["import type {AttributeStorageInfo, FeatureAttribute, NodeReference} from '@loaders.gl/i3s';\nimport type {Node3D} from '@loaders.gl/3d-tiles';\n\nimport {join} from 'path';\nimport process from 'process';\nimport transform from 'json-map-transform';\nimport {fetchFile, getLoaderOptions, load, isBrowser} from '@loaders.gl/core';\nimport {I3SLoader, I3SAttributeLoader, COORDINATE_SYSTEM} from '@loaders.gl/i3s';\nimport {Tileset3D, Tile3D} from '@loaders.gl/tiles';\nimport {Geoid} from '@math.gl/geoid';\n\nimport {PGMLoader} from '../pgm-loader';\nimport {i3sObbTo3dTilesObb} from './helpers/i3s-obb-to-3d-tiles-obb';\nimport {convertScreenThresholdToGeometricError} from '../lib/utils/lod-conversion-utils';\nimport {writeFile, removeDir} from '../lib/utils/file-utils';\nimport {calculateFilesSize, timeConverter} from '../lib/utils/statistic-utills';\nimport {TILESET as tilesetTemplate} from './json-templates/tileset';\nimport {createObbFromMbs} from '../i3s-converter/helpers/coordinate-converter';\nimport {\n I3SAttributesData,\n Tile3dAttributesWorker,\n transform3DTilesAttributesOnWorker\n} from '../3d-tiles-attributes-worker';\nimport {getWorkerURL, WorkerFarm} from '@loaders.gl/worker-utils';\nimport {BROWSER_ERROR_MESSAGE} from '../constants';\n\nconst I3S = 'I3S';\n\n/**\n * Converter from i3s to 3d-tiles\n */\nexport default class Tiles3DConverter {\n options: any;\n tilesetPath: string;\n vertexCounter: number;\n conversionStartTime: [number, number];\n geoidHeightModel: Geoid | null;\n sourceTileset: Tileset3D | null;\n attributeStorageInfo: AttributeStorageInfo | null;\n workerSource: {[key: string]: string} = {};\n\n constructor() {\n this.options = {};\n this.tilesetPath = '';\n this.vertexCounter = 0;\n this.conversionStartTime = [0, 0];\n this.geoidHeightModel = null;\n this.sourceTileset = null;\n this.attributeStorageInfo = null;\n this.workerSource = {};\n }\n\n /**\n * Convert i3s format data to 3dTiles\n * @param options\n * @param options.inputUrl the url to read the tileset from\n * @param options.outputPath the output filename\n * @param options.tilesetName the output name of the tileset\n * @param options.egmFilePath location of *.pgm file to convert heights from ellipsoidal to gravity-related format\n * @param options.maxDepth The max tree depth of conversion\n */\n public async convert(options: {\n inputUrl: string;\n outputPath: string;\n tilesetName: string;\n maxDepth?: number;\n egmFilePath: string;\n }): Promise<any> {\n if (isBrowser) {\n console.log(BROWSER_ERROR_MESSAGE);\n return BROWSER_ERROR_MESSAGE;\n }\n const {inputUrl, outputPath, tilesetName, maxDepth, egmFilePath} = options;\n this.conversionStartTime = process.hrtime();\n this.options = {maxDepth};\n\n console.log('Loading egm file...'); // eslint-disable-line\n this.geoidHeightModel = await load(egmFilePath, PGMLoader);\n console.log('Loading egm file completed!'); // eslint-disable-line\n\n await this.loadWorkers();\n\n const sourceTilesetJson = await load(inputUrl, I3SLoader, {});\n\n this.sourceTileset = new Tileset3D(sourceTilesetJson, {\n loadOptions: {\n _nodeWorkers: true,\n reuseWorkers: true,\n 'i3s-content-nodejs': {\n workerUrl: './modules/i3s/dist/i3s-content-nodejs-worker.js'\n },\n i3s: {coordinateSystem: COORDINATE_SYSTEM.LNGLAT_OFFSETS, decodeTextures: false}\n }\n });\n\n await this.sourceTileset.tilesetInitializationPromise;\n const rootNode = this.sourceTileset.root!;\n if (!rootNode.header.obb) {\n rootNode.header.obb = createObbFromMbs(rootNode.header.mbs);\n }\n\n this.tilesetPath = join(`${outputPath}`, `${tilesetName}`);\n this.attributeStorageInfo = sourceTilesetJson.attributeStorageInfo;\n // Removing the tilesetPath needed to exclude erroneous files after conversion\n try {\n await removeDir(this.tilesetPath);\n } catch (e) {\n // do nothing\n }\n\n const rootTile: Node3D = {\n boundingVolume: {\n box: i3sObbTo3dTilesObb(rootNode.header.obb, this.geoidHeightModel)\n },\n geometricError: convertScreenThresholdToGeometricError(rootNode),\n children: []\n };\n\n await this._addChildren(rootNode, rootTile, 1);\n\n const tileset = transform({root: rootTile}, tilesetTemplate());\n await writeFile(this.tilesetPath, JSON.stringify(tileset), 'tileset.json');\n\n this._finishConversion({slpk: false, outputPath, tilesetName});\n\n // Clean up worker pools\n const workerFarm = WorkerFarm.getWorkerFarm({});\n workerFarm.destroy();\n }\n\n /**\n * Convert particular I3S Node\n * @param parentSourceNode the parent node tile object (@loaders.gl/tiles/Tile3D)\n * @param parentNode object in resulting tileset\n * @param level a current level of a tree depth\n * @param childNodeInfo child node to convert\n */\n private async convertChildNode(\n parentSourceNode: Tile3D,\n parentNode: Node3D,\n level: number,\n childNodeInfo: NodeReference\n ): Promise<void> {\n const sourceChild = await this._loadChildNode(parentSourceNode, childNodeInfo);\n parentSourceNode.children.push(sourceChild);\n if (sourceChild.contentUrl) {\n await this.sourceTileset!._loadTile(sourceChild);\n this.vertexCounter += sourceChild.content.vertexCount;\n\n let featureAttributes: FeatureAttribute | null = null;\n if (this.attributeStorageInfo) {\n featureAttributes = await this._loadChildAttributes(sourceChild, this.attributeStorageInfo);\n }\n\n if (!sourceChild.header.obb) {\n sourceChild.header.obb = createObbFromMbs(sourceChild.header.mbs);\n }\n\n const boundingVolume = {\n box: i3sObbTo3dTilesObb(sourceChild.header.obb, this.geoidHeightModel)\n };\n const child: Node3D = {\n boundingVolume,\n geometricError: convertScreenThresholdToGeometricError(sourceChild),\n children: []\n };\n\n const i3sAttributesData: I3SAttributesData = {\n tileContent: sourceChild.content,\n textureFormat: sourceChild?.header?.textureFormat\n };\n\n const b3dm = await transform3DTilesAttributesOnWorker(i3sAttributesData, {\n source: this.workerSource.tile3dWorkerSource,\n featureAttributes\n });\n\n child.content = {\n uri: `${sourceChild.id}.b3dm`,\n boundingVolume\n };\n await writeFile(this.tilesetPath, new Uint8Array(b3dm), `${sourceChild.id}.b3dm`);\n parentNode.children.push(child);\n\n sourceChild.unloadContent();\n await this._addChildren(sourceChild, child, level + 1);\n } else {\n await this._addChildren(sourceChild, parentNode, level + 1);\n }\n }\n\n /**\n * The recursive function of traversal of a nodes tree\n * @param parentSourceNode the parent node tile object (@loaders.gl/tiles/Tile3D)\n * @param parentNode object in resulting tileset\n * @param level a current level of a tree depth\n */\n private async _addChildren(\n parentSourceNode: Tile3D,\n parentNode: Node3D,\n level: number\n ): Promise<void> {\n if (this.options.maxDepth && level > this.options.maxDepth) {\n return;\n }\n const promises: Promise<void>[] = [];\n for (const childNodeInfo of parentSourceNode.header.children || []) {\n promises.push(this.convertChildNode(parentSourceNode, parentNode, level, childNodeInfo));\n }\n await Promise.all(promises);\n }\n\n /**\n * Load a child node having information from the node header\n * @param parentNode a parent node tile object (@loaders.gl/tiles/Tile3D)\n * @param childNodeInfo child information from 3DNodeIndexDocument\n * (https://github.com/Esri/i3s-spec/blob/master/docs/1.7/nodeReference.cmn.md)\n */\n private async _loadChildNode(parentNode: Tile3D, childNodeInfo: NodeReference): Promise<Tile3D> {\n let header;\n if (this.sourceTileset!.tileset.nodePages) {\n console.log(`Node conversion: ${childNodeInfo.id}`); // eslint-disable-line no-console,no-undef\n header = await this.sourceTileset!.tileset.nodePagesTile.formTileFromNodePages(\n childNodeInfo.id\n );\n } else {\n const {loader} = this.sourceTileset!;\n const nodeUrl = this._relativeUrlToFullUrl(parentNode.url, childNodeInfo.href!);\n // load metadata\n const options = {\n i3s: {\n ...this.sourceTileset!.loadOptions,\n isTileHeader: true,\n loadContent: false\n }\n };\n\n console.log(`Node conversion: ${nodeUrl}`); // eslint-disable-line no-console,no-undef\n header = await load(nodeUrl, loader, options);\n }\n return new Tile3D(this.sourceTileset!, header, parentNode);\n }\n\n /**\n * Make an url of a resource from its relative url having the base url\n * @param baseUrl the base url. A resulting url will be related from this url\n * @param relativeUrl a realtive url of a resource\n */\n private _relativeUrlToFullUrl(baseUrl: string, relativeUrl: string): string {\n let resultArray = baseUrl.split('/');\n const relativeUrlArray = relativeUrl.split('/');\n for (const folder of relativeUrlArray) {\n switch (folder) {\n case '.':\n continue; // eslint-disable-line no-continue\n case '..':\n resultArray = resultArray.slice(0, -1);\n break;\n default:\n resultArray.push(folder);\n }\n }\n return resultArray.join('/');\n }\n\n /**\n * Do loading all attributes related to particular node.\n * @param sourceChild\n * @param attributeStorageInfo\n * @returns Promise of attributes object.\n */\n private async _loadChildAttributes(\n sourceChild: Tile3D,\n attributeStorageInfo: AttributeStorageInfo\n ): Promise<FeatureAttribute> {\n const promises: any[] = [];\n const {attributeUrls} = sourceChild.header;\n\n for (let index = 0; index < attributeUrls.length; index++) {\n const inputUrl = attributeUrls[index];\n const attribute = attributeStorageInfo[index];\n const options = {\n attributeName: attribute.name,\n attributeType: this._getAttributeType(attribute)\n };\n\n promises.push(load(inputUrl, I3SAttributeLoader, options));\n }\n const attributesList = await Promise.all(promises);\n this._replaceNestedArrays(attributesList);\n return Object.assign({}, ...attributesList);\n }\n\n /**\n * Returns attribute type for loading attributes\n * @param attribute\n * Workaround for I3S v1.6. There is no attribute.attributeValues.valueType field in attribute.\n * There is an 'Oid32' type if attribute has objectIds property.\n * Doc: https://github.com/Esri/i3s-spec/blob/master/docs/1.6/attributeStorageInfo.cmn.md\n */\n private _getAttributeType(attribute: AttributeStorageInfo): string {\n if (attribute.attributeValues) {\n return attribute.attributeValues.valueType;\n } else if (attribute.objectIds) {\n return 'Oid32';\n }\n return '';\n }\n\n /**\n * Make simple arrays from attribute typed arrays.\n * @param attributesList\n */\n private _replaceNestedArrays(attributesList: FeatureAttribute[]): void {\n for (let index = 0; index < attributesList.length; index++) {\n const attributeObject = attributesList[index];\n\n for (const key in attributeObject) {\n attributeObject[key] = Array.from(attributeObject[key]);\n }\n }\n }\n\n /**\n * Print statistics in the end of conversion\n * @param params - output files data\n */\n private async _finishConversion(params: {\n slpk: boolean;\n outputPath: string;\n tilesetName: string;\n }): Promise<void> {\n const filesSize = await calculateFilesSize(params);\n const diff = process.hrtime(this.conversionStartTime);\n const conversionTime = timeConverter(diff);\n\n console.log(`------------------------------------------------`); // eslint-disable-line\n console.log(`Finish conversion of ${I3S}`); // eslint-disable-line\n console.log(`Total conversion time: ${conversionTime}`); // eslint-disable-line\n console.log(`Vertex count: `, this.vertexCounter); // eslint-disable-line\n console.log(`File(s) size: `, filesSize, ' bytes'); // eslint-disable-line\n console.log(`------------------------------------------------`); // eslint-disable-line\n }\n\n private async loadWorkers(): Promise<void> {\n console.log(`Loading workers source...`); // eslint-disable-line no-undef, no-console\n const tile3dAttributesWorkerUrl = getWorkerURL(Tile3dAttributesWorker, {...getLoaderOptions()});\n const sourceResponse = await fetchFile(tile3dAttributesWorkerUrl);\n const source = await sourceResponse.text();\n\n this.workerSource.tile3dWorkerSource = source;\n console.log(`Loading workers source completed!`); // eslint-disable-line no-undef, no-console\n }\n}\n"],"file":"3d-tiles-converter.js"}
|