@loaders.gl/tile-converter 3.3.0-alpha.4 → 3.3.0-alpha.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/3d-tiles-attributes-worker.d.ts +1 -1
- package/dist/3d-tiles-attributes-worker.js +2 -3
- package/dist/3d-tiles-attributes-worker.js.map +3 -3
- package/dist/3d-tiles-converter/helpers/b3dm-converter.d.ts +5 -5
- package/dist/3d-tiles-converter/helpers/b3dm-converter.d.ts.map +1 -1
- package/dist/3d-tiles-converter/helpers/b3dm-converter.js +21 -17
- package/dist/converter.min.js +23 -20
- package/dist/dist.min.js +38223 -46900
- package/dist/es5/3d-tiles-attributes-worker.js +4 -7
- package/dist/es5/3d-tiles-attributes-worker.js.map +1 -1
- package/dist/es5/3d-tiles-converter/3d-tiles-converter.js +12 -111
- package/dist/es5/3d-tiles-converter/3d-tiles-converter.js.map +1 -1
- package/dist/es5/3d-tiles-converter/helpers/b3dm-converter.js +53 -85
- package/dist/es5/3d-tiles-converter/helpers/b3dm-converter.js.map +1 -1
- package/dist/es5/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js +0 -8
- package/dist/es5/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js.map +1 -1
- package/dist/es5/3d-tiles-converter/helpers/texture-atlas.js +0 -5
- package/dist/es5/3d-tiles-converter/helpers/texture-atlas.js.map +1 -1
- package/dist/es5/3d-tiles-converter/json-templates/tileset.js +0 -6
- package/dist/es5/3d-tiles-converter/json-templates/tileset.js.map +1 -1
- package/dist/es5/bundle.js +0 -1
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/constants.js.map +1 -1
- package/dist/es5/converter-cli.js +2 -53
- package/dist/es5/converter-cli.js.map +1 -1
- package/dist/es5/deps-installer/deps-installer.js +5 -35
- package/dist/es5/deps-installer/deps-installer.js.map +1 -1
- package/dist/es5/i3s-attributes-worker.js +3 -6
- package/dist/es5/i3s-attributes-worker.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js +2 -28
- package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/coordinate-converter.js +2 -20
- package/dist/es5/i3s-converter/helpers/coordinate-converter.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/create-scene-server-path.js +0 -11
- package/dist/es5/i3s-converter/helpers/create-scene-server-path.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/feature-attributes.js +5 -34
- package/dist/es5/i3s-converter/helpers/feature-attributes.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/geometry-attributes.js +13 -45
- package/dist/es5/i3s-converter/helpers/geometry-attributes.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/geometry-converter.js +26 -221
- package/dist/es5/i3s-converter/helpers/geometry-converter.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/gltf-attributes.js +2 -16
- package/dist/es5/i3s-converter/helpers/gltf-attributes.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/node-debug.js +4 -23
- package/dist/es5/i3s-converter/helpers/node-debug.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/node-pages.js +50 -86
- package/dist/es5/i3s-converter/helpers/node-pages.js.map +1 -1
- package/dist/es5/i3s-converter/i3s-converter.js +43 -360
- package/dist/es5/i3s-converter/i3s-converter.js.map +1 -1
- package/dist/es5/i3s-converter/json-templates/layers.js +1 -15
- package/dist/es5/i3s-converter/json-templates/layers.js.map +1 -1
- package/dist/es5/i3s-converter/json-templates/metadata.js +0 -2
- package/dist/es5/i3s-converter/json-templates/metadata.js.map +1 -1
- package/dist/es5/i3s-converter/json-templates/node.js +2 -12
- package/dist/es5/i3s-converter/json-templates/node.js.map +1 -1
- package/dist/es5/i3s-converter/json-templates/scene-server.js +0 -2
- package/dist/es5/i3s-converter/json-templates/scene-server.js.map +1 -1
- package/dist/es5/i3s-converter/json-templates/shared-resources.js +6 -29
- package/dist/es5/i3s-converter/json-templates/shared-resources.js.map +1 -1
- package/dist/es5/i3s-converter/json-templates/store.js.map +1 -1
- package/dist/es5/i3s-converter/types.js.map +1 -1
- package/dist/es5/i3s-server/app.js +0 -5
- package/dist/es5/i3s-server/app.js.map +1 -1
- package/dist/es5/i3s-server/controllers/index-controller.js +0 -16
- package/dist/es5/i3s-server/controllers/index-controller.js.map +1 -1
- package/dist/es5/i3s-server/routes/index.js +1 -10
- package/dist/es5/i3s-server/routes/index.js.map +1 -1
- package/dist/es5/index.js +0 -3
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/lib/utils/compress-util.js +19 -74
- package/dist/es5/lib/utils/compress-util.js.map +1 -1
- package/dist/es5/lib/utils/file-utils.js +10 -38
- package/dist/es5/lib/utils/file-utils.js.map +1 -1
- package/dist/es5/lib/utils/lod-conversion-utils.js +0 -7
- package/dist/es5/lib/utils/lod-conversion-utils.js.map +1 -1
- package/dist/es5/lib/utils/queue.js +0 -14
- package/dist/es5/lib/utils/queue.js.map +1 -1
- package/dist/es5/lib/utils/statistic-utills.js +1 -46
- package/dist/es5/lib/utils/statistic-utills.js.map +1 -1
- package/dist/es5/lib/utils/write-queue.js +0 -52
- package/dist/es5/lib/utils/write-queue.js.map +1 -1
- package/dist/es5/pgm-loader.js +1 -8
- package/dist/es5/pgm-loader.js.map +1 -1
- package/dist/es5/workers/3d-tiles-attributes-worker.js +2 -9
- package/dist/es5/workers/3d-tiles-attributes-worker.js.map +1 -1
- package/dist/es5/workers/i3s-attributes-worker.js +1 -9
- package/dist/es5/workers/i3s-attributes-worker.js.map +1 -1
- package/dist/esm/3d-tiles-attributes-worker.js +4 -2
- package/dist/esm/3d-tiles-attributes-worker.js.map +1 -1
- package/dist/esm/3d-tiles-converter/3d-tiles-converter.js +8 -40
- package/dist/esm/3d-tiles-converter/3d-tiles-converter.js.map +1 -1
- package/dist/esm/3d-tiles-converter/helpers/b3dm-converter.js +29 -50
- package/dist/esm/3d-tiles-converter/helpers/b3dm-converter.js.map +1 -1
- package/dist/esm/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js +1 -0
- package/dist/esm/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js.map +1 -1
- package/dist/esm/3d-tiles-converter/helpers/texture-atlas.js +1 -4
- package/dist/esm/3d-tiles-converter/helpers/texture-atlas.js.map +1 -1
- package/dist/esm/3d-tiles-converter/json-templates/tileset.js +0 -3
- package/dist/esm/3d-tiles-converter/json-templates/tileset.js.map +1 -1
- package/dist/esm/bundle.js +1 -1
- package/dist/esm/bundle.js.map +1 -1
- package/dist/esm/constants.js.map +1 -1
- package/dist/esm/converter-cli.js +3 -38
- package/dist/esm/converter-cli.js.map +1 -1
- package/dist/esm/deps-installer/deps-installer.js +6 -7
- package/dist/esm/deps-installer/deps-installer.js.map +1 -1
- package/dist/esm/i3s-attributes-worker.js +3 -1
- package/dist/esm/i3s-attributes-worker.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/batch-ids-extensions.js +4 -23
- package/dist/esm/i3s-converter/helpers/batch-ids-extensions.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/coordinate-converter.js +4 -6
- package/dist/esm/i3s-converter/helpers/coordinate-converter.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/create-scene-server-path.js +1 -0
- package/dist/esm/i3s-converter/helpers/create-scene-server-path.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/feature-attributes.js +6 -20
- package/dist/esm/i3s-converter/helpers/feature-attributes.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/geometry-attributes.js +3 -22
- package/dist/esm/i3s-converter/helpers/geometry-attributes.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/geometry-converter.js +28 -139
- package/dist/esm/i3s-converter/helpers/geometry-converter.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/gltf-attributes.js +7 -12
- package/dist/esm/i3s-converter/helpers/gltf-attributes.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/node-debug.js +3 -13
- package/dist/esm/i3s-converter/helpers/node-debug.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/node-pages.js +2 -21
- package/dist/esm/i3s-converter/helpers/node-pages.js.map +1 -1
- package/dist/esm/i3s-converter/i3s-converter.js +49 -137
- package/dist/esm/i3s-converter/i3s-converter.js.map +1 -1
- package/dist/esm/i3s-converter/json-templates/layers.js +1 -11
- package/dist/esm/i3s-converter/json-templates/layers.js.map +1 -1
- package/dist/esm/i3s-converter/json-templates/metadata.js.map +1 -1
- package/dist/esm/i3s-converter/json-templates/node.js +0 -4
- package/dist/esm/i3s-converter/json-templates/node.js.map +1 -1
- package/dist/esm/i3s-converter/json-templates/scene-server.js.map +1 -1
- package/dist/esm/i3s-converter/json-templates/shared-resources.js +0 -12
- package/dist/esm/i3s-converter/json-templates/shared-resources.js.map +1 -1
- package/dist/esm/i3s-converter/json-templates/store.js.map +1 -1
- package/dist/esm/i3s-converter/types.js.map +1 -1
- package/dist/esm/i3s-server/app.js +0 -5
- package/dist/esm/i3s-server/app.js.map +1 -1
- package/dist/esm/i3s-server/controllers/index-controller.js +0 -5
- package/dist/esm/i3s-server/controllers/index-controller.js.map +1 -1
- package/dist/esm/i3s-server/routes/index.js +0 -3
- package/dist/esm/i3s-server/routes/index.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/utils/compress-util.js +19 -12
- package/dist/esm/lib/utils/compress-util.js.map +1 -1
- package/dist/esm/lib/utils/file-utils.js +10 -8
- package/dist/esm/lib/utils/file-utils.js.map +1 -1
- package/dist/esm/lib/utils/lod-conversion-utils.js +2 -6
- package/dist/esm/lib/utils/lod-conversion-utils.js.map +1 -1
- package/dist/esm/lib/utils/queue.js +0 -4
- package/dist/esm/lib/utils/queue.js.map +1 -1
- package/dist/esm/lib/utils/statistic-utills.js +0 -11
- package/dist/esm/lib/utils/statistic-utills.js.map +1 -1
- package/dist/esm/lib/utils/write-queue.js +5 -23
- package/dist/esm/lib/utils/write-queue.js.map +1 -1
- package/dist/esm/pgm-loader.js +3 -1
- package/dist/esm/pgm-loader.js.map +1 -1
- package/dist/esm/workers/3d-tiles-attributes-worker.js +4 -1
- package/dist/esm/workers/3d-tiles-attributes-worker.js.map +1 -1
- package/dist/esm/workers/i3s-attributes-worker.js +4 -1
- package/dist/esm/workers/i3s-attributes-worker.js.map +1 -1
- package/dist/i3s-attributes-worker.js +2 -3
- package/dist/i3s-attributes-worker.js.map +3 -3
- package/dist/i3s-converter/helpers/geometry-converter.d.ts.map +1 -1
- package/dist/i3s-converter/helpers/geometry-converter.js +2 -0
- package/dist/i3s-converter/i3s-converter.js +5 -1
- package/dist/pgm-loader.d.ts.map +1 -1
- package/dist/pgm-loader.js +2 -1
- package/dist/workers/3d-tiles-attributes-worker.js +1 -1
- package/package.json +15 -15
- package/src/3d-tiles-attributes-worker.ts +1 -1
- package/src/3d-tiles-converter/helpers/b3dm-converter.ts +25 -18
- package/src/i3s-converter/helpers/geometry-converter.ts +2 -0
- package/src/pgm-loader.ts +2 -2
- package/src/workers/3d-tiles-attributes-worker.ts +1 -1
|
@@ -1,19 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
6
|
-
|
|
7
5
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
8
|
-
|
|
9
6
|
var _workerUtils = require("@loaders.gl/worker-utils");
|
|
10
|
-
|
|
11
7
|
var _geometryConverter = require("../i3s-converter/helpers/geometry-converter");
|
|
12
|
-
|
|
13
8
|
(0, _workerUtils.createWorker)(function () {
|
|
14
9
|
var _ref = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(data) {
|
|
15
10
|
var options,
|
|
16
|
-
|
|
11
|
+
_args = arguments;
|
|
17
12
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
18
13
|
while (1) {
|
|
19
14
|
switch (_context.prev = _context.next) {
|
|
@@ -21,10 +16,8 @@ var _geometryConverter = require("../i3s-converter/helpers/geometry-converter");
|
|
|
21
16
|
options = _args.length > 1 && _args[1] !== undefined ? _args[1] : {};
|
|
22
17
|
_context.next = 3;
|
|
23
18
|
return (0, _geometryConverter.convertAttributes)(data, options.useCartesianPositions);
|
|
24
|
-
|
|
25
19
|
case 3:
|
|
26
20
|
return _context.abrupt("return", _context.sent);
|
|
27
|
-
|
|
28
21
|
case 4:
|
|
29
22
|
case "end":
|
|
30
23
|
return _context.stop();
|
|
@@ -32,7 +25,6 @@ var _geometryConverter = require("../i3s-converter/helpers/geometry-converter");
|
|
|
32
25
|
}
|
|
33
26
|
}, _callee);
|
|
34
27
|
}));
|
|
35
|
-
|
|
36
28
|
return function (_x) {
|
|
37
29
|
return _ref.apply(this, arguments);
|
|
38
30
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"i3s-attributes-worker.js","names":["createWorker","data","options","convertAttributes","useCartesianPositions"],"sources":["../../../src/workers/i3s-attributes-worker.ts"],"sourcesContent":["import {createWorker} from '@loaders.gl/worker-utils';\nimport {convertAttributes} from '../i3s-converter/helpers/geometry-converter';\n\ncreateWorker(\n async (data, options = {}) => await convertAttributes(data, options.useCartesianPositions)\n);\n"],"mappings":";;;;;AAAA;AACA;AAEA,IAAAA,yBAAY;EAAA,qEACV,iBAAOC,IAAI;IAAA;MAAA;IAAA;MAAA;QAAA;UAAA;YAAEC,OAAO,2DAAG,CAAC,CAAC;YAAA;YAAA,OAAW,IAAAC,oCAAiB,EAACF,IAAI,EAAEC,OAAO,CAACE,qBAAqB,CAAC;UAAA;YAAA;UAAA;UAAA;YAAA;QAAA;MAAA;IAAA;EAAA;EAAA;IAAA;EAAA;AAAA,IAC3F"}
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import { processOnWorker } from '@loaders.gl/worker-utils';
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
const VERSION = typeof "3.3.0-alpha.6" !== 'undefined' ? "3.3.0-alpha.6" : 'latest';
|
|
3
4
|
export const Tile3dAttributesWorker = {
|
|
4
5
|
id: '3d-tiles-attributes',
|
|
5
6
|
name: '3DTiles Attributes Worker',
|
|
6
7
|
module: 'tile-converter',
|
|
7
8
|
version: VERSION,
|
|
8
9
|
options: {
|
|
9
|
-
|
|
10
|
+
featureAttributes: null
|
|
10
11
|
}
|
|
11
12
|
};
|
|
13
|
+
|
|
12
14
|
export function transform3DTilesAttributesOnWorker(i3sAttributesData, options) {
|
|
13
15
|
return processOnWorker(Tile3dAttributesWorker, i3sAttributesData, options);
|
|
14
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"3d-tiles-attributes-worker.js","names":["processOnWorker","VERSION","Tile3dAttributesWorker","id","name","module","version","options","featureAttributes","transform3DTilesAttributesOnWorker","i3sAttributesData","_typecheckI3SAttributesWorker"],"sources":["../../src/3d-tiles-attributes-worker.ts"],"sourcesContent":["import type {WorkerObject} from '@loaders.gl/worker-utils';\nimport type {FeatureAttribute} from '@loaders.gl/i3s';\n\nimport {processOnWorker} from '@loaders.gl/worker-utils';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport type Tile3DAttributesWorkerOptions = {\n featureAttributes: FeatureAttribute | null;\n source: string;\n};\n\nexport type I3SAttributesData = {\n tileContent: any;\n textureFormat: string;\n};\n\n/**\n * I3S Attributes Worker to handle B3DM object\n */\nexport const Tile3dAttributesWorker = {\n id: '3d-tiles-attributes',\n name: '3DTiles Attributes Worker',\n module: 'tile-converter',\n version: VERSION,\n options: {\n featureAttributes: null\n }\n};\n\n/**\n * Performs I3S attributes transformation\n */\nexport function transform3DTilesAttributesOnWorker(\n i3sAttributesData: I3SAttributesData,\n options: Tile3DAttributesWorkerOptions\n): Promise<ArrayBuffer> {\n return processOnWorker(Tile3dAttributesWorker, i3sAttributesData, options);\n}\n\nexport const _typecheckI3SAttributesWorker: WorkerObject = Tile3dAttributesWorker;\n"],"mappings":"AAGA,SAAQA,eAAe,QAAO,0BAA0B;;AAIxD,MAAMC,OAAO,GAAG,sBAAkB,KAAK,WAAW,qBAAiB,QAAQ;AAe3E,OAAO,MAAMC,sBAAsB,GAAG;EACpCC,EAAE,EAAE,qBAAqB;EACzBC,IAAI,EAAE,2BAA2B;EACjCC,MAAM,EAAE,gBAAgB;EACxBC,OAAO,EAAEL,OAAO;EAChBM,OAAO,EAAE;IACPC,iBAAiB,EAAE;EACrB;AACF,CAAC;;AAKD,OAAO,SAASC,kCAAkC,CAChDC,iBAAoC,EACpCH,OAAsC,EAChB;EACtB,OAAOP,eAAe,CAACE,sBAAsB,EAAEQ,iBAAiB,EAAEH,OAAO,CAAC;AAC5E;AAEA,OAAO,MAAMI,6BAA2C,GAAGT,sBAAsB"}
|
|
@@ -16,24 +16,17 @@ import { Tile3dAttributesWorker, transform3DTilesAttributesOnWorker } from '../3
|
|
|
16
16
|
import { getWorkerURL, WorkerFarm } from '@loaders.gl/worker-utils';
|
|
17
17
|
import { BROWSER_ERROR_MESSAGE } from '../constants';
|
|
18
18
|
const I3S = 'I3S';
|
|
19
|
+
|
|
19
20
|
export default class Tiles3DConverter {
|
|
20
21
|
constructor() {
|
|
21
22
|
_defineProperty(this, "options", void 0);
|
|
22
|
-
|
|
23
23
|
_defineProperty(this, "tilesetPath", void 0);
|
|
24
|
-
|
|
25
24
|
_defineProperty(this, "vertexCounter", void 0);
|
|
26
|
-
|
|
27
25
|
_defineProperty(this, "conversionStartTime", void 0);
|
|
28
|
-
|
|
29
26
|
_defineProperty(this, "geoidHeightModel", void 0);
|
|
30
|
-
|
|
31
27
|
_defineProperty(this, "sourceTileset", void 0);
|
|
32
|
-
|
|
33
28
|
_defineProperty(this, "attributeStorageInfo", void 0);
|
|
34
|
-
|
|
35
29
|
_defineProperty(this, "workerSource", {});
|
|
36
|
-
|
|
37
30
|
this.options = {};
|
|
38
31
|
this.tilesetPath = '';
|
|
39
32
|
this.vertexCounter = 0;
|
|
@@ -49,7 +42,6 @@ export default class Tiles3DConverter {
|
|
|
49
42
|
console.log(BROWSER_ERROR_MESSAGE);
|
|
50
43
|
return BROWSER_ERROR_MESSAGE;
|
|
51
44
|
}
|
|
52
|
-
|
|
53
45
|
const {
|
|
54
46
|
inputUrl,
|
|
55
47
|
outputPath,
|
|
@@ -64,6 +56,7 @@ export default class Tiles3DConverter {
|
|
|
64
56
|
console.log('Loading egm file...');
|
|
65
57
|
this.geoidHeightModel = await load(egmFilePath, PGMLoader);
|
|
66
58
|
console.log('Loading egm file completed!');
|
|
59
|
+
|
|
67
60
|
await this.loadWorkers();
|
|
68
61
|
const sourceTilesetJson = await load(inputUrl, I3SLoader, {});
|
|
69
62
|
this.sourceTileset = new Tileset3D(sourceTilesetJson, {
|
|
@@ -81,18 +74,15 @@ export default class Tiles3DConverter {
|
|
|
81
74
|
});
|
|
82
75
|
await this.sourceTileset.tilesetInitializationPromise;
|
|
83
76
|
const rootNode = this.sourceTileset.root;
|
|
84
|
-
|
|
85
77
|
if (!rootNode.header.obb) {
|
|
86
78
|
rootNode.header.obb = createObbFromMbs(rootNode.header.mbs);
|
|
87
79
|
}
|
|
88
|
-
|
|
89
80
|
this.tilesetPath = join("".concat(outputPath), "".concat(tilesetName));
|
|
90
81
|
this.attributeStorageInfo = sourceTilesetJson.attributeStorageInfo;
|
|
91
|
-
|
|
92
82
|
try {
|
|
93
83
|
await removeDir(this.tilesetPath);
|
|
94
|
-
} catch (e) {
|
|
95
|
-
|
|
84
|
+
} catch (e) {
|
|
85
|
+
}
|
|
96
86
|
const rootTile = {
|
|
97
87
|
boundingVolume: {
|
|
98
88
|
box: i3sObbTo3dTilesObb(rootNode.header.obb, this.geoidHeightModel)
|
|
@@ -105,7 +95,6 @@ export default class Tiles3DConverter {
|
|
|
105
95
|
root: rootTile
|
|
106
96
|
}, tilesetTemplate());
|
|
107
97
|
await writeFile(this.tilesetPath, JSON.stringify(tileset), 'tileset.json');
|
|
108
|
-
|
|
109
98
|
this._finishConversion({
|
|
110
99
|
slpk: false,
|
|
111
100
|
outputPath,
|
|
@@ -119,22 +108,17 @@ export default class Tiles3DConverter {
|
|
|
119
108
|
async convertChildNode(parentSourceNode, parentNode, level, childNodeInfo) {
|
|
120
109
|
const sourceChild = await this._loadChildNode(parentSourceNode, childNodeInfo);
|
|
121
110
|
parentSourceNode.children.push(sourceChild);
|
|
122
|
-
|
|
123
111
|
if (sourceChild.contentUrl) {
|
|
124
112
|
var _sourceChild$header;
|
|
125
|
-
|
|
126
113
|
await this.sourceTileset._loadTile(sourceChild);
|
|
127
114
|
this.vertexCounter += sourceChild.content.vertexCount;
|
|
128
115
|
let featureAttributes = null;
|
|
129
|
-
|
|
130
116
|
if (this.attributeStorageInfo) {
|
|
131
117
|
featureAttributes = await this._loadChildAttributes(sourceChild, this.attributeStorageInfo);
|
|
132
118
|
}
|
|
133
|
-
|
|
134
119
|
if (!sourceChild.header.obb) {
|
|
135
120
|
sourceChild.header.obb = createObbFromMbs(sourceChild.header.mbs);
|
|
136
121
|
}
|
|
137
|
-
|
|
138
122
|
const boundingVolume = {
|
|
139
123
|
box: i3sObbTo3dTilesObb(sourceChild.header.obb, this.geoidHeightModel)
|
|
140
124
|
};
|
|
@@ -168,19 +152,15 @@ export default class Tiles3DConverter {
|
|
|
168
152
|
if (this.options.maxDepth && level > this.options.maxDepth) {
|
|
169
153
|
return;
|
|
170
154
|
}
|
|
171
|
-
|
|
172
155
|
const promises = [];
|
|
173
|
-
|
|
174
156
|
for (const childNodeInfo of parentSourceNode.header.children || []) {
|
|
175
157
|
promises.push(this.convertChildNode(parentSourceNode, parentNode, level, childNodeInfo));
|
|
176
158
|
}
|
|
177
|
-
|
|
178
159
|
await Promise.all(promises);
|
|
179
160
|
}
|
|
180
161
|
|
|
181
162
|
async _loadChildNode(parentNode, childNodeInfo) {
|
|
182
163
|
let header;
|
|
183
|
-
|
|
184
164
|
if (this.sourceTileset.tileset.nodePages) {
|
|
185
165
|
console.log("Node conversion: ".concat(childNodeInfo.id));
|
|
186
166
|
header = await this.sourceTileset.tileset.nodePagesTile.formTileFromNodePages(childNodeInfo.id);
|
|
@@ -188,11 +168,10 @@ export default class Tiles3DConverter {
|
|
|
188
168
|
const {
|
|
189
169
|
loader
|
|
190
170
|
} = this.sourceTileset;
|
|
191
|
-
|
|
192
171
|
const nodeUrl = this._relativeUrlToFullUrl(parentNode.url, childNodeInfo.href);
|
|
193
|
-
|
|
194
172
|
const options = {
|
|
195
|
-
i3s: {
|
|
173
|
+
i3s: {
|
|
174
|
+
...this.sourceTileset.loadOptions,
|
|
196
175
|
isTileHeader: true,
|
|
197
176
|
loadContent: false
|
|
198
177
|
}
|
|
@@ -200,28 +179,23 @@ export default class Tiles3DConverter {
|
|
|
200
179
|
console.log("Node conversion: ".concat(nodeUrl));
|
|
201
180
|
header = await load(nodeUrl, loader, options);
|
|
202
181
|
}
|
|
203
|
-
|
|
204
182
|
return new Tile3D(this.sourceTileset, header, parentNode);
|
|
205
183
|
}
|
|
206
184
|
|
|
207
185
|
_relativeUrlToFullUrl(baseUrl, relativeUrl) {
|
|
208
186
|
let resultArray = baseUrl.split('/');
|
|
209
187
|
const relativeUrlArray = relativeUrl.split('/');
|
|
210
|
-
|
|
211
188
|
for (const folder of relativeUrlArray) {
|
|
212
189
|
switch (folder) {
|
|
213
190
|
case '.':
|
|
214
191
|
continue;
|
|
215
|
-
|
|
216
192
|
case '..':
|
|
217
193
|
resultArray = resultArray.slice(0, -1);
|
|
218
194
|
break;
|
|
219
|
-
|
|
220
195
|
default:
|
|
221
196
|
resultArray.push(folder);
|
|
222
197
|
}
|
|
223
198
|
}
|
|
224
|
-
|
|
225
199
|
return resultArray.join('/');
|
|
226
200
|
}
|
|
227
201
|
|
|
@@ -230,7 +204,6 @@ export default class Tiles3DConverter {
|
|
|
230
204
|
const {
|
|
231
205
|
attributeUrls
|
|
232
206
|
} = sourceChild.header;
|
|
233
|
-
|
|
234
207
|
for (let index = 0; index < attributeUrls.length; index++) {
|
|
235
208
|
const inputUrl = attributeUrls[index];
|
|
236
209
|
const attribute = attributeStorageInfo[index];
|
|
@@ -240,11 +213,8 @@ export default class Tiles3DConverter {
|
|
|
240
213
|
};
|
|
241
214
|
promises.push(load(inputUrl, I3SAttributeLoader, options));
|
|
242
215
|
}
|
|
243
|
-
|
|
244
216
|
const attributesList = await Promise.all(promises);
|
|
245
|
-
|
|
246
217
|
this._replaceNestedArrays(attributesList);
|
|
247
|
-
|
|
248
218
|
return Object.assign({}, ...attributesList);
|
|
249
219
|
}
|
|
250
220
|
|
|
@@ -254,14 +224,12 @@ export default class Tiles3DConverter {
|
|
|
254
224
|
} else if (attribute.objectIds) {
|
|
255
225
|
return 'Oid32';
|
|
256
226
|
}
|
|
257
|
-
|
|
258
227
|
return '';
|
|
259
228
|
}
|
|
260
229
|
|
|
261
230
|
_replaceNestedArrays(attributesList) {
|
|
262
231
|
for (let index = 0; index < attributesList.length; index++) {
|
|
263
232
|
const attributeObject = attributesList[index];
|
|
264
|
-
|
|
265
233
|
for (const key in attributeObject) {
|
|
266
234
|
attributeObject[key] = Array.from(attributeObject[key]);
|
|
267
235
|
}
|
|
@@ -282,13 +250,13 @@ export default class Tiles3DConverter {
|
|
|
282
250
|
|
|
283
251
|
async loadWorkers() {
|
|
284
252
|
console.log("Loading workers source...");
|
|
285
|
-
const tile3dAttributesWorkerUrl = getWorkerURL(Tile3dAttributesWorker, {
|
|
253
|
+
const tile3dAttributesWorkerUrl = getWorkerURL(Tile3dAttributesWorker, {
|
|
254
|
+
...getLoaderOptions()
|
|
286
255
|
});
|
|
287
256
|
const sourceResponse = await fetchFile(tile3dAttributesWorkerUrl);
|
|
288
257
|
const source = await sourceResponse.text();
|
|
289
258
|
this.workerSource.tile3dWorkerSource = source;
|
|
290
259
|
console.log("Loading workers source completed!");
|
|
291
260
|
}
|
|
292
|
-
|
|
293
261
|
}
|
|
294
262
|
//# sourceMappingURL=3d-tiles-converter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/3d-tiles-converter/3d-tiles-converter.ts"],"names":["join","process","transform","fetchFile","getLoaderOptions","load","isBrowser","I3SLoader","I3SAttributeLoader","COORDINATE_SYSTEM","Tileset3D","Tile3D","PGMLoader","i3sObbTo3dTilesObb","convertScreenThresholdToGeometricError","writeFile","removeDir","calculateFilesSize","timeConverter","TILESET","tilesetTemplate","createObbFromMbs","Tile3dAttributesWorker","transform3DTilesAttributesOnWorker","getWorkerURL","WorkerFarm","BROWSER_ERROR_MESSAGE","I3S","Tiles3DConverter","constructor","options","tilesetPath","vertexCounter","conversionStartTime","geoidHeightModel","sourceTileset","attributeStorageInfo","workerSource","convert","console","log","inputUrl","outputPath","tilesetName","maxDepth","egmFilePath","hrtime","loadWorkers","sourceTilesetJson","loadOptions","_nodeWorkers","reuseWorkers","workerUrl","i3s","coordinateSystem","LNGLAT_OFFSETS","decodeTextures","tilesetInitializationPromise","rootNode","root","header","obb","mbs","e","rootTile","boundingVolume","box","geometricError","children","_addChildren","tileset","JSON","stringify","_finishConversion","slpk","workerFarm","getWorkerFarm","destroy","convertChildNode","parentSourceNode","parentNode","level","childNodeInfo","sourceChild","_loadChildNode","push","contentUrl","_loadTile","content","vertexCount","featureAttributes","_loadChildAttributes","child","i3sAttributesData","tileContent","textureFormat","b3dm","source","tile3dWorkerSource","uri","id","Uint8Array","unloadContent","promises","Promise","all","nodePages","nodePagesTile","formTileFromNodePages","loader","nodeUrl","_relativeUrlToFullUrl","url","href","isTileHeader","loadContent","baseUrl","relativeUrl","resultArray","split","relativeUrlArray","folder","slice","attributeUrls","index","length","attribute","attributeName","name","attributeType","_getAttributeType","attributesList","_replaceNestedArrays","Object","assign","attributeValues","valueType","objectIds","attributeObject","key","Array","from","params","filesSize","diff","conversionTime","tile3dAttributesWorkerUrl","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"}
|
|
1
|
+
{"version":3,"file":"3d-tiles-converter.js","names":["join","process","transform","fetchFile","getLoaderOptions","load","isBrowser","I3SLoader","I3SAttributeLoader","COORDINATE_SYSTEM","Tileset3D","Tile3D","PGMLoader","i3sObbTo3dTilesObb","convertScreenThresholdToGeometricError","writeFile","removeDir","calculateFilesSize","timeConverter","TILESET","tilesetTemplate","createObbFromMbs","Tile3dAttributesWorker","transform3DTilesAttributesOnWorker","getWorkerURL","WorkerFarm","BROWSER_ERROR_MESSAGE","I3S","Tiles3DConverter","constructor","options","tilesetPath","vertexCounter","conversionStartTime","geoidHeightModel","sourceTileset","attributeStorageInfo","workerSource","convert","console","log","inputUrl","outputPath","tilesetName","maxDepth","egmFilePath","hrtime","loadWorkers","sourceTilesetJson","loadOptions","_nodeWorkers","reuseWorkers","workerUrl","i3s","coordinateSystem","LNGLAT_OFFSETS","decodeTextures","tilesetInitializationPromise","rootNode","root","header","obb","mbs","e","rootTile","boundingVolume","box","geometricError","children","_addChildren","tileset","JSON","stringify","_finishConversion","slpk","workerFarm","getWorkerFarm","destroy","convertChildNode","parentSourceNode","parentNode","level","childNodeInfo","sourceChild","_loadChildNode","push","contentUrl","_loadTile","content","vertexCount","featureAttributes","_loadChildAttributes","child","i3sAttributesData","tileContent","textureFormat","b3dm","source","tile3dWorkerSource","uri","id","Uint8Array","unloadContent","promises","Promise","all","nodePages","nodePagesTile","formTileFromNodePages","loader","nodeUrl","_relativeUrlToFullUrl","url","href","isTileHeader","loadContent","baseUrl","relativeUrl","resultArray","split","relativeUrlArray","folder","slice","attributeUrls","index","length","attribute","attributeName","name","attributeType","_getAttributeType","attributesList","_replaceNestedArrays","Object","assign","attributeValues","valueType","objectIds","attributeObject","key","Array","from","params","filesSize","diff","conversionTime","tile3dAttributesWorkerUrl","sourceResponse","text"],"sources":["../../../src/3d-tiles-converter/3d-tiles-converter.ts"],"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"],"mappings":"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"}
|
|
@@ -7,15 +7,15 @@ import { Ellipsoid } from '@math.gl/geospatial';
|
|
|
7
7
|
import { convertTextureAtlas } from './texture-atlas';
|
|
8
8
|
const Z_UP_TO_Y_UP_MATRIX = new Matrix4([1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1]);
|
|
9
9
|
const scratchVector = new Vector3();
|
|
10
|
+
|
|
10
11
|
export default class B3dmConverter {
|
|
11
12
|
constructor() {
|
|
12
13
|
_defineProperty(this, "rtcCenter", void 0);
|
|
13
|
-
|
|
14
14
|
_defineProperty(this, "i3sTile", void 0);
|
|
15
15
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const gltf = await this.buildGltf(i3sAttributesData);
|
|
16
|
+
async convert(i3sAttributesData) {
|
|
17
|
+
let featureAttributes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
18
|
+
const gltf = await this.buildGltf(i3sAttributesData, featureAttributes);
|
|
19
19
|
const b3dm = encodeSync({
|
|
20
20
|
gltfEncoded: new Uint8Array(gltf),
|
|
21
21
|
type: 'b3dm',
|
|
@@ -25,7 +25,7 @@ export default class B3dmConverter {
|
|
|
25
25
|
return b3dm;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
async buildGltf(i3sAttributesData) {
|
|
28
|
+
async buildGltf(i3sAttributesData, featureAttributes) {
|
|
29
29
|
const {
|
|
30
30
|
tileContent,
|
|
31
31
|
textureFormat
|
|
@@ -40,34 +40,26 @@ export default class B3dmConverter {
|
|
|
40
40
|
} = tileContent;
|
|
41
41
|
const gltfBuilder = new GLTFScenegraph();
|
|
42
42
|
const textureIndex = await this._addI3sTextureToGltf(tileContent, textureFormat, gltfBuilder);
|
|
43
|
-
|
|
44
43
|
const pbrMaterialInfo = this._convertI3sMaterialToGltfMaterial(material, textureIndex);
|
|
45
|
-
|
|
46
44
|
const materialIndex = gltfBuilder.addMaterial(pbrMaterialInfo);
|
|
47
45
|
const positions = attributes.positions;
|
|
48
46
|
const positionsValue = positions.value;
|
|
49
|
-
|
|
50
47
|
if (attributes.uvRegions && attributes.texCoords) {
|
|
51
48
|
attributes.texCoords.value = convertTextureAtlas(attributes.texCoords.value, attributes.uvRegions.value);
|
|
52
49
|
}
|
|
53
|
-
|
|
54
50
|
attributes.positions.value = this._normalizePositions(positionsValue, cartesianOrigin, cartographicOrigin, modelMatrix);
|
|
55
|
-
|
|
51
|
+
this._createBatchIds(tileContent, featureAttributes);
|
|
56
52
|
if (attributes.normals && !this._checkNormals(attributes.normals.value)) {
|
|
57
53
|
delete attributes.normals;
|
|
58
54
|
}
|
|
59
|
-
|
|
60
55
|
const indices = originalIndices || this._generateSynteticIndices(positionsValue.length / positions.size);
|
|
61
|
-
|
|
62
56
|
const meshIndex = gltfBuilder.addMesh({
|
|
63
57
|
attributes,
|
|
64
58
|
indices,
|
|
65
59
|
material: materialIndex,
|
|
66
60
|
mode: 4
|
|
67
61
|
});
|
|
68
|
-
|
|
69
62
|
const transformMatrix = this._generateTransformMatrix(cartesianOrigin);
|
|
70
|
-
|
|
71
63
|
const nodeIndex = gltfBuilder.addNode({
|
|
72
64
|
meshIndex,
|
|
73
65
|
matrix: transformMatrix
|
|
@@ -89,27 +81,22 @@ export default class B3dmConverter {
|
|
|
89
81
|
} = tileContent;
|
|
90
82
|
let textureIndex = null;
|
|
91
83
|
let selectedTexture = texture;
|
|
92
|
-
|
|
93
84
|
if (!texture && material) {
|
|
94
85
|
selectedTexture = material.pbrMetallicRoughness && material.pbrMetallicRoughness.baseColorTexture && material.pbrMetallicRoughness.baseColorTexture.texture.source.image;
|
|
95
86
|
}
|
|
96
|
-
|
|
97
87
|
if (selectedTexture) {
|
|
98
88
|
const mimeType = this._deduceMimeTypeFromFormat(textureFormat);
|
|
99
|
-
|
|
100
89
|
const imageIndex = gltfBuilder.addImage(selectedTexture, mimeType);
|
|
101
90
|
textureIndex = gltfBuilder.addTexture({
|
|
102
91
|
imageIndex
|
|
103
92
|
});
|
|
104
93
|
delete attributes.colors;
|
|
105
94
|
}
|
|
106
|
-
|
|
107
95
|
return textureIndex;
|
|
108
96
|
}
|
|
109
97
|
|
|
110
98
|
_normalizePositions(positionsValue, cartesianOrigin, cartographicOrigin, modelMatrix) {
|
|
111
99
|
const newPositionsValue = new Float32Array(positionsValue.length);
|
|
112
|
-
|
|
113
100
|
for (let index = 0; index < positionsValue.length; index += 3) {
|
|
114
101
|
const vertex = positionsValue.subarray(index, index + 3);
|
|
115
102
|
const cartesianOriginVector = new Vector3(cartesianOrigin);
|
|
@@ -118,7 +105,6 @@ export default class B3dmConverter {
|
|
|
118
105
|
vertexVector = scratchVector.subtract(cartesianOriginVector);
|
|
119
106
|
newPositionsValue.set(vertexVector, index);
|
|
120
107
|
}
|
|
121
|
-
|
|
122
108
|
return newPositionsValue;
|
|
123
109
|
}
|
|
124
110
|
|
|
@@ -128,30 +114,33 @@ export default class B3dmConverter {
|
|
|
128
114
|
return result;
|
|
129
115
|
}
|
|
130
116
|
|
|
131
|
-
|
|
132
|
-
const
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
batchId.fill(currentBatchId, fromIndex, untilPosition);
|
|
141
|
-
rangeIndex += 2;
|
|
142
|
-
currentBatchId += 1;
|
|
117
|
+
_createBatchIds(i3sContent, featureAttributes) {
|
|
118
|
+
const {
|
|
119
|
+
featureIds
|
|
120
|
+
} = i3sContent;
|
|
121
|
+
const {
|
|
122
|
+
OBJECTID: objectIds
|
|
123
|
+
} = featureAttributes || {};
|
|
124
|
+
if (!featureIds || !objectIds) {
|
|
125
|
+
return;
|
|
143
126
|
}
|
|
144
|
-
|
|
145
|
-
|
|
127
|
+
for (let i = 0; i < featureIds.length; i++) {
|
|
128
|
+
const featureId = featureIds[i];
|
|
129
|
+
const batchId = objectIds.indexOf(featureId);
|
|
130
|
+
featureIds[i] = batchId;
|
|
131
|
+
}
|
|
132
|
+
i3sContent.attributes._BATCHID = {
|
|
133
|
+
size: 1,
|
|
134
|
+
byteOffset: 0,
|
|
135
|
+
value: featureIds
|
|
136
|
+
};
|
|
146
137
|
}
|
|
147
138
|
|
|
148
139
|
_generateSynteticIndices(vertexCount) {
|
|
149
140
|
const result = new Uint32Array(vertexCount);
|
|
150
|
-
|
|
151
141
|
for (let index = 0; index < vertexCount; index++) {
|
|
152
142
|
result.set([index], index);
|
|
153
143
|
}
|
|
154
|
-
|
|
155
144
|
return result;
|
|
156
145
|
}
|
|
157
146
|
|
|
@@ -159,13 +148,10 @@ export default class B3dmConverter {
|
|
|
159
148
|
switch (format) {
|
|
160
149
|
case 'jpg':
|
|
161
150
|
return 'image/jpeg';
|
|
162
|
-
|
|
163
151
|
case 'png':
|
|
164
152
|
return 'image/png';
|
|
165
|
-
|
|
166
153
|
case 'ktx2':
|
|
167
154
|
return 'image/ktx2';
|
|
168
|
-
|
|
169
155
|
default:
|
|
170
156
|
console.warn("Unexpected texture format in I3S: ".concat(format));
|
|
171
157
|
return 'image/jpeg';
|
|
@@ -174,7 +160,6 @@ export default class B3dmConverter {
|
|
|
174
160
|
|
|
175
161
|
_convertI3sMaterialToGltfMaterial(material, textureIndex) {
|
|
176
162
|
const isTextureIndexExists = textureIndex !== null;
|
|
177
|
-
|
|
178
163
|
if (!material) {
|
|
179
164
|
material = {
|
|
180
165
|
alphaMode: 'OPAQUE',
|
|
@@ -184,7 +169,6 @@ export default class B3dmConverter {
|
|
|
184
169
|
roughnessFactor: 1
|
|
185
170
|
}
|
|
186
171
|
};
|
|
187
|
-
|
|
188
172
|
if (isTextureIndexExists) {
|
|
189
173
|
material.pbrMetallicRoughness.baseColorTexture = {
|
|
190
174
|
index: textureIndex,
|
|
@@ -193,23 +177,21 @@ export default class B3dmConverter {
|
|
|
193
177
|
} else {
|
|
194
178
|
material.pbrMetallicRoughness.baseColorFactor = [1, 1, 1, 1];
|
|
195
179
|
}
|
|
196
|
-
|
|
197
180
|
return material;
|
|
198
181
|
}
|
|
199
|
-
|
|
200
182
|
if (textureIndex !== null) {
|
|
201
183
|
material = this._setGltfTexture(material, textureIndex);
|
|
202
184
|
}
|
|
203
|
-
|
|
204
185
|
return material;
|
|
205
186
|
}
|
|
206
187
|
|
|
207
188
|
_setGltfTexture(materialDefinition, textureIndex) {
|
|
208
|
-
const material = {
|
|
209
|
-
|
|
189
|
+
const material = {
|
|
190
|
+
...materialDefinition,
|
|
191
|
+
pbrMetallicRoughness: {
|
|
192
|
+
...materialDefinition.pbrMetallicRoughness
|
|
210
193
|
}
|
|
211
194
|
};
|
|
212
|
-
|
|
213
195
|
if (materialDefinition.pbrMetallicRoughness && materialDefinition.pbrMetallicRoughness.baseColorTexture) {
|
|
214
196
|
material.pbrMetallicRoughness.baseColorTexture = {
|
|
215
197
|
index: textureIndex,
|
|
@@ -236,7 +218,6 @@ export default class B3dmConverter {
|
|
|
236
218
|
texCoord: 0
|
|
237
219
|
};
|
|
238
220
|
}
|
|
239
|
-
|
|
240
221
|
return material;
|
|
241
222
|
}
|
|
242
223
|
|
|
@@ -244,7 +225,6 @@ export default class B3dmConverter {
|
|
|
244
225
|
if (!attributes) {
|
|
245
226
|
return 0;
|
|
246
227
|
}
|
|
247
|
-
|
|
248
228
|
const firstKey = Object.keys(attributes)[0];
|
|
249
229
|
return firstKey ? attributes[firstKey].length : 0;
|
|
250
230
|
}
|
|
@@ -252,6 +232,5 @@ export default class B3dmConverter {
|
|
|
252
232
|
_checkNormals(normals) {
|
|
253
233
|
return normals.find(value => value);
|
|
254
234
|
}
|
|
255
|
-
|
|
256
235
|
}
|
|
257
236
|
//# sourceMappingURL=b3dm-converter.js.map
|