@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.
Files changed (177) hide show
  1. package/dist/3d-tiles-attributes-worker.d.ts +1 -1
  2. package/dist/3d-tiles-attributes-worker.js +2 -3
  3. package/dist/3d-tiles-attributes-worker.js.map +3 -3
  4. package/dist/3d-tiles-converter/helpers/b3dm-converter.d.ts +5 -5
  5. package/dist/3d-tiles-converter/helpers/b3dm-converter.d.ts.map +1 -1
  6. package/dist/3d-tiles-converter/helpers/b3dm-converter.js +21 -17
  7. package/dist/converter.min.js +23 -20
  8. package/dist/dist.min.js +38223 -46900
  9. package/dist/es5/3d-tiles-attributes-worker.js +4 -7
  10. package/dist/es5/3d-tiles-attributes-worker.js.map +1 -1
  11. package/dist/es5/3d-tiles-converter/3d-tiles-converter.js +12 -111
  12. package/dist/es5/3d-tiles-converter/3d-tiles-converter.js.map +1 -1
  13. package/dist/es5/3d-tiles-converter/helpers/b3dm-converter.js +53 -85
  14. package/dist/es5/3d-tiles-converter/helpers/b3dm-converter.js.map +1 -1
  15. package/dist/es5/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js +0 -8
  16. package/dist/es5/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js.map +1 -1
  17. package/dist/es5/3d-tiles-converter/helpers/texture-atlas.js +0 -5
  18. package/dist/es5/3d-tiles-converter/helpers/texture-atlas.js.map +1 -1
  19. package/dist/es5/3d-tiles-converter/json-templates/tileset.js +0 -6
  20. package/dist/es5/3d-tiles-converter/json-templates/tileset.js.map +1 -1
  21. package/dist/es5/bundle.js +0 -1
  22. package/dist/es5/bundle.js.map +1 -1
  23. package/dist/es5/constants.js.map +1 -1
  24. package/dist/es5/converter-cli.js +2 -53
  25. package/dist/es5/converter-cli.js.map +1 -1
  26. package/dist/es5/deps-installer/deps-installer.js +5 -35
  27. package/dist/es5/deps-installer/deps-installer.js.map +1 -1
  28. package/dist/es5/i3s-attributes-worker.js +3 -6
  29. package/dist/es5/i3s-attributes-worker.js.map +1 -1
  30. package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js +2 -28
  31. package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js.map +1 -1
  32. package/dist/es5/i3s-converter/helpers/coordinate-converter.js +2 -20
  33. package/dist/es5/i3s-converter/helpers/coordinate-converter.js.map +1 -1
  34. package/dist/es5/i3s-converter/helpers/create-scene-server-path.js +0 -11
  35. package/dist/es5/i3s-converter/helpers/create-scene-server-path.js.map +1 -1
  36. package/dist/es5/i3s-converter/helpers/feature-attributes.js +5 -34
  37. package/dist/es5/i3s-converter/helpers/feature-attributes.js.map +1 -1
  38. package/dist/es5/i3s-converter/helpers/geometry-attributes.js +13 -45
  39. package/dist/es5/i3s-converter/helpers/geometry-attributes.js.map +1 -1
  40. package/dist/es5/i3s-converter/helpers/geometry-converter.js +26 -221
  41. package/dist/es5/i3s-converter/helpers/geometry-converter.js.map +1 -1
  42. package/dist/es5/i3s-converter/helpers/gltf-attributes.js +2 -16
  43. package/dist/es5/i3s-converter/helpers/gltf-attributes.js.map +1 -1
  44. package/dist/es5/i3s-converter/helpers/node-debug.js +4 -23
  45. package/dist/es5/i3s-converter/helpers/node-debug.js.map +1 -1
  46. package/dist/es5/i3s-converter/helpers/node-pages.js +50 -86
  47. package/dist/es5/i3s-converter/helpers/node-pages.js.map +1 -1
  48. package/dist/es5/i3s-converter/i3s-converter.js +43 -360
  49. package/dist/es5/i3s-converter/i3s-converter.js.map +1 -1
  50. package/dist/es5/i3s-converter/json-templates/layers.js +1 -15
  51. package/dist/es5/i3s-converter/json-templates/layers.js.map +1 -1
  52. package/dist/es5/i3s-converter/json-templates/metadata.js +0 -2
  53. package/dist/es5/i3s-converter/json-templates/metadata.js.map +1 -1
  54. package/dist/es5/i3s-converter/json-templates/node.js +2 -12
  55. package/dist/es5/i3s-converter/json-templates/node.js.map +1 -1
  56. package/dist/es5/i3s-converter/json-templates/scene-server.js +0 -2
  57. package/dist/es5/i3s-converter/json-templates/scene-server.js.map +1 -1
  58. package/dist/es5/i3s-converter/json-templates/shared-resources.js +6 -29
  59. package/dist/es5/i3s-converter/json-templates/shared-resources.js.map +1 -1
  60. package/dist/es5/i3s-converter/json-templates/store.js.map +1 -1
  61. package/dist/es5/i3s-converter/types.js.map +1 -1
  62. package/dist/es5/i3s-server/app.js +0 -5
  63. package/dist/es5/i3s-server/app.js.map +1 -1
  64. package/dist/es5/i3s-server/controllers/index-controller.js +0 -16
  65. package/dist/es5/i3s-server/controllers/index-controller.js.map +1 -1
  66. package/dist/es5/i3s-server/routes/index.js +1 -10
  67. package/dist/es5/i3s-server/routes/index.js.map +1 -1
  68. package/dist/es5/index.js +0 -3
  69. package/dist/es5/index.js.map +1 -1
  70. package/dist/es5/lib/utils/compress-util.js +19 -74
  71. package/dist/es5/lib/utils/compress-util.js.map +1 -1
  72. package/dist/es5/lib/utils/file-utils.js +10 -38
  73. package/dist/es5/lib/utils/file-utils.js.map +1 -1
  74. package/dist/es5/lib/utils/lod-conversion-utils.js +0 -7
  75. package/dist/es5/lib/utils/lod-conversion-utils.js.map +1 -1
  76. package/dist/es5/lib/utils/queue.js +0 -14
  77. package/dist/es5/lib/utils/queue.js.map +1 -1
  78. package/dist/es5/lib/utils/statistic-utills.js +1 -46
  79. package/dist/es5/lib/utils/statistic-utills.js.map +1 -1
  80. package/dist/es5/lib/utils/write-queue.js +0 -52
  81. package/dist/es5/lib/utils/write-queue.js.map +1 -1
  82. package/dist/es5/pgm-loader.js +1 -8
  83. package/dist/es5/pgm-loader.js.map +1 -1
  84. package/dist/es5/workers/3d-tiles-attributes-worker.js +2 -9
  85. package/dist/es5/workers/3d-tiles-attributes-worker.js.map +1 -1
  86. package/dist/es5/workers/i3s-attributes-worker.js +1 -9
  87. package/dist/es5/workers/i3s-attributes-worker.js.map +1 -1
  88. package/dist/esm/3d-tiles-attributes-worker.js +4 -2
  89. package/dist/esm/3d-tiles-attributes-worker.js.map +1 -1
  90. package/dist/esm/3d-tiles-converter/3d-tiles-converter.js +8 -40
  91. package/dist/esm/3d-tiles-converter/3d-tiles-converter.js.map +1 -1
  92. package/dist/esm/3d-tiles-converter/helpers/b3dm-converter.js +29 -50
  93. package/dist/esm/3d-tiles-converter/helpers/b3dm-converter.js.map +1 -1
  94. package/dist/esm/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js +1 -0
  95. package/dist/esm/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js.map +1 -1
  96. package/dist/esm/3d-tiles-converter/helpers/texture-atlas.js +1 -4
  97. package/dist/esm/3d-tiles-converter/helpers/texture-atlas.js.map +1 -1
  98. package/dist/esm/3d-tiles-converter/json-templates/tileset.js +0 -3
  99. package/dist/esm/3d-tiles-converter/json-templates/tileset.js.map +1 -1
  100. package/dist/esm/bundle.js +1 -1
  101. package/dist/esm/bundle.js.map +1 -1
  102. package/dist/esm/constants.js.map +1 -1
  103. package/dist/esm/converter-cli.js +3 -38
  104. package/dist/esm/converter-cli.js.map +1 -1
  105. package/dist/esm/deps-installer/deps-installer.js +6 -7
  106. package/dist/esm/deps-installer/deps-installer.js.map +1 -1
  107. package/dist/esm/i3s-attributes-worker.js +3 -1
  108. package/dist/esm/i3s-attributes-worker.js.map +1 -1
  109. package/dist/esm/i3s-converter/helpers/batch-ids-extensions.js +4 -23
  110. package/dist/esm/i3s-converter/helpers/batch-ids-extensions.js.map +1 -1
  111. package/dist/esm/i3s-converter/helpers/coordinate-converter.js +4 -6
  112. package/dist/esm/i3s-converter/helpers/coordinate-converter.js.map +1 -1
  113. package/dist/esm/i3s-converter/helpers/create-scene-server-path.js +1 -0
  114. package/dist/esm/i3s-converter/helpers/create-scene-server-path.js.map +1 -1
  115. package/dist/esm/i3s-converter/helpers/feature-attributes.js +6 -20
  116. package/dist/esm/i3s-converter/helpers/feature-attributes.js.map +1 -1
  117. package/dist/esm/i3s-converter/helpers/geometry-attributes.js +3 -22
  118. package/dist/esm/i3s-converter/helpers/geometry-attributes.js.map +1 -1
  119. package/dist/esm/i3s-converter/helpers/geometry-converter.js +28 -139
  120. package/dist/esm/i3s-converter/helpers/geometry-converter.js.map +1 -1
  121. package/dist/esm/i3s-converter/helpers/gltf-attributes.js +7 -12
  122. package/dist/esm/i3s-converter/helpers/gltf-attributes.js.map +1 -1
  123. package/dist/esm/i3s-converter/helpers/node-debug.js +3 -13
  124. package/dist/esm/i3s-converter/helpers/node-debug.js.map +1 -1
  125. package/dist/esm/i3s-converter/helpers/node-pages.js +2 -21
  126. package/dist/esm/i3s-converter/helpers/node-pages.js.map +1 -1
  127. package/dist/esm/i3s-converter/i3s-converter.js +49 -137
  128. package/dist/esm/i3s-converter/i3s-converter.js.map +1 -1
  129. package/dist/esm/i3s-converter/json-templates/layers.js +1 -11
  130. package/dist/esm/i3s-converter/json-templates/layers.js.map +1 -1
  131. package/dist/esm/i3s-converter/json-templates/metadata.js.map +1 -1
  132. package/dist/esm/i3s-converter/json-templates/node.js +0 -4
  133. package/dist/esm/i3s-converter/json-templates/node.js.map +1 -1
  134. package/dist/esm/i3s-converter/json-templates/scene-server.js.map +1 -1
  135. package/dist/esm/i3s-converter/json-templates/shared-resources.js +0 -12
  136. package/dist/esm/i3s-converter/json-templates/shared-resources.js.map +1 -1
  137. package/dist/esm/i3s-converter/json-templates/store.js.map +1 -1
  138. package/dist/esm/i3s-converter/types.js.map +1 -1
  139. package/dist/esm/i3s-server/app.js +0 -5
  140. package/dist/esm/i3s-server/app.js.map +1 -1
  141. package/dist/esm/i3s-server/controllers/index-controller.js +0 -5
  142. package/dist/esm/i3s-server/controllers/index-controller.js.map +1 -1
  143. package/dist/esm/i3s-server/routes/index.js +0 -3
  144. package/dist/esm/i3s-server/routes/index.js.map +1 -1
  145. package/dist/esm/index.js.map +1 -1
  146. package/dist/esm/lib/utils/compress-util.js +19 -12
  147. package/dist/esm/lib/utils/compress-util.js.map +1 -1
  148. package/dist/esm/lib/utils/file-utils.js +10 -8
  149. package/dist/esm/lib/utils/file-utils.js.map +1 -1
  150. package/dist/esm/lib/utils/lod-conversion-utils.js +2 -6
  151. package/dist/esm/lib/utils/lod-conversion-utils.js.map +1 -1
  152. package/dist/esm/lib/utils/queue.js +0 -4
  153. package/dist/esm/lib/utils/queue.js.map +1 -1
  154. package/dist/esm/lib/utils/statistic-utills.js +0 -11
  155. package/dist/esm/lib/utils/statistic-utills.js.map +1 -1
  156. package/dist/esm/lib/utils/write-queue.js +5 -23
  157. package/dist/esm/lib/utils/write-queue.js.map +1 -1
  158. package/dist/esm/pgm-loader.js +3 -1
  159. package/dist/esm/pgm-loader.js.map +1 -1
  160. package/dist/esm/workers/3d-tiles-attributes-worker.js +4 -1
  161. package/dist/esm/workers/3d-tiles-attributes-worker.js.map +1 -1
  162. package/dist/esm/workers/i3s-attributes-worker.js +4 -1
  163. package/dist/esm/workers/i3s-attributes-worker.js.map +1 -1
  164. package/dist/i3s-attributes-worker.js +2 -3
  165. package/dist/i3s-attributes-worker.js.map +3 -3
  166. package/dist/i3s-converter/helpers/geometry-converter.d.ts.map +1 -1
  167. package/dist/i3s-converter/helpers/geometry-converter.js +2 -0
  168. package/dist/i3s-converter/i3s-converter.js +5 -1
  169. package/dist/pgm-loader.d.ts.map +1 -1
  170. package/dist/pgm-loader.js +2 -1
  171. package/dist/workers/3d-tiles-attributes-worker.js +1 -1
  172. package/package.json +15 -15
  173. package/src/3d-tiles-attributes-worker.ts +1 -1
  174. package/src/3d-tiles-converter/helpers/b3dm-converter.ts +25 -18
  175. package/src/i3s-converter/helpers/geometry-converter.ts +2 -0
  176. package/src/pgm-loader.ts +2 -2
  177. package/src/workers/3d-tiles-attributes-worker.ts +1 -1
