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