@loaders.gl/tile-converter 3.2.12 → 3.3.0-alpha.10
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 +3 -3
- package/dist/3d-tiles-attributes-worker.d.ts.map +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/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/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-cli.js +43 -8
- package/dist/converter.min.js +24 -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 +29 -1
- package/dist/dist.min.js +58405 -61237
- 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 +125 -210
- 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 +50 -60
- package/dist/es5/converter-cli.js.map +1 -1
- package/dist/es5/deps-installer/deps-installer.js +73 -28
- 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 +124 -0
- package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js.map +1 -0
- package/dist/es5/i3s-converter/helpers/coordinate-converter.js +2 -19
- 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 +184 -0
- package/dist/es5/i3s-converter/helpers/feature-attributes.js.map +1 -0
- package/dist/es5/i3s-converter/helpers/geometry-attributes.js +60 -51
- package/dist/es5/i3s-converter/helpers/geometry-attributes.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/geometry-converter.js +516 -356
- package/dist/es5/i3s-converter/helpers/geometry-converter.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/gltf-attributes.js +57 -43
- 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-index-document.js +507 -0
- package/dist/es5/i3s-converter/helpers/node-index-document.js.map +1 -0
- package/dist/es5/i3s-converter/helpers/node-pages.js +462 -208
- package/dist/es5/i3s-converter/helpers/node-pages.js.map +1 -1
- package/dist/es5/i3s-converter/i3s-converter.js +722 -1153
- package/dist/es5/i3s-converter/i3s-converter.js.map +1 -1
- package/dist/es5/i3s-converter/json-templates/geometry-definitions.js +107 -0
- package/dist/es5/i3s-converter/json-templates/geometry-definitions.js.map +1 -0
- package/dist/es5/i3s-converter/json-templates/layers.js +2 -107
- 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 +9 -32
- 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 +103 -47
- 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 +41 -82
- 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 +2 -10
- 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 +60 -77
- 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 +46 -40
- package/dist/esm/converter-cli.js.map +1 -1
- package/dist/esm/deps-installer/deps-installer.js +30 -4
- 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 +113 -0
- package/dist/esm/i3s-converter/helpers/batch-ids-extensions.js.map +1 -0
- package/dist/esm/i3s-converter/helpers/coordinate-converter.js +5 -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 +158 -0
- package/dist/esm/i3s-converter/helpers/feature-attributes.js.map +1 -0
- package/dist/esm/i3s-converter/helpers/geometry-attributes.js +39 -33
- package/dist/esm/i3s-converter/helpers/geometry-attributes.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/geometry-converter.js +295 -196
- package/dist/esm/i3s-converter/helpers/geometry-converter.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/gltf-attributes.js +59 -34
- 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-index-document.js +197 -0
- package/dist/esm/i3s-converter/helpers/node-index-document.js.map +1 -0
- package/dist/esm/i3s-converter/helpers/node-pages.js +161 -87
- package/dist/esm/i3s-converter/helpers/node-pages.js.map +1 -1
- package/dist/esm/i3s-converter/i3s-converter.js +216 -491
- package/dist/esm/i3s-converter/i3s-converter.js.map +1 -1
- package/dist/esm/i3s-converter/json-templates/geometry-definitions.js +89 -0
- package/dist/esm/i3s-converter/json-templates/geometry-definitions.js.map +1 -0
- package/dist/esm/i3s-converter/json-templates/layers.js +2 -95
- 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 +3 -15
- 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 +54 -11
- 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 +27 -38
- 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.d.ts +7 -3
- package/dist/i3s-attributes-worker.d.ts.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/batch-ids-extensions.d.ts +11 -0
- package/dist/i3s-converter/helpers/batch-ids-extensions.d.ts.map +1 -0
- package/dist/i3s-converter/helpers/batch-ids-extensions.js +141 -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 +56 -0
- package/dist/i3s-converter/helpers/feature-attributes.d.ts.map +1 -0
- package/dist/i3s-converter/helpers/feature-attributes.js +216 -0
- package/dist/i3s-converter/helpers/geometry-attributes.d.ts.map +1 -1
- package/dist/i3s-converter/helpers/geometry-attributes.js +42 -17
- package/dist/i3s-converter/helpers/geometry-converter.d.ts +18 -6
- package/dist/i3s-converter/helpers/geometry-converter.d.ts.map +1 -1
- package/dist/i3s-converter/helpers/geometry-converter.js +349 -99
- package/dist/i3s-converter/helpers/gltf-attributes.d.ts.map +1 -1
- package/dist/i3s-converter/helpers/gltf-attributes.js +53 -21
- package/dist/i3s-converter/helpers/node-index-document.d.ts +91 -0
- package/dist/i3s-converter/helpers/node-index-document.d.ts.map +1 -0
- package/dist/i3s-converter/helpers/node-index-document.js +242 -0
- package/dist/i3s-converter/helpers/node-pages.d.ts +81 -42
- package/dist/i3s-converter/helpers/node-pages.d.ts.map +1 -1
- package/dist/i3s-converter/helpers/node-pages.js +200 -92
- package/dist/i3s-converter/i3s-converter.d.ts +52 -108
- package/dist/i3s-converter/i3s-converter.d.ts.map +1 -1
- package/dist/i3s-converter/i3s-converter.js +218 -403
- package/dist/i3s-converter/json-templates/geometry-definitions.d.ts +7 -0
- package/dist/i3s-converter/json-templates/geometry-definitions.d.ts.map +1 -0
- package/dist/i3s-converter/json-templates/geometry-definitions.js +87 -0
- package/dist/i3s-converter/json-templates/layers.d.ts +1 -30
- package/dist/i3s-converter/json-templates/layers.d.ts.map +1 -1
- package/dist/i3s-converter/json-templates/layers.js +2 -86
- package/dist/i3s-converter/json-templates/shared-resources.js +3 -3
- package/dist/i3s-converter/types.d.ts +38 -8
- package/dist/i3s-converter/types.d.ts.map +1 -1
- package/dist/lib/utils/file-utils.d.ts +17 -1
- package/dist/lib/utils/file-utils.d.ts.map +1 -1
- package/dist/lib/utils/file-utils.js +64 -7
- package/dist/lib/utils/write-queue.d.ts +19 -3
- package/dist/lib/utils/write-queue.d.ts.map +1 -1
- package/dist/lib/utils/write-queue.js +21 -16
- 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/dist/workers/i3s-attributes-worker.js +1 -1
- package/package.json +18 -16
- package/src/3d-tiles-attributes-worker.ts +1 -1
- package/src/3d-tiles-converter/3d-tiles-converter.ts +71 -55
- package/src/3d-tiles-converter/helpers/b3dm-converter.ts +25 -18
- package/src/converter-cli.ts +54 -8
- package/src/deps-installer/deps-installer.ts +38 -2
- package/src/i3s-attributes-worker.ts +5 -1
- package/src/i3s-converter/helpers/batch-ids-extensions.ts +206 -0
- package/src/i3s-converter/helpers/coordinate-converter.ts +2 -2
- package/src/i3s-converter/helpers/feature-attributes.ts +247 -0
- package/src/i3s-converter/helpers/geometry-attributes.ts +46 -18
- package/src/i3s-converter/helpers/geometry-converter.ts +423 -111
- package/src/i3s-converter/helpers/gltf-attributes.ts +59 -24
- package/src/i3s-converter/helpers/node-index-document.ts +306 -0
- package/src/i3s-converter/helpers/node-pages.ts +222 -109
- package/src/i3s-converter/i3s-converter.ts +264 -487
- package/src/i3s-converter/json-templates/geometry-definitions.ts +83 -0
- package/src/i3s-converter/json-templates/layers.ts +2 -91
- package/src/i3s-converter/json-templates/shared-resources.ts +3 -3
- package/src/i3s-converter/types.ts +33 -2
- package/src/lib/utils/file-utils.ts +62 -7
- package/src/lib/utils/write-queue.ts +42 -19
- package/src/pgm-loader.ts +2 -2
- package/src/workers/3d-tiles-attributes-worker.ts +1 -1
- package/src/workers/i3s-attributes-worker.ts +2 -1
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
import type {WriteQueueItem} from '../../lib/utils/write-queue';
|
|
2
|
-
|
|
3
1
|
import {join} from 'path';
|
|
4
2
|
import transform from 'json-map-transform';
|
|
5
3
|
import {METADATA as metadataTemplate} from '../json-templates/metadata';
|
|
6
4
|
import {NodeInPage} from '@loaders.gl/i3s';
|
|
7
|
-
import
|
|
5
|
+
import {isFileExists, openJson} from '../../lib/utils/file-utils';
|
|
6
|
+
import I3SConverter from '../i3s-converter';
|
|
8
7
|
|
|
9
|
-
// @ts-nocheck
|
|
10
8
|
/**
|
|
11
9
|
* class NodePages - wrapper of nodePages array
|
|
12
10
|
*
|
|
@@ -17,7 +15,7 @@ import WriteQueue from '../../lib/utils/write-queue';
|
|
|
17
15
|
* const nodePages = new NodePages(writeFile, HARDCODED_NODES_PER_PAGE);
|
|
18
16
|
* ...
|
|
19
17
|
* // push root node
|
|
20
|
-
* const
|
|
18
|
+
* const parent = await nodePages.push({
|
|
21
19
|
lodThreshold: HARDCODED_MAX_SCREEN_THRESHOLD_SQ,
|
|
22
20
|
obb: coordinates.obb,
|
|
23
21
|
children: []
|
|
@@ -34,7 +32,7 @@ import WriteQueue from '../../lib/utils/write-queue';
|
|
|
34
32
|
}
|
|
35
33
|
}
|
|
36
34
|
};
|
|
37
|
-
* const
|
|
35
|
+
* const node = await this.nodePages.push(nodeInPage, parent.index);
|
|
38
36
|
* ...
|
|
39
37
|
* // save all the nodePages in the end of pushing all the nodes
|
|
40
38
|
* await this.nodePages.save(layers0path);
|
|
@@ -42,8 +40,10 @@ import WriteQueue from '../../lib/utils/write-queue';
|
|
|
42
40
|
export default class NodePages {
|
|
43
41
|
readonly nodesPerPage: number;
|
|
44
42
|
nodesCounter: number;
|
|
45
|
-
writeFile:
|
|
43
|
+
writeFile: (...args) => Promise<null | string>;
|
|
44
|
+
converter: I3SConverter;
|
|
46
45
|
readonly nodePages: {nodes: NodeInPage[]}[];
|
|
46
|
+
readonly length: number = 0;
|
|
47
47
|
|
|
48
48
|
/**
|
|
49
49
|
* @constructs
|
|
@@ -51,99 +51,90 @@ export default class NodePages {
|
|
|
51
51
|
* @param writeFileFunc - function to save one nodePage into a file
|
|
52
52
|
* @param nodesPerPage - length limit for one nodePage. An additional nodePage is created when this limit is met
|
|
53
53
|
*/
|
|
54
|
-
constructor(writeFileFunc, nodesPerPage) {
|
|
54
|
+
constructor(writeFileFunc, nodesPerPage, converter: I3SConverter) {
|
|
55
55
|
this.nodesPerPage = nodesPerPage;
|
|
56
56
|
this.nodesCounter = 0;
|
|
57
57
|
// @ts-expect-error
|
|
58
58
|
this.nodePages = [{}];
|
|
59
59
|
this.nodePages[0].nodes = [];
|
|
60
60
|
this.writeFile = writeFileFunc;
|
|
61
|
+
this.converter = converter;
|
|
62
|
+
this.length = 0;
|
|
61
63
|
}
|
|
62
64
|
|
|
63
65
|
/**
|
|
64
66
|
* Setup function to save node pages
|
|
65
67
|
* @param func - function which should be used to save node pages
|
|
66
68
|
*/
|
|
67
|
-
useWriteFunction(func:
|
|
69
|
+
useWriteFunction(func: (...args) => Promise<null | string>): void {
|
|
68
70
|
this.writeFile = func;
|
|
69
71
|
}
|
|
70
72
|
|
|
71
73
|
/**
|
|
72
|
-
* Get the node
|
|
73
|
-
* @param
|
|
74
|
-
* @
|
|
74
|
+
* Get file path and file name of the node page with the particular id
|
|
75
|
+
* @param nodePageId - node page id
|
|
76
|
+
* @returns file path and file name
|
|
75
77
|
*/
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
* @param materialId - id from scene layer materialDefinitions
|
|
86
|
-
*/
|
|
87
|
-
updateMaterialByNodeId(id: number, materialId: number): void {
|
|
88
|
-
const node = this.getNodeById(id);
|
|
89
|
-
if (!node.mesh) {
|
|
90
|
-
return;
|
|
78
|
+
private getNodePageFileName(nodePageId): {filePath: string; fileName: string} {
|
|
79
|
+
let filePath;
|
|
80
|
+
let fileName;
|
|
81
|
+
if (this.converter.options.slpk) {
|
|
82
|
+
filePath = join(this.converter.layers0Path, 'nodepages');
|
|
83
|
+
fileName = `${nodePageId.toString()}.json`;
|
|
84
|
+
} else {
|
|
85
|
+
filePath = join(this.converter.layers0Path, 'nodepages', nodePageId.toString());
|
|
86
|
+
fileName = 'index.json';
|
|
91
87
|
}
|
|
92
|
-
|
|
93
|
-
definition: materialId,
|
|
94
|
-
resource: node.index
|
|
95
|
-
};
|
|
88
|
+
return {filePath, fileName};
|
|
96
89
|
}
|
|
97
90
|
|
|
98
91
|
/**
|
|
99
|
-
*
|
|
100
|
-
* @param
|
|
101
|
-
* @
|
|
92
|
+
* Load node page from a file on the disk
|
|
93
|
+
* @param nodePageId - node page id
|
|
94
|
+
* @returns - node page data
|
|
102
95
|
*/
|
|
103
|
-
|
|
104
|
-
const
|
|
105
|
-
|
|
106
|
-
|
|
96
|
+
private async loadNodePage(nodePageId: number): Promise<{nodes: NodeInPage[]}> {
|
|
97
|
+
const {filePath, fileName} = this.getNodePageFileName(nodePageId);
|
|
98
|
+
const fullName = join(filePath, fileName);
|
|
99
|
+
if (await isFileExists(fullName)) {
|
|
100
|
+
console.log(`load ${fullName}.`); // eslint-disable-line
|
|
101
|
+
return (await openJson(filePath, fileName)) as {nodes: NodeInPage[]};
|
|
102
|
+
} else {
|
|
103
|
+
return {nodes: []};
|
|
107
104
|
}
|
|
108
|
-
node.mesh.geometry.vertexCount = vertexCount;
|
|
109
105
|
}
|
|
110
106
|
|
|
111
107
|
/**
|
|
112
|
-
*
|
|
113
|
-
* @param id
|
|
108
|
+
* Get nodepage id by node id
|
|
109
|
+
* @param id node id
|
|
110
|
+
* @returns node page id
|
|
114
111
|
*/
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
if (!node.mesh) {
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
node.mesh.attribute.resource = node.index;
|
|
112
|
+
private getPageIndexByNodeId(id: number): number {
|
|
113
|
+
return Math.floor(id / this.nodesPerPage);
|
|
121
114
|
}
|
|
122
115
|
|
|
123
116
|
/**
|
|
124
|
-
*
|
|
125
|
-
* @param id
|
|
126
|
-
* @
|
|
117
|
+
* Get node page data by node id
|
|
118
|
+
* @param id node id
|
|
119
|
+
* @returns node page data
|
|
127
120
|
*/
|
|
128
|
-
|
|
129
|
-
const
|
|
130
|
-
if (
|
|
131
|
-
return;
|
|
121
|
+
private async getPageByNodeId(id: number): Promise<{nodes: NodeInPage[]}> {
|
|
122
|
+
const pageIndex = this.getPageIndexByNodeId(id);
|
|
123
|
+
if (this.converter.options.instantNodeWriting) {
|
|
124
|
+
return await this.loadNodePage(pageIndex);
|
|
132
125
|
}
|
|
133
|
-
|
|
126
|
+
return this.nodePages[pageIndex];
|
|
134
127
|
}
|
|
135
128
|
|
|
136
129
|
/**
|
|
137
|
-
*
|
|
130
|
+
* Get the node by its end-to-end index
|
|
138
131
|
* @param id - end-to-end index of the node
|
|
139
|
-
* @
|
|
132
|
+
* @return the node object
|
|
140
133
|
*/
|
|
141
|
-
|
|
142
|
-
const
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
}
|
|
146
|
-
node.mesh.material.texelCountHint = texelCountHint;
|
|
134
|
+
async getNodeById(id: number, nodePage?: {nodes: NodeInPage[]}): Promise<NodeInPage> {
|
|
135
|
+
const nodeIndex = id % this.nodesPerPage;
|
|
136
|
+
nodePage = nodePage || (await this.getPageByNodeId(id));
|
|
137
|
+
return nodePage.nodes[nodeIndex];
|
|
147
138
|
}
|
|
148
139
|
|
|
149
140
|
/**
|
|
@@ -151,81 +142,203 @@ export default class NodePages {
|
|
|
151
142
|
* @param parentId - end-to-end parent node index
|
|
152
143
|
* @param childId - end-to-end child node index
|
|
153
144
|
*/
|
|
154
|
-
addChildRelation(parentId: number | undefined, childId: number): void {
|
|
145
|
+
private async addChildRelation(parentId: number | undefined, childId: number): Promise<void> {
|
|
155
146
|
if (parentId === null || parentId === undefined) {
|
|
156
147
|
return;
|
|
157
148
|
}
|
|
158
|
-
const parentNode = this.getNodeById(parentId);
|
|
149
|
+
const parentNode = await this.getNodeById(parentId);
|
|
159
150
|
parentNode.children?.push(childId);
|
|
151
|
+
await this.saveNode(parentNode);
|
|
160
152
|
}
|
|
161
153
|
|
|
162
154
|
/**
|
|
163
|
-
*
|
|
155
|
+
* Put new node in nodePages array
|
|
164
156
|
* @param node - node object
|
|
157
|
+
* @param parentId - index of parent node
|
|
158
|
+
* @return
|
|
165
159
|
*/
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
160
|
+
async push(node: NodeInPage, parentId?: number): Promise<NodeInPage> {
|
|
161
|
+
node.index = this.nodesCounter++;
|
|
162
|
+
if (!this.converter.options.instantNodeWriting) {
|
|
163
|
+
let currentNodePage = this.nodePages[this.nodePages.length - 1];
|
|
164
|
+
if (currentNodePage.nodes.length === this.nodesPerPage) {
|
|
165
|
+
currentNodePage = {nodes: []};
|
|
166
|
+
this.nodePages.push(currentNodePage);
|
|
167
|
+
}
|
|
168
|
+
currentNodePage.nodes.push(node);
|
|
169
169
|
}
|
|
170
|
+
await this.addChildRelation(parentId, node.index);
|
|
171
|
+
NodePages.updateResourceInMesh(node);
|
|
172
|
+
await this.saveNode(node);
|
|
173
|
+
return node;
|
|
170
174
|
}
|
|
171
175
|
|
|
172
176
|
/**
|
|
173
|
-
*
|
|
174
|
-
* @param node - node
|
|
175
|
-
* @param parentId - index of parent node
|
|
176
|
-
* @return
|
|
177
|
+
* Save node to the file on the disk
|
|
178
|
+
* @param node - node data
|
|
177
179
|
*/
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
this.
|
|
180
|
+
async saveNode(node: NodeInPage): Promise<void> {
|
|
181
|
+
if (!this.converter.options.instantNodeWriting) {
|
|
182
|
+
return;
|
|
183
|
+
} else {
|
|
184
|
+
const nodePageIndex = this.getPageIndexByNodeId(node.index);
|
|
185
|
+
const nodePage = await this.getPageByNodeId(node.index);
|
|
186
|
+
const {filePath, fileName} = this.getNodePageFileName(nodePageIndex);
|
|
187
|
+
const nodeToUpdate = await this.getNodeById(node.index, nodePage);
|
|
188
|
+
if (nodeToUpdate) {
|
|
189
|
+
NodePages.updateAll(nodeToUpdate, node);
|
|
190
|
+
} else {
|
|
191
|
+
nodePage.nodes.push(node);
|
|
192
|
+
}
|
|
193
|
+
const nodePageStr = JSON.stringify(nodePage);
|
|
194
|
+
if (this.converter.options.slpk) {
|
|
195
|
+
await this.converter.writeQueue.enqueue(
|
|
196
|
+
{
|
|
197
|
+
archiveKey: `nodePages/${nodePageIndex.toString()}.json.gz`,
|
|
198
|
+
writePromise: () =>
|
|
199
|
+
this.writeFile(filePath, nodePageStr, fileName, true, this.converter.compressList)
|
|
200
|
+
},
|
|
201
|
+
true
|
|
202
|
+
);
|
|
203
|
+
} else {
|
|
204
|
+
await this.converter.writeQueue.enqueue(
|
|
205
|
+
{
|
|
206
|
+
writePromise: () => this.writeFile(filePath, nodePageStr)
|
|
207
|
+
},
|
|
208
|
+
true
|
|
209
|
+
);
|
|
210
|
+
}
|
|
183
211
|
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* Save metadata file (for slpk only)
|
|
216
|
+
*/
|
|
217
|
+
async saveMetadata(): Promise<void> {
|
|
218
|
+
const metadata = transform({nodeCount: this.nodesCounter}, metadataTemplate());
|
|
219
|
+
const compress = false;
|
|
220
|
+
await this.converter.writeQueue.enqueue({
|
|
221
|
+
archiveKey: 'metadata.json',
|
|
222
|
+
writePromise: () =>
|
|
223
|
+
this.writeFile(
|
|
224
|
+
this.converter.layers0Path,
|
|
225
|
+
JSON.stringify(metadata),
|
|
226
|
+
'metadata.json',
|
|
227
|
+
compress
|
|
228
|
+
)
|
|
229
|
+
});
|
|
189
230
|
}
|
|
190
231
|
|
|
191
232
|
/**
|
|
192
233
|
* Save all the node pages
|
|
193
234
|
* Run this method when all nodes is pushed in nodePages
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
slpk: boolean = false
|
|
202
|
-
): Promise<void> {
|
|
203
|
-
if (slpk) {
|
|
235
|
+
*/
|
|
236
|
+
async save(): Promise<void> {
|
|
237
|
+
if (this.converter.options.instantNodeWriting) {
|
|
238
|
+
await this.saveMetadata();
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
if (this.converter.options.slpk) {
|
|
204
242
|
for (const [index, nodePage] of this.nodePages.entries()) {
|
|
205
243
|
const nodePageStr = JSON.stringify(nodePage);
|
|
206
|
-
const slpkPath = join(layers0Path, 'nodepages');
|
|
207
|
-
await writeQueue.enqueue({
|
|
244
|
+
const slpkPath = join(this.converter.layers0Path, 'nodepages');
|
|
245
|
+
await this.converter.writeQueue.enqueue({
|
|
208
246
|
archiveKey: `nodePages/${index.toString()}.json.gz`,
|
|
209
|
-
writePromise: this.writeFile(slpkPath, nodePageStr, `${index.toString()}.json`)
|
|
247
|
+
writePromise: () => this.writeFile(slpkPath, nodePageStr, `${index.toString()}.json`)
|
|
210
248
|
});
|
|
211
249
|
}
|
|
212
|
-
|
|
213
|
-
const compress = false;
|
|
214
|
-
await writeQueue.enqueue({
|
|
215
|
-
archiveKey: 'metadata.json',
|
|
216
|
-
writePromise: this.writeFile(
|
|
217
|
-
layers0Path,
|
|
218
|
-
JSON.stringify(metadata),
|
|
219
|
-
'metadata.json',
|
|
220
|
-
compress
|
|
221
|
-
)
|
|
222
|
-
});
|
|
250
|
+
await this.saveMetadata();
|
|
223
251
|
} else {
|
|
224
252
|
for (const [index, nodePage] of this.nodePages.entries()) {
|
|
225
253
|
const nodePageStr = JSON.stringify(nodePage);
|
|
226
|
-
const nodePagePath = join(layers0Path, 'nodepages', index.toString());
|
|
227
|
-
await writeQueue.enqueue({
|
|
254
|
+
const nodePagePath = join(this.converter.layers0Path, 'nodepages', index.toString());
|
|
255
|
+
await this.converter.writeQueue.enqueue({
|
|
256
|
+
writePromise: () => this.writeFile(nodePagePath, nodePageStr)
|
|
257
|
+
});
|
|
228
258
|
}
|
|
229
259
|
}
|
|
230
260
|
}
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* Update resource index in node.mesh object
|
|
264
|
+
* @param node - node object
|
|
265
|
+
*/
|
|
266
|
+
static updateResourceInMesh(node: NodeInPage): void {
|
|
267
|
+
if (node.mesh && isFinite(node.index)) {
|
|
268
|
+
node.mesh.geometry.resource = node.index;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* Update all fields in the node excluding id
|
|
274
|
+
* @param node - node object
|
|
275
|
+
* @param data - NodeInPage data to replace original data
|
|
276
|
+
*/
|
|
277
|
+
static updateAll(node: NodeInPage, data: NodeInPage): NodeInPage {
|
|
278
|
+
Object.assign(node, data, {index: node.index});
|
|
279
|
+
NodePages.updateResourceInMesh(node);
|
|
280
|
+
return node;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* Update material in node.mesh object by node id
|
|
285
|
+
* @param id - end-to-end index of the node
|
|
286
|
+
* @param materialId - id from scene layer materialDefinitions
|
|
287
|
+
*/
|
|
288
|
+
static updateMaterialByNodeId(node: NodeInPage, materialId: number): void {
|
|
289
|
+
if (!node.mesh) {
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
node.mesh.material = {
|
|
293
|
+
definition: materialId,
|
|
294
|
+
resource: node.index
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
/**
|
|
299
|
+
* Update vertexCount in node.mesh.geometry object by node id
|
|
300
|
+
* @param id - end-to-end index of the node
|
|
301
|
+
* @param vertexCount - vertex count for particular node
|
|
302
|
+
*/
|
|
303
|
+
static updateVertexCountByNodeId(node: NodeInPage, vertexCount: number): void {
|
|
304
|
+
if (!node.mesh) {
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
node.mesh.geometry.vertexCount = vertexCount;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
/**
|
|
311
|
+
* Update resource in node.mesh.attribute object by node id
|
|
312
|
+
* @param node - node object
|
|
313
|
+
*/
|
|
314
|
+
static updateNodeAttributeByNodeId(node: NodeInPage): void {
|
|
315
|
+
if (!node.mesh || !node.index) {
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
318
|
+
node.mesh.attribute.resource = node.index;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* Update featureCount in node.mesh.geometry object by node id
|
|
323
|
+
* @param node - node object
|
|
324
|
+
* @param featureCount - features count of the node
|
|
325
|
+
*/
|
|
326
|
+
static updateFeatureCountByNodeId(node: NodeInPage, featureCount: number): void {
|
|
327
|
+
if (!node.mesh) {
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
node.mesh.geometry.featureCount = featureCount;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* Update texelCountHint in node.mesh.material object by node id
|
|
335
|
+
* @param node - node object
|
|
336
|
+
* @param texelCountHint - texelCountHint of particular node
|
|
337
|
+
*/
|
|
338
|
+
static updateTexelCountHintByNodeId(node: NodeInPage, texelCountHint: number): void {
|
|
339
|
+
if (!node.mesh || !node.mesh.material) {
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
node.mesh.material.texelCountHint = texelCountHint;
|
|
343
|
+
}
|
|
231
344
|
}
|