@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 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"node-debug.js","names":["OrientedBoundingBox","BoundingSphere","CubeGeometry","Vector3","Ellipsoid","validateNodeBoundingVolumes","node","parentNode","obb","mbs","tileWarnings","validateObb","validateMbs","parentObb","createBoundingBoxFromTileObb","tileVertices","getTileObbVertices","isTileObbInsideParentObb","isAllVerticesInsideBoundingVolume","title","id","push","tileMbs","createBoundingSphereFromTileMbs","parentMbs","distanceBetweenCenters","center","distanceTo","radius","halfSize","quaternion","fromCenterHalfSizeQuaternion","geometry","attributes","getAttributes","positions","Float32Array","POSITION","value","obbCenterCartesian","WGS84","cartographicToCartesian","vertices","i","length","positionsVector","rotatedPositions","transformByQuaternion","add","concat","boundingVolume","isVerticesInsideObb","index","point","cartographicPoint","cartesianToCartographic","distance"],"sources":["../../../../src/i3s-converter/helpers/node-debug.ts"],"sourcesContent":["import type {Mbs, Node3DIndexDocument, Obb} from '@loaders.gl/i3s';\n\nimport {OrientedBoundingBox, BoundingSphere} from '@math.gl/culling';\nimport {CubeGeometry} from '@luma.gl/engine';\nimport {Vector3} from '@math.gl/core';\nimport {Ellipsoid} from '@math.gl/geospatial';\n\n// TODO Unite Tile validation logic in i3s-17-and-debug with this code.\n\n/**\n * Do validation of bounding volumes for particular node.\n * Generates special warnings if there are some issues.\n * @param node\n */\nexport function validateNodeBoundingVolumes(node: Node3DIndexDocument): string[] {\n if (!node?.parentNode?.obb || !node?.parentNode?.mbs) {\n return [];\n }\n\n const tileWarnings: string[] = [];\n\n validateObb(tileWarnings, node);\n validateMbs(tileWarnings, node);\n\n return tileWarnings;\n}\n\n/**\n * Check if child Obb fit into parent Obb.\n * @param tileWarnings\n * @param node\n */\nfunction validateObb(tileWarnings: string[], node: Node3DIndexDocument): void {\n // @ts-expect-error\n const parentObb = createBoundingBoxFromTileObb(node.parentNode.obb);\n const tileVertices = getTileObbVertices(node);\n const isTileObbInsideParentObb = isAllVerticesInsideBoundingVolume(parentObb, tileVertices);\n\n if (isTileObbInsideParentObb) {\n return;\n }\n\n const title = `OBB of Tile (${node.id}) doesn't fit into Parent (${node.parentNode?.id}) tile OBB`;\n tileWarnings.push(title);\n}\n\n/**\n * Check if child Mbs fit into parent Mbs.\n * @param tileWarnings\n * @param node\n */\nfunction validateMbs(tileWarnings: string[], node: Node3DIndexDocument): void {\n // @ts-expect-error\n const tileMbs = createBoundingSphereFromTileMbs(node.mbs);\n // @ts-expect-error\n const parentMbs = createBoundingSphereFromTileMbs(node.parentNode.mbs);\n const distanceBetweenCenters = tileMbs.center.distanceTo(parentMbs.center);\n\n if (distanceBetweenCenters + tileMbs.radius > parentMbs.radius) {\n const title = `MBS of Tile (${node.id}) doesn't fit into Parent (${node.parentNode?.id}) tile MBS`;\n tileWarnings.push(title);\n }\n}\n\n/**\n * Generates bounding sphere from mbs\n * @param mbs\n */\nfunction createBoundingSphereFromTileMbs(mbs: Mbs): BoundingSphere {\n return new BoundingSphere([mbs[0], mbs[1], mbs[2]], mbs[3]);\n}\n\n/**\n * Generates oriented bounding box from tile obb\n * @param obb\n * @returns\n */\nfunction createBoundingBoxFromTileObb(obb: Obb): OrientedBoundingBox {\n const {center, halfSize, quaternion} = obb;\n return new OrientedBoundingBox().fromCenterHalfSizeQuaternion(center, halfSize, quaternion);\n}\n\n/**\n * Get vertices fromnode obb\n * TODO check if Obb generates properly\n * @param node\n */\nfunction getTileObbVertices(node: Node3DIndexDocument): number[] {\n const geometry = new CubeGeometry();\n // @ts-expect-error\n const halfSize = node.obb.halfSize;\n const attributes = geometry.getAttributes();\n const positions = new Float32Array(attributes.POSITION.value);\n // @ts-expect-error\n const obbCenterCartesian = Ellipsoid.WGS84.cartographicToCartesian(node.obb.center);\n\n let vertices = [];\n\n for (let i = 0; i < positions.length; i += 3) {\n const positionsVector = new Vector3(\n (positions[i] *= halfSize[0]),\n (positions[i + 1] *= halfSize[1]),\n (positions[i + 2] *= halfSize[2])\n );\n const rotatedPositions = positionsVector\n // @ts-expect-error\n .transformByQuaternion(node.obb.quaternion)\n .add(obbCenterCartesian);\n // @ts-expect-error\n vertices = vertices.concat(rotatedPositions);\n }\n\n return vertices;\n}\n\n/**\n * Check if all vertices inside bounding volume\n * @param boundingVolume\n * @param positions\n */\nfunction isAllVerticesInsideBoundingVolume(\n boundingVolume: OrientedBoundingBox,\n positions: number[]\n): boolean {\n let isVerticesInsideObb = true;\n\n for (let index = 0; index < positions.length / 3; index += 3) {\n const point = [positions[index], positions[index + 1], positions[index + 2]];\n const cartographicPoint = Ellipsoid.WGS84.cartesianToCartographic(point);\n\n const distance = boundingVolume.distanceTo(cartographicPoint);\n\n if (distance > 0) {\n isVerticesInsideObb = false;\n break;\n }\n }\n\n return isVerticesInsideObb;\n}\n"],"mappings":"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"}
|
|
@@ -5,13 +5,9 @@ import { METADATA as metadataTemplate } from '../json-templates/metadata';
|
|
|
5
5
|
export default class NodePages {
|
|
6
6
|
constructor(writeFileFunc, nodesPerPage) {
|
|
7
7
|
_defineProperty(this, "nodesPerPage", void 0);
|
|
8
|
-
|
|
9
8
|
_defineProperty(this, "nodesCounter", void 0);
|
|
10
|
-
|
|
11
9
|
_defineProperty(this, "writeFile", void 0);
|
|
12
|
-
|
|
13
10
|
_defineProperty(this, "nodePages", void 0);
|
|
14
|
-
|
|
15
11
|
this.nodesPerPage = nodesPerPage;
|
|
16
12
|
this.nodesCounter = 0;
|
|
17
13
|
this.nodePages = [{}];
|
|
@@ -38,11 +34,9 @@ export default class NodePages {
|
|
|
38
34
|
|
|
39
35
|
updateMaterialByNodeId(id, materialId) {
|
|
40
36
|
const node = this.getNodeById(id);
|
|
41
|
-
|
|
42
37
|
if (!node.mesh) {
|
|
43
38
|
return;
|
|
44
39
|
}
|
|
45
|
-
|
|
46
40
|
node.mesh.material = {
|
|
47
41
|
definition: materialId,
|
|
48
42
|
resource: node.index
|
|
@@ -51,51 +45,41 @@ export default class NodePages {
|
|
|
51
45
|
|
|
52
46
|
updateVertexCountByNodeId(id, vertexCount) {
|
|
53
47
|
const node = this.getNodeById(id);
|
|
54
|
-
|
|
55
48
|
if (!node.mesh) {
|
|
56
49
|
return;
|
|
57
50
|
}
|
|
58
|
-
|
|
59
51
|
node.mesh.geometry.vertexCount = vertexCount;
|
|
60
52
|
}
|
|
61
53
|
|
|
62
54
|
updateNodeAttributeByNodeId(id) {
|
|
63
55
|
const node = this.getNodeById(id);
|
|
64
|
-
|
|
65
56
|
if (!node.mesh || !node.index) {
|
|
66
57
|
return;
|
|
67
58
|
}
|
|
68
|
-
|
|
69
59
|
node.mesh.attribute.resource = node.index;
|
|
70
60
|
}
|
|
71
61
|
|
|
72
62
|
updateFeatureCountByNodeId(id, featureCount) {
|
|
73
63
|
const node = this.getNodeById(id);
|
|
74
|
-
|
|
75
64
|
if (!node.mesh) {
|
|
76
65
|
return;
|
|
77
66
|
}
|
|
78
|
-
|
|
79
67
|
node.mesh.geometry.featureCount = featureCount;
|
|
80
68
|
}
|
|
81
69
|
|
|
82
70
|
updateTexelCountHintByNodeId(id, texelCountHint) {
|
|
83
71
|
const node = this.getNodeById(id);
|
|
84
|
-
|
|
85
72
|
if (!node.mesh || !node.mesh.material) {
|
|
86
73
|
return;
|
|
87
74
|
}
|
|
88
|
-
|
|
89
75
|
node.mesh.material.texelCountHint = texelCountHint;
|
|
90
76
|
}
|
|
91
77
|
|
|
92
78
|
addChildRelation(parentId, childId) {
|
|
93
79
|
var _parentNode$children;
|
|
94
|
-
|
|
95
80
|
if (parentId === null || parentId === undefined) {
|
|
96
81
|
return;
|
|
97
82
|
}
|
|
98
|
-
|
|
99
83
|
const parentNode = this.getNodeById(parentId);
|
|
100
84
|
(_parentNode$children = parentNode.children) === null || _parentNode$children === void 0 ? void 0 : _parentNode$children.push(childId);
|
|
101
85
|
}
|
|
@@ -108,14 +92,12 @@ export default class NodePages {
|
|
|
108
92
|
|
|
109
93
|
push(node, parentId) {
|
|
110
94
|
let currentNodePage = this.nodePages[this.nodePages.length - 1];
|
|
111
|
-
|
|
112
95
|
if (currentNodePage.nodes.length === this.nodesPerPage) {
|
|
113
96
|
currentNodePage = {
|
|
114
97
|
nodes: []
|
|
115
98
|
};
|
|
116
99
|
this.nodePages.push(currentNodePage);
|
|
117
100
|
}
|
|
118
|
-
|
|
119
101
|
node.index = this.nodesCounter++;
|
|
120
102
|
currentNodePage.nodes.push(node);
|
|
121
103
|
this.addChildRelation(parentId, node.index);
|
|
@@ -123,7 +105,8 @@ export default class NodePages {
|
|
|
123
105
|
return node.index;
|
|
124
106
|
}
|
|
125
107
|
|
|
126
|
-
async save(layers0Path, writeQueue
|
|
108
|
+
async save(layers0Path, writeQueue) {
|
|
109
|
+
let slpk = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
127
110
|
if (slpk) {
|
|
128
111
|
for (const [index, nodePage] of this.nodePages.entries()) {
|
|
129
112
|
const nodePageStr = JSON.stringify(nodePage);
|
|
@@ -133,7 +116,6 @@ export default class NodePages {
|
|
|
133
116
|
writePromise: this.writeFile(slpkPath, nodePageStr, "".concat(index.toString(), ".json"))
|
|
134
117
|
});
|
|
135
118
|
}
|
|
136
|
-
|
|
137
119
|
const metadata = transform({
|
|
138
120
|
nodeCount: this.nodesCounter
|
|
139
121
|
}, metadataTemplate());
|
|
@@ -152,6 +134,5 @@ export default class NodePages {
|
|
|
152
134
|
}
|
|
153
135
|
}
|
|
154
136
|
}
|
|
155
|
-
|
|
156
137
|
}
|
|
157
138
|
//# sourceMappingURL=node-pages.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/i3s-converter/helpers/node-pages.ts"],"names":["join","transform","METADATA","metadataTemplate","NodePages","constructor","writeFileFunc","nodesPerPage","nodesCounter","nodePages","nodes","writeFile","useWriteFunction","func","getNodeById","id","pageIndex","Math","floor","nodeIndex","updateAll","data","node","Object","assign","index","updateMaterialByNodeId","materialId","mesh","material","definition","resource","updateVertexCountByNodeId","vertexCount","geometry","updateNodeAttributeByNodeId","attribute","updateFeatureCountByNodeId","featureCount","updateTexelCountHintByNodeId","texelCountHint","addChildRelation","parentId","childId","undefined","parentNode","children","push","updateResourceInMesh","isFinite","currentNodePage","length","save","layers0Path","writeQueue","slpk","nodePage","entries","nodePageStr","JSON","stringify","slpkPath","enqueue","archiveKey","toString","writePromise","metadata","nodeCount","compress","nodePagePath"],"mappings":"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","sourcesContent":["import type {WriteQueueItem} from '../../lib/utils/write-queue';\n\nimport {join} from 'path';\nimport transform from 'json-map-transform';\nimport {METADATA as metadataTemplate} from '../json-templates/metadata';\nimport {NodeInPage} from '@loaders.gl/i3s';\nimport WriteQueue from '../../lib/utils/write-queue';\n\n// @ts-nocheck\n/**\n * class NodePages - wrapper of nodePages array\n *\n * @example\n * import {writeFile} from './helpers/write-file';\n *\n * // create an instance of the class\n * const nodePages = new NodePages(writeFile, HARDCODED_NODES_PER_PAGE);\n * ...\n * // push root node\n * const parentId = nodePages.push({\n lodThreshold: HARDCODED_MAX_SCREEN_THRESHOLD_SQ,\n obb: coordinates.obb,\n children: []\n });\n * ...\n * // push node with parent relation\n * const nodeInPage = {\n lodThreshold: HARDCODED_MAX_SCREEN_THRESHOLD_SQ,\n obb: coordinates.obb,\n children: [],\n mesh: {\n geometry: {\n definition: 0\n }\n }\n };\n * const nodeId = this.nodePages.push(nodeInPage, parentId);\n * ...\n * // save all the nodePages in the end of pushing all the nodes\n * await this.nodePages.save(layers0path);\n */\nexport default class NodePages {\n readonly nodesPerPage: number;\n nodesCounter: number;\n writeFile: Function;\n readonly nodePages: {nodes: NodeInPage[]}[];\n\n /**\n * @constructs\n * Create a nodePages instance.\n * @param writeFileFunc - function to save one nodePage into a file\n * @param nodesPerPage - length limit for one nodePage. An additional nodePage is created when this limit is met\n */\n constructor(writeFileFunc, nodesPerPage) {\n this.nodesPerPage = nodesPerPage;\n this.nodesCounter = 0;\n // @ts-expect-error\n this.nodePages = [{}];\n this.nodePages[0].nodes = [];\n this.writeFile = writeFileFunc;\n }\n\n /**\n * Setup function to save node pages\n * @param func - function which should be used to save node pages\n */\n useWriteFunction(func: Function): void {\n this.writeFile = func;\n }\n\n /**\n * Get the node by its end-to-end index\n * @param id - end-to-end index of the node\n * @return the node object\n */\n getNodeById(id: number): NodeInPage {\n const pageIndex = Math.floor(id / this.nodesPerPage);\n const nodeIndex = id % this.nodesPerPage;\n return this.nodePages[pageIndex].nodes[nodeIndex];\n }\n\n /**\n * Update all fields in the node excluding id\n */\n updateAll(id: number, data: NodeInPage): void {\n const node = this.getNodeById(id);\n Object.assign(node, data, {index: node.index});\n }\n\n /**\n * Update material in node.mesh object by node id\n * @param id - end-to-end index of the node\n * @param materialId - id from scene layer materialDefinitions\n */\n updateMaterialByNodeId(id: number, materialId: number): void {\n const node = this.getNodeById(id);\n if (!node.mesh) {\n return;\n }\n node.mesh.material = {\n definition: materialId,\n resource: node.index\n };\n }\n\n /**\n * Update vertexCount in node.mesh.geometry object by node id\n * @param id - end-to-end index of the node\n * @param vertexCount - vertex count for particular node\n */\n updateVertexCountByNodeId(id: number, vertexCount: number): void {\n const node = this.getNodeById(id);\n if (!node.mesh) {\n return;\n }\n node.mesh.geometry.vertexCount = vertexCount;\n }\n\n /**\n * Update resource in node.mesh.attribute object by node id\n * @param id - end-to-end index of the node\n */\n updateNodeAttributeByNodeId(id: number): void {\n const node = this.getNodeById(id);\n if (!node.mesh || !node.index) {\n return;\n }\n node.mesh.attribute.resource = node.index;\n }\n\n /**\n * Update featureCount in node.mesh.geometry object by node id\n * @param id - end-to-end index of the node\n * @param featureCount - features count of the node\n */\n updateFeatureCountByNodeId(id: number, featureCount: number): void {\n const node = this.getNodeById(id);\n if (!node.mesh) {\n return;\n }\n node.mesh.geometry.featureCount = featureCount;\n }\n\n /**\n * Update texelCountHint in node.mesh.material object by node id\n * @param id - end-to-end index of the node\n * @param texelCountHint - texelCountHint of particular node\n */\n updateTexelCountHintByNodeId(id: number, texelCountHint: number): void {\n const node = this.getNodeById(id);\n if (!node.mesh || !node.mesh.material) {\n return;\n }\n node.mesh.material.texelCountHint = texelCountHint;\n }\n\n /**\n * Add a child id into the parent node.children array\n * @param parentId - end-to-end parent node index\n * @param childId - end-to-end child node index\n */\n addChildRelation(parentId: number | undefined, childId: number): void {\n if (parentId === null || parentId === undefined) {\n return;\n }\n const parentNode = this.getNodeById(parentId);\n parentNode.children?.push(childId);\n }\n\n /**\n * Update resource index in node.mesh object\n * @param node - node object\n */\n updateResourceInMesh(node: NodeInPage): void {\n if (node.mesh && isFinite(node.index)) {\n node.mesh.geometry.resource = node.index;\n }\n }\n\n /**\n * Put new node in nodePages array\n * @param node - node object\n * @param parentId - index of parent node\n * @return\n */\n push(node: NodeInPage, parentId?: number): number {\n let currentNodePage = this.nodePages[this.nodePages.length - 1];\n if (currentNodePage.nodes.length === this.nodesPerPage) {\n currentNodePage = {nodes: []};\n this.nodePages.push(currentNodePage);\n }\n node.index = this.nodesCounter++;\n currentNodePage.nodes.push(node);\n this.addChildRelation(parentId, node.index);\n this.updateResourceInMesh(node);\n return node.index;\n }\n\n /**\n * Save all the node pages\n * Run this method when all nodes is pushed in nodePages\n * @param layers0Path - path of layer\n * @param writeQueue - write queue that controlls files write concurrency\n * @param slpk\n */\n async save(\n layers0Path: string,\n writeQueue: WriteQueue<WriteQueueItem>,\n slpk: boolean = false\n ): Promise<void> {\n if (slpk) {\n for (const [index, nodePage] of this.nodePages.entries()) {\n const nodePageStr = JSON.stringify(nodePage);\n const slpkPath = join(layers0Path, 'nodepages');\n await writeQueue.enqueue({\n archiveKey: `nodePages/${index.toString()}.json.gz`,\n writePromise: this.writeFile(slpkPath, nodePageStr, `${index.toString()}.json`)\n });\n }\n const metadata = transform({nodeCount: this.nodesCounter}, metadataTemplate());\n const compress = false;\n await writeQueue.enqueue({\n archiveKey: 'metadata.json',\n writePromise: this.writeFile(\n layers0Path,\n JSON.stringify(metadata),\n 'metadata.json',\n compress\n )\n });\n } else {\n for (const [index, nodePage] of this.nodePages.entries()) {\n const nodePageStr = JSON.stringify(nodePage);\n const nodePagePath = join(layers0Path, 'nodepages', index.toString());\n await writeQueue.enqueue({writePromise: this.writeFile(nodePagePath, nodePageStr)});\n }\n }\n }\n}\n"],"file":"node-pages.js"}
|
|
1
|
+
{"version":3,"file":"node-pages.js","names":["join","transform","METADATA","metadataTemplate","NodePages","constructor","writeFileFunc","nodesPerPage","nodesCounter","nodePages","nodes","writeFile","useWriteFunction","func","getNodeById","id","pageIndex","Math","floor","nodeIndex","updateAll","data","node","Object","assign","index","updateMaterialByNodeId","materialId","mesh","material","definition","resource","updateVertexCountByNodeId","vertexCount","geometry","updateNodeAttributeByNodeId","attribute","updateFeatureCountByNodeId","featureCount","updateTexelCountHintByNodeId","texelCountHint","addChildRelation","parentId","childId","undefined","parentNode","children","push","updateResourceInMesh","isFinite","currentNodePage","length","save","layers0Path","writeQueue","slpk","nodePage","entries","nodePageStr","JSON","stringify","slpkPath","enqueue","archiveKey","toString","writePromise","metadata","nodeCount","compress","nodePagePath"],"sources":["../../../../src/i3s-converter/helpers/node-pages.ts"],"sourcesContent":["import type {WriteQueueItem} from '../../lib/utils/write-queue';\n\nimport {join} from 'path';\nimport transform from 'json-map-transform';\nimport {METADATA as metadataTemplate} from '../json-templates/metadata';\nimport {NodeInPage} from '@loaders.gl/i3s';\nimport WriteQueue from '../../lib/utils/write-queue';\n\n// @ts-nocheck\n/**\n * class NodePages - wrapper of nodePages array\n *\n * @example\n * import {writeFile} from './helpers/write-file';\n *\n * // create an instance of the class\n * const nodePages = new NodePages(writeFile, HARDCODED_NODES_PER_PAGE);\n * ...\n * // push root node\n * const parentId = nodePages.push({\n lodThreshold: HARDCODED_MAX_SCREEN_THRESHOLD_SQ,\n obb: coordinates.obb,\n children: []\n });\n * ...\n * // push node with parent relation\n * const nodeInPage = {\n lodThreshold: HARDCODED_MAX_SCREEN_THRESHOLD_SQ,\n obb: coordinates.obb,\n children: [],\n mesh: {\n geometry: {\n definition: 0\n }\n }\n };\n * const nodeId = this.nodePages.push(nodeInPage, parentId);\n * ...\n * // save all the nodePages in the end of pushing all the nodes\n * await this.nodePages.save(layers0path);\n */\nexport default class NodePages {\n readonly nodesPerPage: number;\n nodesCounter: number;\n writeFile: Function;\n readonly nodePages: {nodes: NodeInPage[]}[];\n\n /**\n * @constructs\n * Create a nodePages instance.\n * @param writeFileFunc - function to save one nodePage into a file\n * @param nodesPerPage - length limit for one nodePage. An additional nodePage is created when this limit is met\n */\n constructor(writeFileFunc, nodesPerPage) {\n this.nodesPerPage = nodesPerPage;\n this.nodesCounter = 0;\n // @ts-expect-error\n this.nodePages = [{}];\n this.nodePages[0].nodes = [];\n this.writeFile = writeFileFunc;\n }\n\n /**\n * Setup function to save node pages\n * @param func - function which should be used to save node pages\n */\n useWriteFunction(func: Function): void {\n this.writeFile = func;\n }\n\n /**\n * Get the node by its end-to-end index\n * @param id - end-to-end index of the node\n * @return the node object\n */\n getNodeById(id: number): NodeInPage {\n const pageIndex = Math.floor(id / this.nodesPerPage);\n const nodeIndex = id % this.nodesPerPage;\n return this.nodePages[pageIndex].nodes[nodeIndex];\n }\n\n /**\n * Update all fields in the node excluding id\n */\n updateAll(id: number, data: NodeInPage): void {\n const node = this.getNodeById(id);\n Object.assign(node, data, {index: node.index});\n }\n\n /**\n * Update material in node.mesh object by node id\n * @param id - end-to-end index of the node\n * @param materialId - id from scene layer materialDefinitions\n */\n updateMaterialByNodeId(id: number, materialId: number): void {\n const node = this.getNodeById(id);\n if (!node.mesh) {\n return;\n }\n node.mesh.material = {\n definition: materialId,\n resource: node.index\n };\n }\n\n /**\n * Update vertexCount in node.mesh.geometry object by node id\n * @param id - end-to-end index of the node\n * @param vertexCount - vertex count for particular node\n */\n updateVertexCountByNodeId(id: number, vertexCount: number): void {\n const node = this.getNodeById(id);\n if (!node.mesh) {\n return;\n }\n node.mesh.geometry.vertexCount = vertexCount;\n }\n\n /**\n * Update resource in node.mesh.attribute object by node id\n * @param id - end-to-end index of the node\n */\n updateNodeAttributeByNodeId(id: number): void {\n const node = this.getNodeById(id);\n if (!node.mesh || !node.index) {\n return;\n }\n node.mesh.attribute.resource = node.index;\n }\n\n /**\n * Update featureCount in node.mesh.geometry object by node id\n * @param id - end-to-end index of the node\n * @param featureCount - features count of the node\n */\n updateFeatureCountByNodeId(id: number, featureCount: number): void {\n const node = this.getNodeById(id);\n if (!node.mesh) {\n return;\n }\n node.mesh.geometry.featureCount = featureCount;\n }\n\n /**\n * Update texelCountHint in node.mesh.material object by node id\n * @param id - end-to-end index of the node\n * @param texelCountHint - texelCountHint of particular node\n */\n updateTexelCountHintByNodeId(id: number, texelCountHint: number): void {\n const node = this.getNodeById(id);\n if (!node.mesh || !node.mesh.material) {\n return;\n }\n node.mesh.material.texelCountHint = texelCountHint;\n }\n\n /**\n * Add a child id into the parent node.children array\n * @param parentId - end-to-end parent node index\n * @param childId - end-to-end child node index\n */\n addChildRelation(parentId: number | undefined, childId: number): void {\n if (parentId === null || parentId === undefined) {\n return;\n }\n const parentNode = this.getNodeById(parentId);\n parentNode.children?.push(childId);\n }\n\n /**\n * Update resource index in node.mesh object\n * @param node - node object\n */\n updateResourceInMesh(node: NodeInPage): void {\n if (node.mesh && isFinite(node.index)) {\n node.mesh.geometry.resource = node.index;\n }\n }\n\n /**\n * Put new node in nodePages array\n * @param node - node object\n * @param parentId - index of parent node\n * @return\n */\n push(node: NodeInPage, parentId?: number): number {\n let currentNodePage = this.nodePages[this.nodePages.length - 1];\n if (currentNodePage.nodes.length === this.nodesPerPage) {\n currentNodePage = {nodes: []};\n this.nodePages.push(currentNodePage);\n }\n node.index = this.nodesCounter++;\n currentNodePage.nodes.push(node);\n this.addChildRelation(parentId, node.index);\n this.updateResourceInMesh(node);\n return node.index;\n }\n\n /**\n * Save all the node pages\n * Run this method when all nodes is pushed in nodePages\n * @param layers0Path - path of layer\n * @param writeQueue - write queue that controlls files write concurrency\n * @param slpk\n */\n async save(\n layers0Path: string,\n writeQueue: WriteQueue<WriteQueueItem>,\n slpk: boolean = false\n ): Promise<void> {\n if (slpk) {\n for (const [index, nodePage] of this.nodePages.entries()) {\n const nodePageStr = JSON.stringify(nodePage);\n const slpkPath = join(layers0Path, 'nodepages');\n await writeQueue.enqueue({\n archiveKey: `nodePages/${index.toString()}.json.gz`,\n writePromise: this.writeFile(slpkPath, nodePageStr, `${index.toString()}.json`)\n });\n }\n const metadata = transform({nodeCount: this.nodesCounter}, metadataTemplate());\n const compress = false;\n await writeQueue.enqueue({\n archiveKey: 'metadata.json',\n writePromise: this.writeFile(\n layers0Path,\n JSON.stringify(metadata),\n 'metadata.json',\n compress\n )\n });\n } else {\n for (const [index, nodePage] of this.nodePages.entries()) {\n const nodePageStr = JSON.stringify(nodePage);\n const nodePagePath = join(layers0Path, 'nodepages', index.toString());\n await writeQueue.enqueue({writePromise: this.writeFile(nodePagePath, nodePageStr)});\n }\n }\n }\n}\n"],"mappings":"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"}
|