@@ -4,22 +4,16 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.validateNodeBoundingVolumes = validateNodeBoundingVolumes;
7
-
8
7
  var _culling = require("@math.gl/culling");
9
-
10
8
  var _engine = require("@luma.gl/engine");
11
-
12
9
  var _core = require("@math.gl/core");
13
-
14
10
  var _geospatial = require("@math.gl/geospatial");
15
11
 
16
12
  function validateNodeBoundingVolumes(node) {
17
13
  var _node$parentNode, _node$parentNode2;
18
-
19
14
  if (!(node !== null && node !== void 0 && (_node$parentNode = node.parentNode) !== null && _node$parentNode !== void 0 && _node$parentNode.obb) || !(node !== null && node !== void 0 && (_node$parentNode2 = node.parentNode) !== null && _node$parentNode2 !== void 0 && _node$parentNode2.mbs)) {
20
15
  return [];
21
16
  }
22
-
23
17
  var tileWarnings = [];
24
18
  validateObb(tileWarnings, node);
25
19
  validateMbs(tileWarnings, node);
@@ -28,15 +22,12 @@ function validateNodeBoundingVolumes(node) {
28
22
 
29
23
  function validateObb(tileWarnings, node) {
30
24
  var _node$parentNode3;
31
-
32
25
  var parentObb = createBoundingBoxFromTileObb(node.parentNode.obb);
33
26
  var tileVertices = getTileObbVertices(node);
34
27
  var isTileObbInsideParentObb = isAllVerticesInsideBoundingVolume(parentObb, tileVertices);
35
-
36
28
  if (isTileObbInsideParentObb) {
37
29
  return;
38
30
  }
39
-
40
31
  var title = "OBB of Tile (".concat(node.id, ") doesn't fit into Parent (").concat((_node$parentNode3 = node.parentNode) === null || _node$parentNode3 === void 0 ? void 0 : _node$parentNode3.id, ") tile OBB");
41
32
  tileWarnings.push(title);
42
33
  }
@@ -45,10 +36,8 @@ function validateMbs(tileWarnings, node) {
45
36
  var tileMbs = createBoundingSphereFromTileMbs(node.mbs);
46
37
  var parentMbs = createBoundingSphereFromTileMbs(node.parentNode.mbs);
47
38
  var distanceBetweenCenters = tileMbs.center.distanceTo(parentMbs.center);
48
-
49
39
  if (distanceBetweenCenters + tileMbs.radius > parentMbs.radius) {
50
40
  var _node$parentNode4;
51
-
52
41
  var title = "MBS of Tile (".concat(node.id, ") doesn't fit into Parent (").concat((_node$parentNode4 = node.parentNode) === null || _node$parentNode4 === void 0 ? void 0 : _node$parentNode4.id, ") tile MBS");
53
42
  tileWarnings.push(title);
54
43
  }
@@ -60,8 +49,8 @@ function createBoundingSphereFromTileMbs(mbs) {
60
49
 
61
50
  function createBoundingBoxFromTileObb(obb) {
62
51
  var center = obb.center,
63
- halfSize = obb.halfSize,
64
- quaternion = obb.quaternion;
52
+ halfSize = obb.halfSize,
53
+ quaternion = obb.quaternion;
65
54
  return new _culling.OrientedBoundingBox().fromCenterHalfSizeQuaternion(center, halfSize, quaternion);
66
55
  }
67
56
 
@@ -70,36 +59,28 @@ function getTileObbVertices(node) {
70
59
  var halfSize = node.obb.halfSize;
71
60
  var attributes = geometry.getAttributes();
72
61
  var positions = new Float32Array(attributes.POSITION.value);
73
-
74
62
  var obbCenterCartesian = _geospatial.Ellipsoid.WGS84.cartographicToCartesian(node.obb.center);
75
-
76
63
  var vertices = [];
77
-
78
64
  for (var i = 0; i < positions.length; i += 3) {
79
65
  var positionsVector = new _core.Vector3(positions[i] *= halfSize[0], positions[i + 1] *= halfSize[1], positions[i + 2] *= halfSize[2]);
80
- var rotatedPositions = positionsVector.transformByQuaternion(node.obb.quaternion).add(obbCenterCartesian);
66
+ var rotatedPositions = positionsVector
67
+ .transformByQuaternion(node.obb.quaternion).add(obbCenterCartesian);
81
68
  vertices = vertices.concat(rotatedPositions);
82
69
  }
83
-
84
70
  return vertices;
85
71
  }
86
72
 
87
73
  function isAllVerticesInsideBoundingVolume(boundingVolume, positions) {
88
74
  var isVerticesInsideObb = true;
89
-
90
75
  for (var index = 0; index < positions.length / 3; index += 3) {
91
76
  var point = [positions[index], positions[index + 1], positions[index + 2]];
92
-
93
77
  var cartographicPoint = _geospatial.Ellipsoid.WGS84.cartesianToCartographic(point);
94
-
95
78
  var distance = boundingVolume.distanceTo(cartographicPoint);
96
-
97
79
  if (distance > 0) {
98
80
  isVerticesInsideObb = false;
99
81
  break;
100
82
  }
101
83
  }
102
-
103
84
  return isVerticesInsideObb;
104
85
  }
105
86
  //# sourceMappingURL=node-debug.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/i3s-converter/helpers/node-debug.ts"],"names":["validateNodeBoundingVolumes","node","parentNode","obb","mbs","tileWarnings","validateObb","validateMbs","parentObb","createBoundingBoxFromTileObb","tileVertices","getTileObbVertices","isTileObbInsideParentObb","isAllVerticesInsideBoundingVolume","title","id","push","tileMbs","createBoundingSphereFromTileMbs","parentMbs","distanceBetweenCenters","center","distanceTo","radius","BoundingSphere","halfSize","quaternion","OrientedBoundingBox","fromCenterHalfSizeQuaternion","geometry","CubeGeometry","attributes","getAttributes","positions","Float32Array","POSITION","value","obbCenterCartesian","Ellipsoid","WGS84","cartographicToCartesian","vertices","i","length","positionsVector","Vector3","rotatedPositions","transformByQuaternion","add","concat","boundingVolume","isVerticesInsideObb","index","point","cartographicPoint","cartesianToCartographic","distance"],"mappings":"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","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"],"file":"node-debug.js"}
1
+ {"version":3,"file":"node-debug.js","names":["validateNodeBoundingVolumes","node","parentNode","obb","mbs","tileWarnings","validateObb","validateMbs","parentObb","createBoundingBoxFromTileObb","tileVertices","getTileObbVertices","isTileObbInsideParentObb","isAllVerticesInsideBoundingVolume","title","id","push","tileMbs","createBoundingSphereFromTileMbs","parentMbs","distanceBetweenCenters","center","distanceTo","radius","BoundingSphere","halfSize","quaternion","OrientedBoundingBox","fromCenterHalfSizeQuaternion","geometry","CubeGeometry","attributes","getAttributes","positions","Float32Array","POSITION","value","obbCenterCartesian","Ellipsoid","WGS84","cartographicToCartesian","vertices","i","length","positionsVector","Vector3","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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"}
@@ -1,36 +1,22 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
-
10
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
-
12
9
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
-
14
10
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
15
-
16
11
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
17
-
18
12
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
19
-
20
13
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
21
-
22
14
  var _path = require("path");
23
-
24
15
  var _jsonMapTransform = _interopRequireDefault(require("json-map-transform"));
25
-
26
16
  var _metadata = require("../json-templates/metadata");
27
-
28
17
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
29
-
30
18
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
31
-
32
19
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
33
-
34
20
  var NodePages = function () {
35
21
  function NodePages(writeFileFunc, nodesPerPage) {
36
22
  (0, _classCallCheck2.default)(this, NodePages);
@@ -47,164 +33,166 @@ var NodePages = function () {
47
33
 
48
34
  (0, _createClass2.default)(NodePages, [{
49
35
  key: "useWriteFunction",
50
- value: function useWriteFunction(func) {
36
+ value:
37
+ function useWriteFunction(func) {
51
38
  this.writeFile = func;
52
39
  }
40
+
53
41
  }, {
54
42
  key: "getNodeById",
55
- value: function getNodeById(id) {
43
+ value:
44
+ function getNodeById(id) {
56
45
  var pageIndex = Math.floor(id / this.nodesPerPage);
57
46
  var nodeIndex = id % this.nodesPerPage;
58
47
  return this.nodePages[pageIndex].nodes[nodeIndex];
59
48
  }
49
+
60
50
  }, {
61
51
  key: "updateAll",
62
- value: function updateAll(id, data) {
52
+ value:
53
+ function updateAll(id, data) {
63
54
  var node = this.getNodeById(id);
64
55
  Object.assign(node, data, {
65
56
  index: node.index
66
57
  });
67
58
  }
59
+
68
60
  }, {
69
61
  key: "updateMaterialByNodeId",
70
- value: function updateMaterialByNodeId(id, materialId) {
62
+ value:
63
+ function updateMaterialByNodeId(id, materialId) {
71
64
  var node = this.getNodeById(id);
72
-
73
65
  if (!node.mesh) {
74
66
  return;
75
67
  }
76
-
77
68
  node.mesh.material = {
78
69
  definition: materialId,
79
70
  resource: node.index
80
71
  };
81
72
  }
73
+
82
74
  }, {
83
75
  key: "updateVertexCountByNodeId",
84
- value: function updateVertexCountByNodeId(id, vertexCount) {
76
+ value:
77
+ function updateVertexCountByNodeId(id, vertexCount) {
85
78
  var node = this.getNodeById(id);
86
-
87
79
  if (!node.mesh) {
88
80
  return;
89
81
  }
90
-
91
82
  node.mesh.geometry.vertexCount = vertexCount;
92
83
  }
84
+
93
85
  }, {
94
86
  key: "updateNodeAttributeByNodeId",
95
- value: function updateNodeAttributeByNodeId(id) {
87
+ value:
88
+ function updateNodeAttributeByNodeId(id) {
96
89
  var node = this.getNodeById(id);
97
-
98
90
  if (!node.mesh || !node.index) {
99
91
  return;
100
92
  }
101
-
102
93
  node.mesh.attribute.resource = node.index;
103
94
  }
95
+
104
96
  }, {
105
97
  key: "updateFeatureCountByNodeId",
106
- value: function updateFeatureCountByNodeId(id, featureCount) {
98
+ value:
99
+ function updateFeatureCountByNodeId(id, featureCount) {
107
100
  var node = this.getNodeById(id);
108
-
109
101
  if (!node.mesh) {
110
102
  return;
111
103
  }
112
-
113
104
  node.mesh.geometry.featureCount = featureCount;
114
105
  }
106
+
115
107
  }, {
116
108
  key: "updateTexelCountHintByNodeId",
117
- value: function updateTexelCountHintByNodeId(id, texelCountHint) {
109
+ value:
110
+ function updateTexelCountHintByNodeId(id, texelCountHint) {
118
111
  var node = this.getNodeById(id);
119
-
120
112
  if (!node.mesh || !node.mesh.material) {
121
113
  return;
122
114
  }
123
-
124
115
  node.mesh.material.texelCountHint = texelCountHint;
125
116
  }
117
+
126
118
  }, {
127
119
  key: "addChildRelation",
128
- value: function addChildRelation(parentId, childId) {
120
+ value:
121
+ function addChildRelation(parentId, childId) {
129
122
  var _parentNode$children;
130
-
131
123
  if (parentId === null || parentId === undefined) {
132
124
  return;
133
125
  }
134
-
135
126
  var parentNode = this.getNodeById(parentId);
136
127
  (_parentNode$children = parentNode.children) === null || _parentNode$children === void 0 ? void 0 : _parentNode$children.push(childId);
137
128
  }
129
+
138
130
  }, {
139
131
  key: "updateResourceInMesh",
140
- value: function updateResourceInMesh(node) {
132
+ value:
133
+ function updateResourceInMesh(node) {
141
134
  if (node.mesh && isFinite(node.index)) {
142
135
  node.mesh.geometry.resource = node.index;
143
136
  }
144
137
  }
138
+
145
139
  }, {
146
140
  key: "push",
147
- value: function push(node, parentId) {
141
+ value:
142
+ function push(node, parentId) {
148
143
  var currentNodePage = this.nodePages[this.nodePages.length - 1];
149
-
150
144
  if (currentNodePage.nodes.length === this.nodesPerPage) {
151
145
  currentNodePage = {
152
146
  nodes: []
153
147
  };
154
148
  this.nodePages.push(currentNodePage);
155
149
  }
156
-
157
150
  node.index = this.nodesCounter++;
158
151
  currentNodePage.nodes.push(node);
159
152
  this.addChildRelation(parentId, node.index);
160
153
  this.updateResourceInMesh(node);
161
154
  return node.index;
162
155
  }
156
+
163
157
  }, {
164
158
  key: "save",
165
159
  value: function () {
166
160
  var _save = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(layers0Path, writeQueue) {
167
161
  var slpk,
168
- _iterator,
169
- _step,
170
- _step$value,
171
- index,
172
- nodePage,
173
- nodePageStr,
174
- slpkPath,
175
- metadata,
176
- compress,
177
- _iterator2,
178
- _step2,
179
- _step2$value,
180
- _index,
181
- _nodePage,
182
- _nodePageStr,
183
- nodePagePath,
184
- _args = arguments;
185
-
162
+ _iterator,
163
+ _step,
164
+ _step$value,
165
+ index,
166
+ nodePage,
167
+ nodePageStr,
168
+ slpkPath,
169
+ metadata,
170
+ compress,
171
+ _iterator2,
172
+ _step2,
173
+ _step2$value,
174
+ _index,
175
+ _nodePage,
176
+ _nodePageStr,
177
+ nodePagePath,
178
+ _args = arguments;
186
179
  return _regenerator.default.wrap(function _callee$(_context) {
187
180
  while (1) {
188
181
  switch (_context.prev = _context.next) {
189
182
  case 0:
190
183
  slpk = _args.length > 2 && _args[2] !== undefined ? _args[2] : false;
191
-
192
184
  if (!slpk) {
193
185
  _context.next = 27;
194
186
  break;
195
187
  }
196
-
197
188
  _iterator = _createForOfIteratorHelper(this.nodePages.entries());
198
189
  _context.prev = 3;
199
-
200
190
  _iterator.s();
201
-
202
191
  case 5:
203
192
  if ((_step = _iterator.n()).done) {
204
193
  _context.next = 13;
205
194
  break;
206
195
  }
207
-
208
196
  _step$value = (0, _slicedToArray2.default)(_step.value, 2), index = _step$value[0], nodePage = _step$value[1];
209
197
  nodePageStr = JSON.stringify(nodePage);
210
198
  slpkPath = (0, _path.join)(layers0Path, 'nodepages');
@@ -213,28 +201,20 @@ var NodePages = function () {
213
201
  archiveKey: "nodePages/".concat(index.toString(), ".json.gz"),
214
202
  writePromise: this.writeFile(slpkPath, nodePageStr, "".concat(index.toString(), ".json"))
215
203
  });
216
-
217
204
  case 11:
218
205
  _context.next = 5;
219
206
  break;
220
-
221
207
  case 13:
222
208
  _context.next = 18;
223
209
  break;
224
-
225
210
  case 15:
226
211
  _context.prev = 15;
227
212
  _context.t0 = _context["catch"](3);
228
-
229
213
  _iterator.e(_context.t0);
230
-
231
214
  case 18:
232
215
  _context.prev = 18;
233
-
234
216
  _iterator.f();
235
-
236
217
  return _context.finish(18);
237
-
238
218
  case 21:
239
219
  metadata = (0, _jsonMapTransform.default)({
240
220
  nodeCount: this.nodesCounter
@@ -245,23 +225,18 @@ var NodePages = function () {
245
225
  archiveKey: 'metadata.json',
246
226
  writePromise: this.writeFile(layers0Path, JSON.stringify(metadata), 'metadata.json', compress)
247
227
  });
248
-
249
228
  case 25:
250
229
  _context.next = 46;
251
230
  break;
252
-
253
231
  case 27:
254
232
  _iterator2 = _createForOfIteratorHelper(this.nodePages.entries());
255
233
  _context.prev = 28;
256
-
257
234
  _iterator2.s();
258
-
259
235
  case 30:
260
236
  if ((_step2 = _iterator2.n()).done) {
261
237
  _context.next = 38;
262
238
  break;
263
239
  }
264
-
265
240
  _step2$value = (0, _slicedToArray2.default)(_step2.value, 2), _index = _step2$value[0], _nodePage = _step2$value[1];
266
241
  _nodePageStr = JSON.stringify(_nodePage);
267
242
  nodePagePath = (0, _path.join)(layers0Path, 'nodepages', _index.toString());
@@ -269,28 +244,20 @@ var NodePages = function () {
269
244
  return writeQueue.enqueue({
270
245
  writePromise: this.writeFile(nodePagePath, _nodePageStr)
271
246
  });
272
-
273
247
  case 36:
274
248
  _context.next = 30;
275
249
  break;
276
-
277
250
  case 38:
278
251
  _context.next = 43;
279
252
  break;
280
-
281
253
  case 40:
282
254
  _context.prev = 40;
283
255
  _context.t1 = _context["catch"](28);
284
-
285
256
  _iterator2.e(_context.t1);
286
-
287
257
  case 43:
288
258
  _context.prev = 43;
289
-
290
259
  _iterator2.f();
291
-
292
260
  return _context.finish(43);
293
-
294
261
  case 46:
295
262
  case "end":
296
263
  return _context.stop();
@@ -298,16 +265,13 @@ var NodePages = function () {
298
265
  }
299
266
  }, _callee, this, [[3, 15, 18, 21], [28, 40, 43, 46]]);
300
267
  }));
301
-
302
268
  function save(_x, _x2) {
303
269
  return _save.apply(this, arguments);
304
270
  }
305
-
306
271
  return save;
307
272
  }()
308
273
  }]);
309
274
  return NodePages;
310
275
  }();
311
-
312
276
  exports.default = NodePages;
313
277
  //# sourceMappingURL=node-pages.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/i3s-converter/helpers/node-pages.ts"],"names":["NodePages","writeFileFunc","nodesPerPage","nodesCounter","nodePages","nodes","writeFile","func","id","pageIndex","Math","floor","nodeIndex","data","node","getNodeById","Object","assign","index","materialId","mesh","material","definition","resource","vertexCount","geometry","attribute","featureCount","texelCountHint","parentId","childId","undefined","parentNode","children","push","isFinite","currentNodePage","length","addChildRelation","updateResourceInMesh","layers0Path","writeQueue","slpk","entries","nodePage","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":["NodePages","writeFileFunc","nodesPerPage","nodesCounter","nodePages","nodes","writeFile","func","id","pageIndex","Math","floor","nodeIndex","data","node","getNodeById","Object","assign","index","materialId","mesh","material","definition","resource","vertexCount","geometry","attribute","featureCount","texelCountHint","parentId","childId","undefined","parentNode","children","push","isFinite","currentNodePage","length","addChildRelation","updateResourceInMesh","layers0Path","writeQueue","slpk","entries","nodePage","nodePageStr","JSON","stringify","slpkPath","join","enqueue","archiveKey","toString","writePromise","metadata","transform","nodeCount","metadataTemplate","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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"}