@loaders.gl/tile-converter 3.2.9 → 3.2.11

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 (37) hide show
  1. package/dist/3d-tiles-attributes-worker.js +1 -1
  2. package/dist/3d-tiles-attributes-worker.js.map +1 -1
  3. package/dist/converter-cli.js +15 -2
  4. package/dist/converter.min.js +1 -1
  5. package/dist/dist.min.js +16 -12
  6. package/dist/es5/3d-tiles-attributes-worker.js +1 -1
  7. package/dist/es5/3d-tiles-attributes-worker.js.map +1 -1
  8. package/dist/es5/converter-cli.js +9 -2
  9. package/dist/es5/converter-cli.js.map +1 -1
  10. package/dist/es5/i3s-attributes-worker.js +1 -1
  11. package/dist/es5/i3s-attributes-worker.js.map +1 -1
  12. package/dist/es5/i3s-converter/helpers/coordinate-converter.js +6 -6
  13. package/dist/es5/i3s-converter/helpers/coordinate-converter.js.map +1 -1
  14. package/dist/es5/i3s-converter/i3s-converter.js +27 -20
  15. package/dist/es5/i3s-converter/i3s-converter.js.map +1 -1
  16. package/dist/es5/pgm-loader.js +1 -1
  17. package/dist/es5/pgm-loader.js.map +1 -1
  18. package/dist/esm/3d-tiles-attributes-worker.js +1 -1
  19. package/dist/esm/3d-tiles-attributes-worker.js.map +1 -1
  20. package/dist/esm/converter-cli.js +9 -2
  21. package/dist/esm/converter-cli.js.map +1 -1
  22. package/dist/esm/i3s-attributes-worker.js +1 -1
  23. package/dist/esm/i3s-attributes-worker.js.map +1 -1
  24. package/dist/esm/i3s-converter/helpers/coordinate-converter.js +6 -6
  25. package/dist/esm/i3s-converter/helpers/coordinate-converter.js.map +1 -1
  26. package/dist/esm/i3s-converter/i3s-converter.js +12 -4
  27. package/dist/esm/i3s-converter/i3s-converter.js.map +1 -1
  28. package/dist/esm/pgm-loader.js +1 -1
  29. package/dist/esm/pgm-loader.js.map +1 -1
  30. package/dist/i3s-converter/helpers/coordinate-converter.d.ts.map +1 -1
  31. package/dist/i3s-converter/helpers/coordinate-converter.js +8 -6
  32. package/dist/i3s-converter/i3s-converter.d.ts.map +1 -1
  33. package/dist/i3s-converter/i3s-converter.js +8 -4
  34. package/package.json +15 -15
  35. package/src/converter-cli.ts +16 -2
  36. package/src/i3s-converter/helpers/coordinate-converter.ts +8 -6
  37. package/src/i3s-converter/i3s-converter.ts +16 -4
package/dist/dist.min.js CHANGED
@@ -82159,7 +82159,7 @@ var GLTFV1Normalizer = class {
82159
82159
  metallicFactor: 1,
82160
82160
  roughnessFactor: 1
82161
82161
  };
82162
- const textureId = material.values?.tex || material.values?.texture2d_0;
82162
+ const textureId = material.values?.tex || material.values?.texture2d_0 || material.values?.diffuseTex;
82163
82163
  const textureIndex = json.textures.findIndex((texture) => texture.id === textureId);
82164
82164
  if (textureIndex !== -1) {
82165
82165
  material.pbrMetallicRoughness.baseColorTexture = { index: textureIndex };
@@ -82690,7 +82690,7 @@ function getReferencesImageIndices(gltf) {
82690
82690
  async function loadImage(gltf, image, index, options, context) {
82691
82691
  const { fetch: fetch2, parse: parse9 } = context;
82692
82692
  let arrayBuffer;
82693
- if (image.uri) {
82693
+ if (image.uri && !image.hasOwnProperty("bufferView")) {
82694
82694
  const uri = resolveUrl(image.uri, options);
82695
82695
  const response = await fetch2(uri);
82696
82696
  arrayBuffer = await response.arrayBuffer();
@@ -84307,12 +84307,12 @@ function convertBoundingVolumeToI3SFullExtent(boundingVolume) {
84307
84307
  const vertexMax = import_geospatial8.Ellipsoid.WGS84.cartesianToCartographic(new import_core20.Vector3(center[0] + radius, center[1] + radius, center[2] + radius), new import_core20.Vector3());
84308
84308
  const vertexMin = import_geospatial8.Ellipsoid.WGS84.cartesianToCartographic(new import_core20.Vector3(center[0] - radius, center[1] - radius, center[2] - radius), new import_core20.Vector3());
84309
84309
  return {
84310
- xmin: vertexMin[0],
84311
- xmax: vertexMax[0],
84312
- ymin: vertexMin[1],
84313
- ymax: vertexMax[1],
84314
- zmin: vertexMin[2],
84315
- zmax: vertexMax[2]
84310
+ xmin: Math.min(vertexMin[0], vertexMax[0]),
84311
+ xmax: Math.max(vertexMin[0], vertexMax[0]),
84312
+ ymin: Math.min(vertexMin[1], vertexMax[1]),
84313
+ ymax: Math.max(vertexMin[1], vertexMax[1]),
84314
+ zmin: Math.min(vertexMin[2], vertexMax[2]),
84315
+ zmax: Math.max(vertexMin[2], vertexMax[2])
84316
84316
  };
84317
84317
  }
84318
84318
  function createObbFromMbs(mbs) {
@@ -85828,7 +85828,7 @@ var I3SConverter = class {
85828
85828
  Object.assign(tilesetOptions, preloadOptions);
85829
85829
  const sourceTilesetJson = await load(inputUrl, this.Loader, tilesetOptions.loadOptions);
85830
85830
  this.sourceTileset = new Tileset3D(sourceTilesetJson, tilesetOptions);
85831
- await this._createAndSaveTileset(outputPath, tilesetName);
85831
+ await this._createAndSaveTileset(outputPath, tilesetName, sourceTilesetJson?.root?.boundingVolume?.region);
85832
85832
  await this._finishConversion({ slpk: Boolean(slpk), outputPath, tilesetName });
85833
85833
  return sourceTilesetJson;
85834
85834
  } catch (error) {
@@ -85838,14 +85838,14 @@ var I3SConverter = class {
85838
85838
  workerFarm.destroy();
85839
85839
  }
85840
85840
  }
85841
- async _createAndSaveTileset(outputPath, tilesetName) {
85841
+ async _createAndSaveTileset(outputPath, tilesetName, boundingVolumeRegion) {
85842
85842
  const tilesetPath = (0, import_path7.join)(`${outputPath}`, `${tilesetName}`);
85843
85843
  try {
85844
85844
  await removeDir(tilesetPath);
85845
85845
  } catch (e) {
85846
85846
  }
85847
85847
  this.layers0Path = (0, import_path7.join)(tilesetPath, "SceneServer", "layers", "0");
85848
- this._formLayers0(tilesetName);
85848
+ this._formLayers0(tilesetName, boundingVolumeRegion);
85849
85849
  this.materialDefinitions = [];
85850
85850
  this.materialMap = new Map();
85851
85851
  const sourceRootTile = this.sourceTileset.root;
@@ -85870,8 +85870,12 @@ var I3SConverter = class {
85870
85870
  await this.writeQueue.finalize();
85871
85871
  await this._createSlpk(tilesetPath);
85872
85872
  }
85873
- _formLayers0(tilesetName) {
85873
+ _formLayers0(tilesetName, boundingVolumeRegion) {
85874
85874
  const fullExtent = convertBoundingVolumeToI3SFullExtent(this.sourceTileset?.boundingVolume || this.sourceTileset?.root?.boundingVolume);
85875
+ if (boundingVolumeRegion) {
85876
+ fullExtent.zmin = boundingVolumeRegion[4];
85877
+ fullExtent.zmax = boundingVolumeRegion[5];
85878
+ }
85875
85879
  const extent = [fullExtent.xmin, fullExtent.ymin, fullExtent.xmax, fullExtent.ymax];
85876
85880
  const layers0data = {
85877
85881
  version: `{${v4().toUpperCase()}}`,
@@ -8,7 +8,7 @@ exports._typecheckI3SAttributesWorker = exports.Tile3dAttributesWorker = void 0;
8
8
 
9
9
  var _workerUtils = require("@loaders.gl/worker-utils");
10
10
 
11
- var VERSION = typeof "3.2.9" !== 'undefined' ? "3.2.9" : 'latest';
11
+ var VERSION = typeof "3.2.11" !== 'undefined' ? "3.2.11" : 'latest';
12
12
  var Tile3dAttributesWorker = {
13
13
  id: '3d-tiles-attributes',
14
14
  name: '3DTiles Attributes Worker',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/3d-tiles-attributes-worker.ts"],"names":["VERSION","Tile3dAttributesWorker","id","name","module","version","options","attributes","transform3DTilesAttributesOnWorker","i3sAttributesData","_typecheckI3SAttributesWorker"],"mappings":";;;;;;;;AAGA;;AAIA,IAAMA,OAAO,GAAG,mBAAuB,WAAvB,aAAmD,QAAnE;AAeO,IAAMC,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,UAAU,EAAE;AADL;AAL2B,CAA/B;;;AAaA,SAASC,kCAAT,CACLC,iBADK,EAELH,OAFK,EAGiB;AACtB,SAAO,kCAAgBL,sBAAhB,EAAwCQ,iBAAxC,EAA2DH,OAA3D,CAAP;AACD;;AAEM,IAAMI,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 attributes: 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,"sources":["../../src/3d-tiles-attributes-worker.ts"],"names":["VERSION","Tile3dAttributesWorker","id","name","module","version","options","attributes","transform3DTilesAttributesOnWorker","i3sAttributesData","_typecheckI3SAttributesWorker"],"mappings":";;;;;;;;AAGA;;AAIA,IAAMA,OAAO,GAAG,oBAAuB,WAAvB,cAAmD,QAAnE;AAeO,IAAMC,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,UAAU,EAAE;AADL;AAL2B,CAA/B;;;AAaA,SAASC,kCAAT,CACLC,iBADK,EAELH,OAFK,EAGiB;AACtB,SAAO,kCAAgBL,sBAAhB,EAAwCQ,iBAAxC,EAA2DH,OAA3D,CAAP;AACD;;AAEM,IAAMI,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 attributes: 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"}
@@ -189,7 +189,7 @@ function validateOptions(options) {
189
189
  exceptions.forEach(function (exeption) {
190
190
  return exeption();
191
191
  });
192
- process.exit(0);
192
+ process.exit(1);
193
193
  }
194
194
 
195
195
  return options;
@@ -215,7 +215,7 @@ function parseOptions(args) {
215
215
  break;
216
216
 
217
217
  case '--tileset':
218
- opts.tileset = getStringValue(index, args);
218
+ opts.tileset = getURLValue(index, args);
219
219
  break;
220
220
 
221
221
  case '--name':
@@ -293,6 +293,13 @@ function getStringValue(index, args) {
293
293
  return value;
294
294
  }
295
295
 
296
+ function getURLValue(index, args) {
297
+ var value = getStringValue(index, args);
298
+ console.log("Input tileset value: ".concat(value));
299
+ console.log("Modified tileset value: ".concat(value.replace(/\\/g, '/')));
300
+ return value.replace(/\\/g, '/');
301
+ }
302
+
296
303
  function getIntegerValue(index, args) {
297
304
  var stringValue = getStringValue(index, args);
298
305
  var result = Number.parseInt(stringValue);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/converter-cli.ts"],"names":["TILESET_TYPE","I3S","_3DTILES","main","process","argv","args","length","printHelp","options","parseOptions","installDependencies","depthInstaller","DepsInstaller","install","validatedOptions","validateOptions","convert","catch","error","console","log","exit","inputType","toUpperCase","tiles3DConverter","Tiles3DConverter","inputUrl","tileset","outputPath","output","tilesetName","name","maxDepth","egmFilePath","egm","converter","I3SConverter","slpk","sevenZipExe","token","draco","generateTextures","generateBoundingVolumes","validate","mandatoryOptionsWithExceptions","exceptions","mandatoryOption","optionValue","isWrongInputType","Boolean","Object","values","includes","push","forEach","exeption","opts","cwd","arg","index","indexOf","getStringValue","getIntegerValue","warn","value","stringValue","result","Number","parseInt","isFinite","NaN"],"mappings":"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","sourcesContent":["/* eslint-disable no-console */\nimport '@loaders.gl/polyfills';\nimport {join} from 'path';\nimport {I3SConverter, Tiles3DConverter} from '@loaders.gl/tile-converter';\nimport {DepsInstaller} from './deps-installer/deps-installer';\n\ntype TileConversionOptions = {\n /** \"I3S\" - for I3S to 3DTiles conversion, \"3DTILES\" for 3DTiles to I3S conversion */\n inputType?: string;\n /** \"tileset.json\" file (3DTiles) / \"http://..../SceneServer/layers/0\" resource (I3S) */\n tileset?: string;\n /** Tileset name. This option is used for naming in resulting json resouces and for resulting path/*.slpk file naming */\n name?: string;\n /** Output folder. This folder will be created by converter if doesn't exist. It is relative to the converter path.\n * Default: \"data\" folder */\n output: string;\n /** 3DTiles->I3S only. location of 7z.exe archiver to create slpk on Windows OS, default: \"C:\\Program Files\\7-Zip\\7z.exe\" */\n sevenZipExe: string;\n /** location of the Earth Gravity Model (*.pgm) file to convert heights from ellipsoidal to gravity-related format,\n * default: \"./deps/egm2008-5.pgm\". A model file can be loaded from GeographicLib\n * https://geographiclib.sourceforge.io/html/geoid.html */\n egm: string;\n /** 3DTile->I3S only. Token for Cesium ION tileset authentication. */\n token?: string;\n /** 3DTiles->I3S only. Enable draco compression for geometry. Default: true */\n draco: boolean;\n /** Run the script for installing dependencies. Run this options separate from others. Now \"*.pgm\" file installation is\n * implemented */\n installDependencies: boolean;\n /** 3DTile->I3S only. Enable KTX2 textures generation if only one of (JPG, PNG) texture is provided or generate JPG texture\n * if only KTX2 is provided */\n generateTextures: boolean;\n /** 3DTile->I3S only. Will generate obb and mbs bounding volumes from geometry */\n generateBoundingVolumes: boolean;\n /** Validate the dataset during conversion. Validation messages will be posted in the console output */\n validate: boolean;\n /** Maximal depth of the hierarchical tiles tree traversal, default: infinite */\n maxDepth?: number;\n /** 3DTiles->I3S only. Whether the converter generates *.slpk (Scene Layer Package) I3S output file */\n slpk: boolean;\n};\n\n/* During validation we check that particular options are defined so they can't be undefined */\ntype ValidatedTileConversionOptions = TileConversionOptions & {\n /** \"I3S\" - for I3S to 3DTiles conversion, \"3DTILES\" for 3DTiles to I3S conversion */\n inputType: string;\n /** \"tileset.json\" file (3DTiles) / \"http://..../SceneServer/layers/0\" resource (I3S) */\n tileset: string;\n /** Tileset name. This option is used for naming in resulting json resouces and for resulting path/*.slpk file naming */\n name: string;\n};\n\nconst TILESET_TYPE = {\n I3S: 'I3S',\n _3DTILES: '3DTILES'\n};\n\n/**\n * CLI entry\n * @returns\n */\nasync function main() {\n const [, , ...args] = process.argv;\n\n if (args.length === 0) {\n printHelp();\n }\n\n const options: TileConversionOptions = parseOptions(args);\n\n if (options.installDependencies) {\n const depthInstaller = new DepsInstaller();\n depthInstaller.install('deps');\n return;\n }\n\n const validatedOptions: ValidatedTileConversionOptions = validateOptions(options);\n\n await convert(validatedOptions);\n}\n\nmain().catch((error) => {\n console.log(error);\n process.exit(1); // eslint-disable-line\n});\n\n/**\n * Output for `npx tile-converter --help`\n */\nfunction printHelp(): void {\n console.log('cli: converter 3dTiles to I3S or I3S to 3dTiles...');\n console.log(\n '--install-dependencies [Run the script for installing dependencies. Run this options separate from others. Now \"*.pgm\" file installation is implemented]'\n );\n console.log(\n '--max-depth [Maximal depth of hierarchical tiles tree traversal, default: infinite]'\n );\n console.log('--name [Tileset name]');\n console.log('--output [Output folder, default: \"data\" folder]');\n console.log('--slpk [Generate slpk (Scene Layer Packages) I3S output file]');\n console.log(\n '--tileset [tileset.json file (3DTiles) / http://..../SceneServer/layers/0 resource (I3S)]'\n );\n console.log('--input-type [tileset input type: I3S or 3DTILES]');\n console.log(\n '--7zExe [location of 7z.exe archiver to create slpk on Windows, default: \"C:\\\\Program Files\\\\7-Zip\\\\7z.exe\"]'\n );\n console.log(\n '--egm [location of Earth Gravity Model *.pgm file to convert heights from ellipsoidal to gravity-related format. A model file can be loaded from GeographicLib https://geographiclib.sourceforge.io/html/geoid.html], default: \"./deps/egm2008-5.zip\"'\n );\n console.log('--token [Token for Cesium ION tilesets authentication]');\n console.log('--no-draco [Disable draco compression for geometry]');\n console.log(\n '--generate-textures [Enable KTX2 textures generation if only one of (JPG, PNG) texture is provided or generate JPG texture if only KTX2 is provided]'\n );\n console.log(\n '--generate-bounding-volumes [Will generate obb and mbs bounding volumes from geometry]'\n );\n console.log('--validate [Enable validation]');\n process.exit(0); // eslint-disable-line\n}\n\n/**\n * Run conversion process\n * @param options validated tile-converter options\n */\nasync function convert(options: ValidatedTileConversionOptions) {\n console.log(`------------------------------------------------`); // eslint-disable-line\n console.log(`Starting conversion of ${options.inputType}`); // eslint-disable-line\n console.log(`------------------------------------------------`); // eslint-disable-line\n const inputType = options.inputType.toUpperCase();\n switch (inputType) {\n case TILESET_TYPE.I3S:\n const tiles3DConverter = new Tiles3DConverter();\n tiles3DConverter.convert({\n inputUrl: options.tileset,\n outputPath: options.output,\n tilesetName: options.name,\n maxDepth: options.maxDepth,\n egmFilePath: options.egm\n });\n break;\n case TILESET_TYPE._3DTILES:\n const converter = new I3SConverter();\n await converter.convert({\n inputUrl: options.tileset,\n outputPath: options.output,\n tilesetName: options.name,\n maxDepth: options.maxDepth,\n slpk: options.slpk,\n sevenZipExe: options.sevenZipExe,\n egmFilePath: options.egm,\n token: options.token,\n draco: options.draco,\n generateTextures: options.generateTextures,\n generateBoundingVolumes: options.generateBoundingVolumes,\n validate: options.validate\n });\n break;\n default:\n printHelp();\n }\n}\n\n// OPTIONS\n/**\n * Validate input options of the CLI command\n * @param options - input options of the CLI command\n * @returns validated options\n */\nfunction validateOptions(options: TileConversionOptions): ValidatedTileConversionOptions {\n const mandatoryOptionsWithExceptions: {\n [key: string]: () => void;\n } = {\n name: () => console.log('Missed: --name [Tileset name]'),\n output: () => console.log('Missed: --output [Output path name]'),\n sevenZipExe: () => console.log('Missed: --7zExe [7z archiver executable path]'),\n egm: () => console.log('Missed: --egm [*.pgm earth gravity model file path]'),\n tileset: () => console.log('Missed: --tileset [tileset.json file]'),\n inputType: () =>\n console.log('Missed/Incorrect: --input-type [tileset input type: I3S or 3DTILES]')\n };\n const exceptions: (() => void)[] = [];\n for (const mandatoryOption in mandatoryOptionsWithExceptions) {\n const optionValue = options[mandatoryOption];\n const isWrongInputType =\n Boolean(optionValue) &&\n mandatoryOption === 'inputType' &&\n !Object.values(TILESET_TYPE).includes(optionValue.toUpperCase());\n\n if (!optionValue || isWrongInputType) {\n exceptions.push(mandatoryOptionsWithExceptions[mandatoryOption]);\n }\n }\n if (exceptions.length) {\n exceptions.forEach((exeption) => exeption());\n process.exit(0); // eslint-disable-line\n }\n return <ValidatedTileConversionOptions>options;\n}\n\n/**\n * Parse option from the cli arguments array\n * @param args\n * @returns\n */\nfunction parseOptions(args: string[]): TileConversionOptions {\n const opts: TileConversionOptions = {\n output: 'data',\n sevenZipExe: 'C:\\\\Program Files\\\\7-Zip\\\\7z.exe',\n egm: join(process.cwd(), 'deps', 'egm2008-5.pgm'),\n draco: true,\n installDependencies: false,\n generateTextures: false,\n generateBoundingVolumes: false,\n validate: false,\n slpk: false\n };\n\n // eslint-disable-next-line complexity\n args.forEach((arg, index) => {\n if (arg.indexOf('--') === 0) {\n switch (arg) {\n case '--input-type':\n opts.inputType = getStringValue(index, args);\n break;\n case '--tileset':\n opts.tileset = getStringValue(index, args);\n break;\n case '--name':\n opts.name = getStringValue(index, args);\n break;\n case '--output':\n opts.output = getStringValue(index, args);\n break;\n case '--max-depth':\n opts.maxDepth = getIntegerValue(index, args);\n break;\n case '--slpk':\n opts.slpk = true;\n break;\n case '--7zExe':\n opts.sevenZipExe = getStringValue(index, args);\n break;\n case '--egm':\n opts.egm = getStringValue(index, args);\n break;\n case '--token':\n opts.token = getStringValue(index, args);\n break;\n case '--no-draco':\n opts.draco = false;\n break;\n case '--validate':\n opts.validate = true;\n break;\n case '--install-dependencies':\n opts.installDependencies = true;\n break;\n case '--generate-textures':\n opts.generateTextures = true;\n break;\n case '--generate-bounding-volumes':\n opts.generateBoundingVolumes = true;\n break;\n case '--help':\n printHelp();\n break;\n default:\n console.warn(`Unknown option ${arg}`);\n process.exit(0); // eslint-disable-line\n }\n }\n });\n return opts;\n}\n\n/**\n * Get string option value from cli arguments\n * @param index - option's name index in the argument's array.\n * The value of the option should be next to name of the option.\n * @param args - cli arguments array\n * @returns - string value of the option\n */\nfunction getStringValue(index: number, args: string[]): string {\n if (index + 1 >= args.length) {\n return '';\n }\n const value = args[index + 1];\n if (value.indexOf('--') === 0) {\n return '';\n }\n return value;\n}\n\n/**\n * Get integer option value from cli arguments\n * @param index - option's name index in the argument's array\n * The value of the option should be next to name of the option.\n * @param args - cli arguments array\n * @returns - number value of the option\n */\nfunction getIntegerValue(index: number, args: string[]): number {\n const stringValue: string = getStringValue(index, args);\n const result: number = Number.parseInt(stringValue);\n if (isFinite(result)) {\n return result;\n }\n return NaN;\n}\n"],"file":"converter-cli.js"}
1
+ {"version":3,"sources":["../../src/converter-cli.ts"],"names":["TILESET_TYPE","I3S","_3DTILES","main","process","argv","args","length","printHelp","options","parseOptions","installDependencies","depthInstaller","DepsInstaller","install","validatedOptions","validateOptions","convert","catch","error","console","log","exit","inputType","toUpperCase","tiles3DConverter","Tiles3DConverter","inputUrl","tileset","outputPath","output","tilesetName","name","maxDepth","egmFilePath","egm","converter","I3SConverter","slpk","sevenZipExe","token","draco","generateTextures","generateBoundingVolumes","validate","mandatoryOptionsWithExceptions","exceptions","mandatoryOption","optionValue","isWrongInputType","Boolean","Object","values","includes","push","forEach","exeption","opts","cwd","arg","index","indexOf","getStringValue","getURLValue","getIntegerValue","warn","value","replace","stringValue","result","Number","parseInt","isFinite","NaN"],"mappings":";;;;;;;;;;AACA;;AACA;;AACA;;AACA;;AAgDA,IAAMA,YAAY,GAAG;AACnBC,EAAAA,GAAG,EAAE,KADc;AAEnBC,EAAAA,QAAQ,EAAE;AAFS,CAArB;;SASeC,I;;;;;oEAAf;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,mDACwBC,OAAO,CAACC,IADhC,GACgBC,IADhB;;AAGE,gBAAIA,IAAI,CAACC,MAAL,KAAgB,CAApB,EAAuB;AACrBC,cAAAA,SAAS;AACV;;AAEKC,YAAAA,OAPR,GAOyCC,YAAY,CAACJ,IAAD,CAPrD;;AAAA,iBASMG,OAAO,CAACE,mBATd;AAAA;AAAA;AAAA;;AAUUC,YAAAA,cAVV,GAU2B,IAAIC,4BAAJ,EAV3B;AAWID,YAAAA,cAAc,CAACE,OAAf,CAAuB,MAAvB;AAXJ;;AAAA;AAeQC,YAAAA,gBAfR,GAe2DC,eAAe,CAACP,OAAD,CAf1E;AAAA;AAAA,mBAiBQQ,OAAO,CAACF,gBAAD,CAjBf;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G;;;;AAoBAZ,IAAI,GAAGe,KAAP,CAAa,UAACC,KAAD,EAAW;AACtBC,EAAAA,OAAO,CAACC,GAAR,CAAYF,KAAZ;AACAf,EAAAA,OAAO,CAACkB,IAAR,CAAa,CAAb;AACD,CAHD;;AAQA,SAASd,SAAT,GAA2B;AACzBY,EAAAA,OAAO,CAACC,GAAR,CAAY,oDAAZ;AACAD,EAAAA,OAAO,CAACC,GAAR,CACE,0JADF;AAGAD,EAAAA,OAAO,CAACC,GAAR,CACE,qFADF;AAGAD,EAAAA,OAAO,CAACC,GAAR,CAAY,uBAAZ;AACAD,EAAAA,OAAO,CAACC,GAAR,CAAY,kDAAZ;AACAD,EAAAA,OAAO,CAACC,GAAR,CAAY,+DAAZ;AACAD,EAAAA,OAAO,CAACC,GAAR,CACE,2FADF;AAGAD,EAAAA,OAAO,CAACC,GAAR,CAAY,mDAAZ;AACAD,EAAAA,OAAO,CAACC,GAAR,CACE,8GADF;AAGAD,EAAAA,OAAO,CAACC,GAAR,CACE,uPADF;AAGAD,EAAAA,OAAO,CAACC,GAAR,CAAY,wDAAZ;AACAD,EAAAA,OAAO,CAACC,GAAR,CAAY,qDAAZ;AACAD,EAAAA,OAAO,CAACC,GAAR,CACE,sJADF;AAGAD,EAAAA,OAAO,CAACC,GAAR,CACE,wFADF;AAGAD,EAAAA,OAAO,CAACC,GAAR,CAAY,gCAAZ;AACAjB,EAAAA,OAAO,CAACkB,IAAR,CAAa,CAAb;AACD;;SAMcL,O;;;;;uEAAf,kBAAuBR,OAAvB;AAAA;AAAA;AAAA;AAAA;AAAA;AACEW,YAAAA,OAAO,CAACC,GAAR;AACAD,YAAAA,OAAO,CAACC,GAAR,kCAAsCZ,OAAO,CAACc,SAA9C;AACAH,YAAAA,OAAO,CAACC,GAAR;AACME,YAAAA,SAJR,GAIoBd,OAAO,CAACc,SAAR,CAAkBC,WAAlB,EAJpB;AAAA,2BAKUD,SALV;AAAA,8CAMSvB,YAAY,CAACC,GANtB,wBAgBSD,YAAY,CAACE,QAhBtB;AAAA;;AAAA;AAOYuB,YAAAA,gBAPZ,GAO+B,IAAIC,+BAAJ,EAP/B;AAQMD,YAAAA,gBAAgB,CAACR,OAAjB,CAAyB;AACvBU,cAAAA,QAAQ,EAAElB,OAAO,CAACmB,OADK;AAEvBC,cAAAA,UAAU,EAAEpB,OAAO,CAACqB,MAFG;AAGvBC,cAAAA,WAAW,EAAEtB,OAAO,CAACuB,IAHE;AAIvBC,cAAAA,QAAQ,EAAExB,OAAO,CAACwB,QAJK;AAKvBC,cAAAA,WAAW,EAAEzB,OAAO,CAAC0B;AALE,aAAzB;AARN;;AAAA;AAiBYC,YAAAA,SAjBZ,GAiBwB,IAAIC,2BAAJ,EAjBxB;AAAA;AAAA,mBAkBYD,SAAS,CAACnB,OAAV,CAAkB;AACtBU,cAAAA,QAAQ,EAAElB,OAAO,CAACmB,OADI;AAEtBC,cAAAA,UAAU,EAAEpB,OAAO,CAACqB,MAFE;AAGtBC,cAAAA,WAAW,EAAEtB,OAAO,CAACuB,IAHC;AAItBC,cAAAA,QAAQ,EAAExB,OAAO,CAACwB,QAJI;AAKtBK,cAAAA,IAAI,EAAE7B,OAAO,CAAC6B,IALQ;AAMtBC,cAAAA,WAAW,EAAE9B,OAAO,CAAC8B,WANC;AAOtBL,cAAAA,WAAW,EAAEzB,OAAO,CAAC0B,GAPC;AAQtBK,cAAAA,KAAK,EAAE/B,OAAO,CAAC+B,KARO;AAStBC,cAAAA,KAAK,EAAEhC,OAAO,CAACgC,KATO;AAUtBC,cAAAA,gBAAgB,EAAEjC,OAAO,CAACiC,gBAVJ;AAWtBC,cAAAA,uBAAuB,EAAElC,OAAO,CAACkC,uBAXX;AAYtBC,cAAAA,QAAQ,EAAEnC,OAAO,CAACmC;AAZI,aAAlB,CAlBZ;;AAAA;AAAA;;AAAA;AAkCMpC,YAAAA,SAAS;;AAlCf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G;;;;AA4CA,SAASQ,eAAT,CAAyBP,OAAzB,EAAyF;AACvF,MAAMoC,8BAEL,GAAG;AACFb,IAAAA,IAAI,EAAE;AAAA,aAAMZ,OAAO,CAACC,GAAR,CAAY,+BAAZ,CAAN;AAAA,KADJ;AAEFS,IAAAA,MAAM,EAAE;AAAA,aAAMV,OAAO,CAACC,GAAR,CAAY,qCAAZ,CAAN;AAAA,KAFN;AAGFkB,IAAAA,WAAW,EAAE;AAAA,aAAMnB,OAAO,CAACC,GAAR,CAAY,+CAAZ,CAAN;AAAA,KAHX;AAIFc,IAAAA,GAAG,EAAE;AAAA,aAAMf,OAAO,CAACC,GAAR,CAAY,qDAAZ,CAAN;AAAA,KAJH;AAKFO,IAAAA,OAAO,EAAE;AAAA,aAAMR,OAAO,CAACC,GAAR,CAAY,uCAAZ,CAAN;AAAA,KALP;AAMFE,IAAAA,SAAS,EAAE;AAAA,aACTH,OAAO,CAACC,GAAR,CAAY,qEAAZ,CADS;AAAA;AANT,GAFJ;AAWA,MAAMyB,UAA0B,GAAG,EAAnC;;AACA,OAAK,IAAMC,eAAX,IAA8BF,8BAA9B,EAA8D;AAC5D,QAAMG,WAAW,GAAGvC,OAAO,CAACsC,eAAD,CAA3B;AACA,QAAME,gBAAgB,GACpBC,OAAO,CAACF,WAAD,CAAP,IACAD,eAAe,KAAK,WADpB,IAEA,CAACI,MAAM,CAACC,MAAP,CAAcpD,YAAd,EAA4BqD,QAA5B,CAAqCL,WAAW,CAACxB,WAAZ,EAArC,CAHH;;AAKA,QAAI,CAACwB,WAAD,IAAgBC,gBAApB,EAAsC;AACpCH,MAAAA,UAAU,CAACQ,IAAX,CAAgBT,8BAA8B,CAACE,eAAD,CAA9C;AACD;AACF;;AACD,MAAID,UAAU,CAACvC,MAAf,EAAuB;AACrBuC,IAAAA,UAAU,CAACS,OAAX,CAAmB,UAACC,QAAD;AAAA,aAAcA,QAAQ,EAAtB;AAAA,KAAnB;AACApD,IAAAA,OAAO,CAACkB,IAAR,CAAa,CAAb;AACD;;AACD,SAAuCb,OAAvC;AACD;;AAOD,SAASC,YAAT,CAAsBJ,IAAtB,EAA6D;AAC3D,MAAMmD,IAA2B,GAAG;AAClC3B,IAAAA,MAAM,EAAE,MAD0B;AAElCS,IAAAA,WAAW,EAAE,kCAFqB;AAGlCJ,IAAAA,GAAG,EAAE,gBAAK/B,OAAO,CAACsD,GAAR,EAAL,EAAoB,MAApB,EAA4B,eAA5B,CAH6B;AAIlCjB,IAAAA,KAAK,EAAE,IAJ2B;AAKlC9B,IAAAA,mBAAmB,EAAE,KALa;AAMlC+B,IAAAA,gBAAgB,EAAE,KANgB;AAOlCC,IAAAA,uBAAuB,EAAE,KAPS;AAQlCC,IAAAA,QAAQ,EAAE,KARwB;AASlCN,IAAAA,IAAI,EAAE;AAT4B,GAApC;AAaAhC,EAAAA,IAAI,CAACiD,OAAL,CAAa,UAACI,GAAD,EAAMC,KAAN,EAAgB;AAC3B,QAAID,GAAG,CAACE,OAAJ,CAAY,IAAZ,MAAsB,CAA1B,EAA6B;AAC3B,cAAQF,GAAR;AACE,aAAK,cAAL;AACEF,UAAAA,IAAI,CAAClC,SAAL,GAAiBuC,cAAc,CAACF,KAAD,EAAQtD,IAAR,CAA/B;AACA;;AACF,aAAK,WAAL;AACEmD,UAAAA,IAAI,CAAC7B,OAAL,GAAemC,WAAW,CAACH,KAAD,EAAQtD,IAAR,CAA1B;AACA;;AACF,aAAK,QAAL;AACEmD,UAAAA,IAAI,CAACzB,IAAL,GAAY8B,cAAc,CAACF,KAAD,EAAQtD,IAAR,CAA1B;AACA;;AACF,aAAK,UAAL;AACEmD,UAAAA,IAAI,CAAC3B,MAAL,GAAcgC,cAAc,CAACF,KAAD,EAAQtD,IAAR,CAA5B;AACA;;AACF,aAAK,aAAL;AACEmD,UAAAA,IAAI,CAACxB,QAAL,GAAgB+B,eAAe,CAACJ,KAAD,EAAQtD,IAAR,CAA/B;AACA;;AACF,aAAK,QAAL;AACEmD,UAAAA,IAAI,CAACnB,IAAL,GAAY,IAAZ;AACA;;AACF,aAAK,SAAL;AACEmB,UAAAA,IAAI,CAAClB,WAAL,GAAmBuB,cAAc,CAACF,KAAD,EAAQtD,IAAR,CAAjC;AACA;;AACF,aAAK,OAAL;AACEmD,UAAAA,IAAI,CAACtB,GAAL,GAAW2B,cAAc,CAACF,KAAD,EAAQtD,IAAR,CAAzB;AACA;;AACF,aAAK,SAAL;AACEmD,UAAAA,IAAI,CAACjB,KAAL,GAAasB,cAAc,CAACF,KAAD,EAAQtD,IAAR,CAA3B;AACA;;AACF,aAAK,YAAL;AACEmD,UAAAA,IAAI,CAAChB,KAAL,GAAa,KAAb;AACA;;AACF,aAAK,YAAL;AACEgB,UAAAA,IAAI,CAACb,QAAL,GAAgB,IAAhB;AACA;;AACF,aAAK,wBAAL;AACEa,UAAAA,IAAI,CAAC9C,mBAAL,GAA2B,IAA3B;AACA;;AACF,aAAK,qBAAL;AACE8C,UAAAA,IAAI,CAACf,gBAAL,GAAwB,IAAxB;AACA;;AACF,aAAK,6BAAL;AACEe,UAAAA,IAAI,CAACd,uBAAL,GAA+B,IAA/B;AACA;;AACF,aAAK,QAAL;AACEnC,UAAAA,SAAS;AACT;;AACF;AACEY,UAAAA,OAAO,CAAC6C,IAAR,0BAA+BN,GAA/B;AACAvD,UAAAA,OAAO,CAACkB,IAAR,CAAa,CAAb;AAhDJ;AAkDD;AACF,GArDD;AAsDA,SAAOmC,IAAP;AACD;;AASD,SAASK,cAAT,CAAwBF,KAAxB,EAAuCtD,IAAvC,EAA+D;AAC7D,MAAIsD,KAAK,GAAG,CAAR,IAAatD,IAAI,CAACC,MAAtB,EAA8B;AAC5B,WAAO,EAAP;AACD;;AACD,MAAM2D,KAAK,GAAG5D,IAAI,CAACsD,KAAK,GAAG,CAAT,CAAlB;;AACA,MAAIM,KAAK,CAACL,OAAN,CAAc,IAAd,MAAwB,CAA5B,EAA+B;AAC7B,WAAO,EAAP;AACD;;AACD,SAAOK,KAAP;AACD;;AASD,SAASH,WAAT,CAAqBH,KAArB,EAAoCtD,IAApC,EAA4D;AAC1D,MAAM4D,KAAK,GAAGJ,cAAc,CAACF,KAAD,EAAQtD,IAAR,CAA5B;AACAc,EAAAA,OAAO,CAACC,GAAR,gCAAoC6C,KAApC;AACA9C,EAAAA,OAAO,CAACC,GAAR,mCAAuC6C,KAAK,CAACC,OAAN,CAAc,KAAd,EAAqB,GAArB,CAAvC;AACA,SAAOD,KAAK,CAACC,OAAN,CAAc,KAAd,EAAqB,GAArB,CAAP;AACD;;AASD,SAASH,eAAT,CAAyBJ,KAAzB,EAAwCtD,IAAxC,EAAgE;AAC9D,MAAM8D,WAAmB,GAAGN,cAAc,CAACF,KAAD,EAAQtD,IAAR,CAA1C;AACA,MAAM+D,MAAc,GAAGC,MAAM,CAACC,QAAP,CAAgBH,WAAhB,CAAvB;;AACA,MAAII,QAAQ,CAACH,MAAD,CAAZ,EAAsB;AACpB,WAAOA,MAAP;AACD;;AACD,SAAOI,GAAP;AACD","sourcesContent":["/* eslint-disable no-console */\nimport '@loaders.gl/polyfills';\nimport {join} from 'path';\nimport {I3SConverter, Tiles3DConverter} from '@loaders.gl/tile-converter';\nimport {DepsInstaller} from './deps-installer/deps-installer';\n\ntype TileConversionOptions = {\n /** \"I3S\" - for I3S to 3DTiles conversion, \"3DTILES\" for 3DTiles to I3S conversion */\n inputType?: string;\n /** \"tileset.json\" file (3DTiles) / \"http://..../SceneServer/layers/0\" resource (I3S) */\n tileset?: string;\n /** Tileset name. This option is used for naming in resulting json resouces and for resulting path/*.slpk file naming */\n name?: string;\n /** Output folder. This folder will be created by converter if doesn't exist. It is relative to the converter path.\n * Default: \"data\" folder */\n output: string;\n /** 3DTiles->I3S only. location of 7z.exe archiver to create slpk on Windows OS, default: \"C:\\Program Files\\7-Zip\\7z.exe\" */\n sevenZipExe: string;\n /** location of the Earth Gravity Model (*.pgm) file to convert heights from ellipsoidal to gravity-related format,\n * default: \"./deps/egm2008-5.pgm\". A model file can be loaded from GeographicLib\n * https://geographiclib.sourceforge.io/html/geoid.html */\n egm: string;\n /** 3DTile->I3S only. Token for Cesium ION tileset authentication. */\n token?: string;\n /** 3DTiles->I3S only. Enable draco compression for geometry. Default: true */\n draco: boolean;\n /** Run the script for installing dependencies. Run this options separate from others. Now \"*.pgm\" file installation is\n * implemented */\n installDependencies: boolean;\n /** 3DTile->I3S only. Enable KTX2 textures generation if only one of (JPG, PNG) texture is provided or generate JPG texture\n * if only KTX2 is provided */\n generateTextures: boolean;\n /** 3DTile->I3S only. Will generate obb and mbs bounding volumes from geometry */\n generateBoundingVolumes: boolean;\n /** Validate the dataset during conversion. Validation messages will be posted in the console output */\n validate: boolean;\n /** Maximal depth of the hierarchical tiles tree traversal, default: infinite */\n maxDepth?: number;\n /** 3DTiles->I3S only. Whether the converter generates *.slpk (Scene Layer Package) I3S output file */\n slpk: boolean;\n};\n\n/* During validation we check that particular options are defined so they can't be undefined */\ntype ValidatedTileConversionOptions = TileConversionOptions & {\n /** \"I3S\" - for I3S to 3DTiles conversion, \"3DTILES\" for 3DTiles to I3S conversion */\n inputType: string;\n /** \"tileset.json\" file (3DTiles) / \"http://..../SceneServer/layers/0\" resource (I3S) */\n tileset: string;\n /** Tileset name. This option is used for naming in resulting json resouces and for resulting path/*.slpk file naming */\n name: string;\n};\n\nconst TILESET_TYPE = {\n I3S: 'I3S',\n _3DTILES: '3DTILES'\n};\n\n/**\n * CLI entry\n * @returns\n */\nasync function main() {\n const [, , ...args] = process.argv;\n\n if (args.length === 0) {\n printHelp();\n }\n\n const options: TileConversionOptions = parseOptions(args);\n\n if (options.installDependencies) {\n const depthInstaller = new DepsInstaller();\n depthInstaller.install('deps');\n return;\n }\n\n const validatedOptions: ValidatedTileConversionOptions = validateOptions(options);\n\n await convert(validatedOptions);\n}\n\nmain().catch((error) => {\n console.log(error);\n process.exit(1); // eslint-disable-line\n});\n\n/**\n * Output for `npx tile-converter --help`\n */\nfunction printHelp(): void {\n console.log('cli: converter 3dTiles to I3S or I3S to 3dTiles...');\n console.log(\n '--install-dependencies [Run the script for installing dependencies. Run this options separate from others. Now \"*.pgm\" file installation is implemented]'\n );\n console.log(\n '--max-depth [Maximal depth of hierarchical tiles tree traversal, default: infinite]'\n );\n console.log('--name [Tileset name]');\n console.log('--output [Output folder, default: \"data\" folder]');\n console.log('--slpk [Generate slpk (Scene Layer Packages) I3S output file]');\n console.log(\n '--tileset [tileset.json file (3DTiles) / http://..../SceneServer/layers/0 resource (I3S)]'\n );\n console.log('--input-type [tileset input type: I3S or 3DTILES]');\n console.log(\n '--7zExe [location of 7z.exe archiver to create slpk on Windows, default: \"C:\\\\Program Files\\\\7-Zip\\\\7z.exe\"]'\n );\n console.log(\n '--egm [location of Earth Gravity Model *.pgm file to convert heights from ellipsoidal to gravity-related format. A model file can be loaded from GeographicLib https://geographiclib.sourceforge.io/html/geoid.html], default: \"./deps/egm2008-5.zip\"'\n );\n console.log('--token [Token for Cesium ION tilesets authentication]');\n console.log('--no-draco [Disable draco compression for geometry]');\n console.log(\n '--generate-textures [Enable KTX2 textures generation if only one of (JPG, PNG) texture is provided or generate JPG texture if only KTX2 is provided]'\n );\n console.log(\n '--generate-bounding-volumes [Will generate obb and mbs bounding volumes from geometry]'\n );\n console.log('--validate [Enable validation]');\n process.exit(0); // eslint-disable-line\n}\n\n/**\n * Run conversion process\n * @param options validated tile-converter options\n */\nasync function convert(options: ValidatedTileConversionOptions) {\n console.log(`------------------------------------------------`); // eslint-disable-line\n console.log(`Starting conversion of ${options.inputType}`); // eslint-disable-line\n console.log(`------------------------------------------------`); // eslint-disable-line\n const inputType = options.inputType.toUpperCase();\n switch (inputType) {\n case TILESET_TYPE.I3S:\n const tiles3DConverter = new Tiles3DConverter();\n tiles3DConverter.convert({\n inputUrl: options.tileset,\n outputPath: options.output,\n tilesetName: options.name,\n maxDepth: options.maxDepth,\n egmFilePath: options.egm\n });\n break;\n case TILESET_TYPE._3DTILES:\n const converter = new I3SConverter();\n await converter.convert({\n inputUrl: options.tileset,\n outputPath: options.output,\n tilesetName: options.name,\n maxDepth: options.maxDepth,\n slpk: options.slpk,\n sevenZipExe: options.sevenZipExe,\n egmFilePath: options.egm,\n token: options.token,\n draco: options.draco,\n generateTextures: options.generateTextures,\n generateBoundingVolumes: options.generateBoundingVolumes,\n validate: options.validate\n });\n break;\n default:\n printHelp();\n }\n}\n\n// OPTIONS\n/**\n * Validate input options of the CLI command\n * @param options - input options of the CLI command\n * @returns validated options\n */\nfunction validateOptions(options: TileConversionOptions): ValidatedTileConversionOptions {\n const mandatoryOptionsWithExceptions: {\n [key: string]: () => void;\n } = {\n name: () => console.log('Missed: --name [Tileset name]'),\n output: () => console.log('Missed: --output [Output path name]'),\n sevenZipExe: () => console.log('Missed: --7zExe [7z archiver executable path]'),\n egm: () => console.log('Missed: --egm [*.pgm earth gravity model file path]'),\n tileset: () => console.log('Missed: --tileset [tileset.json file]'),\n inputType: () =>\n console.log('Missed/Incorrect: --input-type [tileset input type: I3S or 3DTILES]')\n };\n const exceptions: (() => void)[] = [];\n for (const mandatoryOption in mandatoryOptionsWithExceptions) {\n const optionValue = options[mandatoryOption];\n const isWrongInputType =\n Boolean(optionValue) &&\n mandatoryOption === 'inputType' &&\n !Object.values(TILESET_TYPE).includes(optionValue.toUpperCase());\n\n if (!optionValue || isWrongInputType) {\n exceptions.push(mandatoryOptionsWithExceptions[mandatoryOption]);\n }\n }\n if (exceptions.length) {\n exceptions.forEach((exeption) => exeption());\n process.exit(1);\n }\n return <ValidatedTileConversionOptions>options;\n}\n\n/**\n * Parse option from the cli arguments array\n * @param args\n * @returns\n */\nfunction parseOptions(args: string[]): TileConversionOptions {\n const opts: TileConversionOptions = {\n output: 'data',\n sevenZipExe: 'C:\\\\Program Files\\\\7-Zip\\\\7z.exe',\n egm: join(process.cwd(), 'deps', 'egm2008-5.pgm'),\n draco: true,\n installDependencies: false,\n generateTextures: false,\n generateBoundingVolumes: false,\n validate: false,\n slpk: false\n };\n\n // eslint-disable-next-line complexity\n args.forEach((arg, index) => {\n if (arg.indexOf('--') === 0) {\n switch (arg) {\n case '--input-type':\n opts.inputType = getStringValue(index, args);\n break;\n case '--tileset':\n opts.tileset = getURLValue(index, args);\n break;\n case '--name':\n opts.name = getStringValue(index, args);\n break;\n case '--output':\n opts.output = getStringValue(index, args);\n break;\n case '--max-depth':\n opts.maxDepth = getIntegerValue(index, args);\n break;\n case '--slpk':\n opts.slpk = true;\n break;\n case '--7zExe':\n opts.sevenZipExe = getStringValue(index, args);\n break;\n case '--egm':\n opts.egm = getStringValue(index, args);\n break;\n case '--token':\n opts.token = getStringValue(index, args);\n break;\n case '--no-draco':\n opts.draco = false;\n break;\n case '--validate':\n opts.validate = true;\n break;\n case '--install-dependencies':\n opts.installDependencies = true;\n break;\n case '--generate-textures':\n opts.generateTextures = true;\n break;\n case '--generate-bounding-volumes':\n opts.generateBoundingVolumes = true;\n break;\n case '--help':\n printHelp();\n break;\n default:\n console.warn(`Unknown option ${arg}`);\n process.exit(0); // eslint-disable-line\n }\n }\n });\n return opts;\n}\n\n/**\n * Get string option value from cli arguments\n * @param index - option's name index in the argument's array.\n * The value of the option should be next to name of the option.\n * @param args - cli arguments array\n * @returns - string value of the option\n */\nfunction getStringValue(index: number, args: string[]): string {\n if (index + 1 >= args.length) {\n return '';\n }\n const value = args[index + 1];\n if (value.indexOf('--') === 0) {\n return '';\n }\n return value;\n}\n\n/**\n * Modyfy URL path to be compatible with fetch\n * @param index - option's name index in the argument's array.\n * The value of the option should be next to name of the option.\n * @param args - cli arguments array\n * @returns - string value of the option\n */\nfunction getURLValue(index: number, args: string[]): string {\n const value = getStringValue(index, args);\n console.log(`Input tileset value: ${value}`);\n console.log(`Modified tileset value: ${value.replace(/\\\\/g, '/')}`);\n return value.replace(/\\\\/g, '/');\n}\n\n/**\n * Get integer option value from cli arguments\n * @param index - option's name index in the argument's array\n * The value of the option should be next to name of the option.\n * @param args - cli arguments array\n * @returns - number value of the option\n */\nfunction getIntegerValue(index: number, args: string[]): number {\n const stringValue: string = getStringValue(index, args);\n const result: number = Number.parseInt(stringValue);\n if (isFinite(result)) {\n return result;\n }\n return NaN;\n}\n"],"file":"converter-cli.js"}
@@ -8,7 +8,7 @@ exports._typecheckI3SAttributesWorker = exports.I3SAttributesWorker = void 0;
8
8
 
9
9
  var _workerUtils = require("@loaders.gl/worker-utils");
10
10
 
11
- var VERSION = typeof "3.2.9" !== 'undefined' ? "3.2.9" : 'latest';
11
+ var VERSION = typeof "3.2.11" !== 'undefined' ? "3.2.11" : 'latest';
12
12
  var I3SAttributesWorker = {
13
13
  id: 'i3s-attributes',
14
14
  name: 'I3S Attributes Worker',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/i3s-attributes-worker.ts"],"names":["VERSION","I3SAttributesWorker","id","name","module","version","options","useCartesianPositions","transformI3SAttributesOnWorker","attributesData","_typecheckI3SAttributesWorker"],"mappings":";;;;;;;;AAIA;;AAIA,IAAMA,OAAO,GAAG,mBAAuB,WAAvB,aAAmD,QAAnE;AAiBO,IAAMC,mBAAmB,GAAG;AACjCC,EAAAA,EAAE,EAAE,gBAD6B;AAEjCC,EAAAA,IAAI,EAAE,uBAF2B;AAGjCC,EAAAA,MAAM,EAAE,gBAHyB;AAIjCC,EAAAA,OAAO,EAAEL,OAJwB;AAKjCM,EAAAA,OAAO,EAAE;AACPC,IAAAA,qBAAqB,EAAE;AADhB;AALwB,CAA5B;;;AAaA,SAASC,8BAAT,CACLC,cADK,EAELH,OAFK,EAGsC;AAC3C,SAAO,kCAAgBL,mBAAhB,EAAqCQ,cAArC,EAAqDH,OAArD,CAAP;AACD;;AAEM,IAAMI,6BAA2C,GAAGT,mBAApD","sourcesContent":["import type {WorkerObject} from '@loaders.gl/worker-utils';\nimport type {ConvertedAttributes} from './i3s-converter/types';\nimport type {Matrix4, Vector3} from '@math.gl/core';\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 I3SAttributesWorkerOptions = {\n useCartesianPositions: boolean;\n source: string;\n};\n\nexport type B3DMAttributesData = {\n gltfMaterials?: {id: string}[];\n nodes: any;\n cartographicOrigin: Vector3;\n cartesianModelMatrix: Matrix4;\n};\n\n/**\n * I3S Attributes Worker to handle B3DM object\n */\nexport const I3SAttributesWorker = {\n id: 'i3s-attributes',\n name: 'I3S Attributes Worker',\n module: 'tile-converter',\n version: VERSION,\n options: {\n useCartesianPositions: false\n }\n};\n\n/**\n * Performs I3S attributes transformation\n */\nexport function transformI3SAttributesOnWorker(\n attributesData: B3DMAttributesData,\n options: I3SAttributesWorkerOptions\n): Promise<Map<string, ConvertedAttributes>> {\n return processOnWorker(I3SAttributesWorker, attributesData, options);\n}\n\nexport const _typecheckI3SAttributesWorker: WorkerObject = I3SAttributesWorker;\n"],"file":"i3s-attributes-worker.js"}
1
+ {"version":3,"sources":["../../src/i3s-attributes-worker.ts"],"names":["VERSION","I3SAttributesWorker","id","name","module","version","options","useCartesianPositions","transformI3SAttributesOnWorker","attributesData","_typecheckI3SAttributesWorker"],"mappings":";;;;;;;;AAIA;;AAIA,IAAMA,OAAO,GAAG,oBAAuB,WAAvB,cAAmD,QAAnE;AAiBO,IAAMC,mBAAmB,GAAG;AACjCC,EAAAA,EAAE,EAAE,gBAD6B;AAEjCC,EAAAA,IAAI,EAAE,uBAF2B;AAGjCC,EAAAA,MAAM,EAAE,gBAHyB;AAIjCC,EAAAA,OAAO,EAAEL,OAJwB;AAKjCM,EAAAA,OAAO,EAAE;AACPC,IAAAA,qBAAqB,EAAE;AADhB;AALwB,CAA5B;;;AAaA,SAASC,8BAAT,CACLC,cADK,EAELH,OAFK,EAGsC;AAC3C,SAAO,kCAAgBL,mBAAhB,EAAqCQ,cAArC,EAAqDH,OAArD,CAAP;AACD;;AAEM,IAAMI,6BAA2C,GAAGT,mBAApD","sourcesContent":["import type {WorkerObject} from '@loaders.gl/worker-utils';\nimport type {ConvertedAttributes} from './i3s-converter/types';\nimport type {Matrix4, Vector3} from '@math.gl/core';\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 I3SAttributesWorkerOptions = {\n useCartesianPositions: boolean;\n source: string;\n};\n\nexport type B3DMAttributesData = {\n gltfMaterials?: {id: string}[];\n nodes: any;\n cartographicOrigin: Vector3;\n cartesianModelMatrix: Matrix4;\n};\n\n/**\n * I3S Attributes Worker to handle B3DM object\n */\nexport const I3SAttributesWorker = {\n id: 'i3s-attributes',\n name: 'I3S Attributes Worker',\n module: 'tile-converter',\n version: VERSION,\n options: {\n useCartesianPositions: false\n }\n};\n\n/**\n * Performs I3S attributes transformation\n */\nexport function transformI3SAttributesOnWorker(\n attributesData: B3DMAttributesData,\n options: I3SAttributesWorkerOptions\n): Promise<Map<string, ConvertedAttributes>> {\n return processOnWorker(I3SAttributesWorker, attributesData, options);\n}\n\nexport const _typecheckI3SAttributesWorker: WorkerObject = I3SAttributesWorker;\n"],"file":"i3s-attributes-worker.js"}
@@ -94,12 +94,12 @@ function convertBoundingVolumeToI3SFullExtent(boundingVolume) {
94
94
  var vertexMin = _geospatial.Ellipsoid.WGS84.cartesianToCartographic(new _core.Vector3(center[0] - radius, center[1] - radius, center[2] - radius), new _core.Vector3());
95
95
 
96
96
  return {
97
- xmin: vertexMin[0],
98
- xmax: vertexMax[0],
99
- ymin: vertexMin[1],
100
- ymax: vertexMax[1],
101
- zmin: vertexMin[2],
102
- zmax: vertexMax[2]
97
+ xmin: Math.min(vertexMin[0], vertexMax[0]),
98
+ xmax: Math.max(vertexMin[0], vertexMax[0]),
99
+ ymin: Math.min(vertexMin[1], vertexMax[1]),
100
+ ymax: Math.max(vertexMin[1], vertexMax[1]),
101
+ zmin: Math.min(vertexMin[2], vertexMax[2]),
102
+ zmax: Math.max(vertexMin[2], vertexMax[2])
103
103
  };
104
104
  }
105
105
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/i3s-converter/helpers/coordinate-converter.ts"],"names":["createBoundingVolumes","tile","geoidHeightModel","radius","halfSize","quaternion","boundingVolume","cartographicCenter","Ellipsoid","WGS84","cartesianToCartographic","center","Vector3","getHeight","OrientedBoundingBox","len","Quaternion","fromMatrix3","Matrix3","normalize","mbs","obb","createBoundingVolumesFromGeometry","cartesianPositions","positionVectors","convertPositionsToVectors","geometryObb","geometryMbs","mbsCenter","obbCenter","positions","result","i","length","positionVector","push","convertBoundingVolumeToI3SFullExtent","sphere","BoundingSphere","getBoundingSphere","vertexMax","vertexMin","xmin","xmax","ymin","ymax","zmin","zmax","createObbFromMbs","halfAxex"],"mappings":"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","sourcesContent":["import type {BoundingVolumes, FullExtent, Mbs, Obb} from '@loaders.gl/i3s';\n\nimport {Matrix3, Quaternion, Vector3} from '@math.gl/core';\nimport {Ellipsoid} from '@math.gl/geospatial';\nimport {\n OrientedBoundingBox,\n makeOrientedBoundingBoxFromPoints,\n makeBoundingSphereFromPoints,\n BoundingSphere\n} from '@math.gl/culling';\nimport TileHeader from '@loaders.gl/tiles/src/tileset/tile-3d';\nimport {Geoid} from '@math.gl/geoid';\n\n/**\n * Create bounding volumes object from tile and geoid height model.\n * @param tile\n * @param geoidHeightModel\n * @returns - Bounding volumes object\n */\nexport function createBoundingVolumes(tile: TileHeader, geoidHeightModel: Geoid): BoundingVolumes {\n let radius;\n let halfSize;\n let quaternion;\n\n const boundingVolume = tile.boundingVolume;\n const cartographicCenter = Ellipsoid.WGS84.cartesianToCartographic(\n boundingVolume.center,\n new Vector3()\n );\n cartographicCenter[2] =\n cartographicCenter[2] -\n geoidHeightModel.getHeight(cartographicCenter[1], cartographicCenter[0]);\n if (boundingVolume instanceof OrientedBoundingBox) {\n halfSize = boundingVolume.halfSize;\n radius = new Vector3(halfSize[0], halfSize[1], halfSize[2]).len();\n quaternion = boundingVolume.quaternion;\n } else {\n radius = tile.boundingVolume.radius;\n halfSize = [radius, radius, radius];\n quaternion = new Quaternion()\n .fromMatrix3(new Matrix3([halfSize[0], 0, 0, 0, halfSize[1], 0, 0, 0, halfSize[2]]))\n .normalize();\n }\n\n return {\n mbs: [cartographicCenter[0], cartographicCenter[1], cartographicCenter[2], radius],\n obb: {\n center: [cartographicCenter[0], cartographicCenter[1], cartographicCenter[2]],\n halfSize,\n quaternion\n }\n };\n}\n\n/**\n * Generates bounding volumes from geometry positions\n * @param cartesianPositions\n * @param geoidHeightModel\n */\nexport function createBoundingVolumesFromGeometry(\n cartesianPositions: Float32Array,\n geoidHeightModel: Geoid\n): {mbs: Mbs; obb: Obb} {\n const positionVectors = convertPositionsToVectors(cartesianPositions);\n\n const geometryObb = makeOrientedBoundingBoxFromPoints(positionVectors);\n const geometryMbs = makeBoundingSphereFromPoints(positionVectors);\n\n let mbsCenter = Ellipsoid.WGS84.cartesianToCartographic(geometryMbs.center, new Vector3());\n let obbCenter = Ellipsoid.WGS84.cartesianToCartographic(geometryObb.center, new Vector3());\n\n mbsCenter[2] = mbsCenter[2] - geoidHeightModel.getHeight(mbsCenter[1], mbsCenter[0]);\n obbCenter[2] = obbCenter[2] - geoidHeightModel.getHeight(obbCenter[1], obbCenter[0]);\n\n return {\n mbs: [mbsCenter[0], mbsCenter[1], mbsCenter[2], geometryMbs.radius],\n obb: {\n center: obbCenter,\n halfSize: geometryObb.halfSize,\n quaternion: geometryObb.quaternion\n }\n };\n}\n\n/**\n * Create array of posisitons where each vertex is vector\n * @param {array} positions\n * @returns {Vector3[]}\n */\nexport function convertPositionsToVectors(positions: Float32Array): Vector3[] {\n const result: Vector3[] = [];\n\n for (let i = 0; i < positions.length; i += 3) {\n // TODO: (perf) new Vector3 is not optimal but required in `makeOrientedBoundingBoxFromPoints`.\n // modify `makeOrientedBoundingBoxFromPoints` to use scratch vectors\n const positionVector = new Vector3([positions[i], positions[i + 1], positions[i + 2]]);\n result.push(positionVector);\n }\n\n return result;\n}\n\n/**\n * Convert common coordinate to fullExtent https://github.com/Esri/i3s-spec/blob/master/docs/1.8/fullExtent.cmn.md\n * @param\n * @param boundingVolume\n * @returns - fullExtent object\n */\nexport function convertBoundingVolumeToI3SFullExtent(\n boundingVolume: OrientedBoundingBox | BoundingSphere\n): FullExtent {\n let sphere: BoundingSphere;\n if (boundingVolume instanceof BoundingSphere) {\n sphere = boundingVolume;\n } else {\n sphere = boundingVolume.getBoundingSphere();\n }\n const center: Vector3 = sphere.center;\n const radius: number = sphere.radius;\n const vertexMax = Ellipsoid.WGS84.cartesianToCartographic(\n new Vector3(center[0] + radius, center[1] + radius, center[2] + radius),\n new Vector3()\n );\n const vertexMin = Ellipsoid.WGS84.cartesianToCartographic(\n new Vector3(center[0] - radius, center[1] - radius, center[2] - radius),\n new Vector3()\n );\n\n return {\n xmin: vertexMin[0],\n xmax: vertexMax[0],\n ymin: vertexMin[1],\n ymax: vertexMax[1],\n zmin: vertexMin[2],\n zmax: vertexMax[2]\n };\n}\n\n/**\n * Creates oriented boundinb box from mbs.\n * @param mbs - Minimum Bounding Sphere\n * @returns - Oriented BOunding Box\n */\nexport function createObbFromMbs(mbs: Mbs): Obb {\n const radius = mbs[3];\n const center = new Vector3(mbs[0], mbs[1], mbs[2]);\n const halfAxex = new Matrix3([radius, 0, 0, 0, radius, 0, 0, 0, radius]);\n return new OrientedBoundingBox(center, halfAxex);\n}\n"],"file":"coordinate-converter.js"}
1
+ {"version":3,"sources":["../../../../src/i3s-converter/helpers/coordinate-converter.ts"],"names":["createBoundingVolumes","tile","geoidHeightModel","radius","halfSize","quaternion","boundingVolume","cartographicCenter","Ellipsoid","WGS84","cartesianToCartographic","center","Vector3","getHeight","OrientedBoundingBox","len","Quaternion","fromMatrix3","Matrix3","normalize","mbs","obb","createBoundingVolumesFromGeometry","cartesianPositions","positionVectors","convertPositionsToVectors","geometryObb","geometryMbs","mbsCenter","obbCenter","positions","result","i","length","positionVector","push","convertBoundingVolumeToI3SFullExtent","sphere","BoundingSphere","getBoundingSphere","vertexMax","vertexMin","xmin","Math","min","xmax","max","ymin","ymax","zmin","zmax","createObbFromMbs","halfAxex"],"mappings":";;;;;;;;;;;AAEA;;AACA;;AACA;;AAeO,SAASA,qBAAT,CAA+BC,IAA/B,EAAiDC,gBAAjD,EAA2F;AAChG,MAAIC,MAAJ;AACA,MAAIC,QAAJ;AACA,MAAIC,UAAJ;AAEA,MAAMC,cAAc,GAAGL,IAAI,CAACK,cAA5B;;AACA,MAAMC,kBAAkB,GAAGC,sBAAUC,KAAV,CAAgBC,uBAAhB,CACzBJ,cAAc,CAACK,MADU,EAEzB,IAAIC,aAAJ,EAFyB,CAA3B;;AAIAL,EAAAA,kBAAkB,CAAC,CAAD,CAAlB,GACEA,kBAAkB,CAAC,CAAD,CAAlB,GACAL,gBAAgB,CAACW,SAAjB,CAA2BN,kBAAkB,CAAC,CAAD,CAA7C,EAAkDA,kBAAkB,CAAC,CAAD,CAApE,CAFF;;AAGA,MAAID,cAAc,YAAYQ,4BAA9B,EAAmD;AACjDV,IAAAA,QAAQ,GAAGE,cAAc,CAACF,QAA1B;AACAD,IAAAA,MAAM,GAAG,IAAIS,aAAJ,CAAYR,QAAQ,CAAC,CAAD,CAApB,EAAyBA,QAAQ,CAAC,CAAD,CAAjC,EAAsCA,QAAQ,CAAC,CAAD,CAA9C,EAAmDW,GAAnD,EAAT;AACAV,IAAAA,UAAU,GAAGC,cAAc,CAACD,UAA5B;AACD,GAJD,MAIO;AACLF,IAAAA,MAAM,GAAGF,IAAI,CAACK,cAAL,CAAoBH,MAA7B;AACAC,IAAAA,QAAQ,GAAG,CAACD,MAAD,EAASA,MAAT,EAAiBA,MAAjB,CAAX;AACAE,IAAAA,UAAU,GAAG,IAAIW,gBAAJ,GACVC,WADU,CACE,IAAIC,aAAJ,CAAY,CAACd,QAAQ,CAAC,CAAD,CAAT,EAAc,CAAd,EAAiB,CAAjB,EAAoB,CAApB,EAAuBA,QAAQ,CAAC,CAAD,CAA/B,EAAoC,CAApC,EAAuC,CAAvC,EAA0C,CAA1C,EAA6CA,QAAQ,CAAC,CAAD,CAArD,CAAZ,CADF,EAEVe,SAFU,EAAb;AAGD;;AAED,SAAO;AACLC,IAAAA,GAAG,EAAE,CAACb,kBAAkB,CAAC,CAAD,CAAnB,EAAwBA,kBAAkB,CAAC,CAAD,CAA1C,EAA+CA,kBAAkB,CAAC,CAAD,CAAjE,EAAsEJ,MAAtE,CADA;AAELkB,IAAAA,GAAG,EAAE;AACHV,MAAAA,MAAM,EAAE,CAACJ,kBAAkB,CAAC,CAAD,CAAnB,EAAwBA,kBAAkB,CAAC,CAAD,CAA1C,EAA+CA,kBAAkB,CAAC,CAAD,CAAjE,CADL;AAEHH,MAAAA,QAAQ,EAARA,QAFG;AAGHC,MAAAA,UAAU,EAAVA;AAHG;AAFA,GAAP;AAQD;;AAOM,SAASiB,iCAAT,CACLC,kBADK,EAELrB,gBAFK,EAGiB;AACtB,MAAMsB,eAAe,GAAGC,yBAAyB,CAACF,kBAAD,CAAjD;AAEA,MAAMG,WAAW,GAAG,gDAAkCF,eAAlC,CAApB;AACA,MAAMG,WAAW,GAAG,2CAA6BH,eAA7B,CAApB;;AAEA,MAAII,SAAS,GAAGpB,sBAAUC,KAAV,CAAgBC,uBAAhB,CAAwCiB,WAAW,CAAChB,MAApD,EAA4D,IAAIC,aAAJ,EAA5D,CAAhB;;AACA,MAAIiB,SAAS,GAAGrB,sBAAUC,KAAV,CAAgBC,uBAAhB,CAAwCgB,WAAW,CAACf,MAApD,EAA4D,IAAIC,aAAJ,EAA5D,CAAhB;;AAEAgB,EAAAA,SAAS,CAAC,CAAD,CAAT,GAAeA,SAAS,CAAC,CAAD,CAAT,GAAe1B,gBAAgB,CAACW,SAAjB,CAA2Be,SAAS,CAAC,CAAD,CAApC,EAAyCA,SAAS,CAAC,CAAD,CAAlD,CAA9B;AACAC,EAAAA,SAAS,CAAC,CAAD,CAAT,GAAeA,SAAS,CAAC,CAAD,CAAT,GAAe3B,gBAAgB,CAACW,SAAjB,CAA2BgB,SAAS,CAAC,CAAD,CAApC,EAAyCA,SAAS,CAAC,CAAD,CAAlD,CAA9B;AAEA,SAAO;AACLT,IAAAA,GAAG,EAAE,CAACQ,SAAS,CAAC,CAAD,CAAV,EAAeA,SAAS,CAAC,CAAD,CAAxB,EAA6BA,SAAS,CAAC,CAAD,CAAtC,EAA2CD,WAAW,CAACxB,MAAvD,CADA;AAELkB,IAAAA,GAAG,EAAE;AACHV,MAAAA,MAAM,EAAEkB,SADL;AAEHzB,MAAAA,QAAQ,EAAEsB,WAAW,CAACtB,QAFnB;AAGHC,MAAAA,UAAU,EAAEqB,WAAW,CAACrB;AAHrB;AAFA,GAAP;AAQD;;AAOM,SAASoB,yBAAT,CAAmCK,SAAnC,EAAuE;AAC5E,MAAMC,MAAiB,GAAG,EAA1B;;AAEA,OAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGF,SAAS,CAACG,MAA9B,EAAsCD,CAAC,IAAI,CAA3C,EAA8C;AAG5C,QAAME,cAAc,GAAG,IAAItB,aAAJ,CAAY,CAACkB,SAAS,CAACE,CAAD,CAAV,EAAeF,SAAS,CAACE,CAAC,GAAG,CAAL,CAAxB,EAAiCF,SAAS,CAACE,CAAC,GAAG,CAAL,CAA1C,CAAZ,CAAvB;AACAD,IAAAA,MAAM,CAACI,IAAP,CAAYD,cAAZ;AACD;;AAED,SAAOH,MAAP;AACD;;AAQM,SAASK,oCAAT,CACL9B,cADK,EAEO;AACZ,MAAI+B,MAAJ;;AACA,MAAI/B,cAAc,YAAYgC,uBAA9B,EAA8C;AAC5CD,IAAAA,MAAM,GAAG/B,cAAT;AACD,GAFD,MAEO;AACL+B,IAAAA,MAAM,GAAG/B,cAAc,CAACiC,iBAAf,EAAT;AACD;;AACD,MAAM5B,MAAe,GAAG0B,MAAM,CAAC1B,MAA/B;AACA,MAAMR,MAAc,GAAGkC,MAAM,CAAClC,MAA9B;;AACA,MAAMqC,SAAS,GAAGhC,sBAAUC,KAAV,CAAgBC,uBAAhB,CAChB,IAAIE,aAAJ,CAAYD,MAAM,CAAC,CAAD,CAAN,GAAYR,MAAxB,EAAgCQ,MAAM,CAAC,CAAD,CAAN,GAAYR,MAA5C,EAAoDQ,MAAM,CAAC,CAAD,CAAN,GAAYR,MAAhE,CADgB,EAEhB,IAAIS,aAAJ,EAFgB,CAAlB;;AAIA,MAAM6B,SAAS,GAAGjC,sBAAUC,KAAV,CAAgBC,uBAAhB,CAChB,IAAIE,aAAJ,CAAYD,MAAM,CAAC,CAAD,CAAN,GAAYR,MAAxB,EAAgCQ,MAAM,CAAC,CAAD,CAAN,GAAYR,MAA5C,EAAoDQ,MAAM,CAAC,CAAD,CAAN,GAAYR,MAAhE,CADgB,EAEhB,IAAIS,aAAJ,EAFgB,CAAlB;;AAOA,SAAO;AACL8B,IAAAA,IAAI,EAAEC,IAAI,CAACC,GAAL,CAASH,SAAS,CAAC,CAAD,CAAlB,EAAuBD,SAAS,CAAC,CAAD,CAAhC,CADD;AAELK,IAAAA,IAAI,EAAEF,IAAI,CAACG,GAAL,CAASL,SAAS,CAAC,CAAD,CAAlB,EAAuBD,SAAS,CAAC,CAAD,CAAhC,CAFD;AAGLO,IAAAA,IAAI,EAAEJ,IAAI,CAACC,GAAL,CAASH,SAAS,CAAC,CAAD,CAAlB,EAAuBD,SAAS,CAAC,CAAD,CAAhC,CAHD;AAILQ,IAAAA,IAAI,EAAEL,IAAI,CAACG,GAAL,CAASL,SAAS,CAAC,CAAD,CAAlB,EAAuBD,SAAS,CAAC,CAAD,CAAhC,CAJD;AAKLS,IAAAA,IAAI,EAAEN,IAAI,CAACC,GAAL,CAASH,SAAS,CAAC,CAAD,CAAlB,EAAuBD,SAAS,CAAC,CAAD,CAAhC,CALD;AAMLU,IAAAA,IAAI,EAAEP,IAAI,CAACG,GAAL,CAASL,SAAS,CAAC,CAAD,CAAlB,EAAuBD,SAAS,CAAC,CAAD,CAAhC;AAND,GAAP;AAQD;;AAOM,SAASW,gBAAT,CAA0B/B,GAA1B,EAAyC;AAC9C,MAAMjB,MAAM,GAAGiB,GAAG,CAAC,CAAD,CAAlB;AACA,MAAMT,MAAM,GAAG,IAAIC,aAAJ,CAAYQ,GAAG,CAAC,CAAD,CAAf,EAAoBA,GAAG,CAAC,CAAD,CAAvB,EAA4BA,GAAG,CAAC,CAAD,CAA/B,CAAf;AACA,MAAMgC,QAAQ,GAAG,IAAIlC,aAAJ,CAAY,CAACf,MAAD,EAAS,CAAT,EAAY,CAAZ,EAAe,CAAf,EAAkBA,MAAlB,EAA0B,CAA1B,EAA6B,CAA7B,EAAgC,CAAhC,EAAmCA,MAAnC,CAAZ,CAAjB;AACA,SAAO,IAAIW,4BAAJ,CAAwBH,MAAxB,EAAgCyC,QAAhC,CAAP;AACD","sourcesContent":["import type {BoundingVolumes, FullExtent, Mbs, Obb} from '@loaders.gl/i3s';\n\nimport {Matrix3, Quaternion, Vector3} from '@math.gl/core';\nimport {Ellipsoid} from '@math.gl/geospatial';\nimport {\n OrientedBoundingBox,\n makeOrientedBoundingBoxFromPoints,\n makeBoundingSphereFromPoints,\n BoundingSphere\n} from '@math.gl/culling';\nimport TileHeader from '@loaders.gl/tiles/src/tileset/tile-3d';\nimport {Geoid} from '@math.gl/geoid';\n\n/**\n * Create bounding volumes object from tile and geoid height model.\n * @param tile\n * @param geoidHeightModel\n * @returns - Bounding volumes object\n */\nexport function createBoundingVolumes(tile: TileHeader, geoidHeightModel: Geoid): BoundingVolumes {\n let radius;\n let halfSize;\n let quaternion;\n\n const boundingVolume = tile.boundingVolume;\n const cartographicCenter = Ellipsoid.WGS84.cartesianToCartographic(\n boundingVolume.center,\n new Vector3()\n );\n cartographicCenter[2] =\n cartographicCenter[2] -\n geoidHeightModel.getHeight(cartographicCenter[1], cartographicCenter[0]);\n if (boundingVolume instanceof OrientedBoundingBox) {\n halfSize = boundingVolume.halfSize;\n radius = new Vector3(halfSize[0], halfSize[1], halfSize[2]).len();\n quaternion = boundingVolume.quaternion;\n } else {\n radius = tile.boundingVolume.radius;\n halfSize = [radius, radius, radius];\n quaternion = new Quaternion()\n .fromMatrix3(new Matrix3([halfSize[0], 0, 0, 0, halfSize[1], 0, 0, 0, halfSize[2]]))\n .normalize();\n }\n\n return {\n mbs: [cartographicCenter[0], cartographicCenter[1], cartographicCenter[2], radius],\n obb: {\n center: [cartographicCenter[0], cartographicCenter[1], cartographicCenter[2]],\n halfSize,\n quaternion\n }\n };\n}\n\n/**\n * Generates bounding volumes from geometry positions\n * @param cartesianPositions\n * @param geoidHeightModel\n */\nexport function createBoundingVolumesFromGeometry(\n cartesianPositions: Float32Array,\n geoidHeightModel: Geoid\n): {mbs: Mbs; obb: Obb} {\n const positionVectors = convertPositionsToVectors(cartesianPositions);\n\n const geometryObb = makeOrientedBoundingBoxFromPoints(positionVectors);\n const geometryMbs = makeBoundingSphereFromPoints(positionVectors);\n\n let mbsCenter = Ellipsoid.WGS84.cartesianToCartographic(geometryMbs.center, new Vector3());\n let obbCenter = Ellipsoid.WGS84.cartesianToCartographic(geometryObb.center, new Vector3());\n\n mbsCenter[2] = mbsCenter[2] - geoidHeightModel.getHeight(mbsCenter[1], mbsCenter[0]);\n obbCenter[2] = obbCenter[2] - geoidHeightModel.getHeight(obbCenter[1], obbCenter[0]);\n\n return {\n mbs: [mbsCenter[0], mbsCenter[1], mbsCenter[2], geometryMbs.radius],\n obb: {\n center: obbCenter,\n halfSize: geometryObb.halfSize,\n quaternion: geometryObb.quaternion\n }\n };\n}\n\n/**\n * Create array of posisitons where each vertex is vector\n * @param {array} positions\n * @returns {Vector3[]}\n */\nexport function convertPositionsToVectors(positions: Float32Array): Vector3[] {\n const result: Vector3[] = [];\n\n for (let i = 0; i < positions.length; i += 3) {\n // TODO: (perf) new Vector3 is not optimal but required in `makeOrientedBoundingBoxFromPoints`.\n // modify `makeOrientedBoundingBoxFromPoints` to use scratch vectors\n const positionVector = new Vector3([positions[i], positions[i + 1], positions[i + 2]]);\n result.push(positionVector);\n }\n\n return result;\n}\n\n/**\n * Convert common coordinate to fullExtent https://github.com/Esri/i3s-spec/blob/master/docs/1.8/fullExtent.cmn.md\n * @param\n * @param boundingVolume\n * @returns - fullExtent object\n */\nexport function convertBoundingVolumeToI3SFullExtent(\n boundingVolume: OrientedBoundingBox | BoundingSphere\n): FullExtent {\n let sphere: BoundingSphere;\n if (boundingVolume instanceof BoundingSphere) {\n sphere = boundingVolume;\n } else {\n sphere = boundingVolume.getBoundingSphere();\n }\n const center: Vector3 = sphere.center;\n const radius: number = sphere.radius;\n const vertexMax = Ellipsoid.WGS84.cartesianToCartographic(\n new Vector3(center[0] + radius, center[1] + radius, center[2] + radius),\n new Vector3()\n );\n const vertexMin = Ellipsoid.WGS84.cartesianToCartographic(\n new Vector3(center[0] - radius, center[1] - radius, center[2] - radius),\n new Vector3()\n );\n\n // Converter sometimes returns min values that are bigger then max,\n // so we should check and take bigger value from max and smaller for nim\n return {\n xmin: Math.min(vertexMin[0], vertexMax[0]),\n xmax: Math.max(vertexMin[0], vertexMax[0]),\n ymin: Math.min(vertexMin[1], vertexMax[1]),\n ymax: Math.max(vertexMin[1], vertexMax[1]),\n zmin: Math.min(vertexMin[2], vertexMax[2]),\n zmax: Math.max(vertexMin[2], vertexMax[2])\n };\n}\n\n/**\n * Creates oriented boundinb box from mbs.\n * @param mbs - Minimum Bounding Sphere\n * @returns - Oriented BOunding Box\n */\nexport function createObbFromMbs(mbs: Mbs): Obb {\n const radius = mbs[3];\n const center = new Vector3(mbs[0], mbs[1], mbs[2]);\n const halfAxex = new Matrix3([radius, 0, 0, 0, radius, 0, 0, 0, radius]);\n return new OrientedBoundingBox(center, halfAxex);\n}\n"],"file":"coordinate-converter.js"}
@@ -148,7 +148,8 @@ var I3SConverter = function () {
148
148
  key: "convert",
149
149
  value: function () {
150
150
  var _convert = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(options) {
151
- var tilesetName, slpk, egmFilePath, inputUrl, validate, outputPath, draco, sevenZipExe, maxDepth, token, generateTextures, generateBoundingVolumes, preloadOptions, tilesetOptions, sourceTilesetJson, workerFarm;
151
+ var tilesetName, slpk, egmFilePath, inputUrl, validate, outputPath, draco, sevenZipExe, maxDepth, token, generateTextures, generateBoundingVolumes, _sourceTilesetJson$ro, _sourceTilesetJson$ro2, preloadOptions, tilesetOptions, sourceTilesetJson, workerFarm;
152
+
152
153
  return _regenerator.default.wrap(function _callee$(_context) {
153
154
  while (1) {
154
155
  switch (_context.prev = _context.next) {
@@ -223,7 +224,7 @@ var I3SConverter = function () {
223
224
  sourceTilesetJson = _context.sent;
224
225
  this.sourceTileset = new _tiles.Tileset3D(sourceTilesetJson, tilesetOptions);
225
226
  _context.next = 33;
226
- return this._createAndSaveTileset(outputPath, tilesetName);
227
+ return this._createAndSaveTileset(outputPath, tilesetName, sourceTilesetJson === null || sourceTilesetJson === void 0 ? void 0 : (_sourceTilesetJson$ro = sourceTilesetJson.root) === null || _sourceTilesetJson$ro === void 0 ? void 0 : (_sourceTilesetJson$ro2 = _sourceTilesetJson$ro.boundingVolume) === null || _sourceTilesetJson$ro2 === void 0 ? void 0 : _sourceTilesetJson$ro2.region);
227
228
 
228
229
  case 33:
229
230
  _context.next = 35;
@@ -264,7 +265,7 @@ var I3SConverter = function () {
264
265
  }, {
265
266
  key: "_createAndSaveTileset",
266
267
  value: function () {
267
- var _createAndSaveTileset2 = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee2(outputPath, tilesetName) {
268
+ var _createAndSaveTileset2 = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee2(outputPath, tilesetName, boundingVolumeRegion) {
268
269
  var tilesetPath, sourceRootTile, boundingVolumes, parentId, isCreateSlpk, root0;
269
270
  return _regenerator.default.wrap(function _callee2$(_context2) {
270
271
  while (1) {
@@ -286,7 +287,7 @@ var I3SConverter = function () {
286
287
  case 8:
287
288
  this.layers0Path = (0, _path.join)(tilesetPath, 'SceneServer', 'layers', '0');
288
289
 
289
- this._formLayers0(tilesetName);
290
+ this._formLayers0(tilesetName, boundingVolumeRegion);
290
291
 
291
292
  this.materialDefinitions = [];
292
293
  this.materialMap = new Map();
@@ -340,7 +341,7 @@ var I3SConverter = function () {
340
341
  }, _callee2, this, [[1, 6]]);
341
342
  }));
342
343
 
343
- function _createAndSaveTileset(_x2, _x3) {
344
+ function _createAndSaveTileset(_x2, _x3, _x4) {
344
345
  return _createAndSaveTileset2.apply(this, arguments);
345
346
  }
346
347
 
@@ -348,10 +349,16 @@ var I3SConverter = function () {
348
349
  }()
349
350
  }, {
350
351
  key: "_formLayers0",
351
- value: function _formLayers0(tilesetName) {
352
+ value: function _formLayers0(tilesetName, boundingVolumeRegion) {
352
353
  var _this$sourceTileset, _this$sourceTileset2, _this$sourceTileset2$;
353
354
 
354
355
  var fullExtent = (0, _coordinateConverter.convertBoundingVolumeToI3SFullExtent)(((_this$sourceTileset = this.sourceTileset) === null || _this$sourceTileset === void 0 ? void 0 : _this$sourceTileset.boundingVolume) || ((_this$sourceTileset2 = this.sourceTileset) === null || _this$sourceTileset2 === void 0 ? void 0 : (_this$sourceTileset2$ = _this$sourceTileset2.root) === null || _this$sourceTileset2$ === void 0 ? void 0 : _this$sourceTileset2$.boundingVolume));
356
+
357
+ if (boundingVolumeRegion) {
358
+ fullExtent.zmin = boundingVolumeRegion[4];
359
+ fullExtent.zmax = boundingVolumeRegion[5];
360
+ }
361
+
355
362
  var extent = [fullExtent.xmin, fullExtent.ymin, fullExtent.xmax, fullExtent.ymax];
356
363
  var layers0data = {
357
364
  version: "{".concat((0, _uuid.v4)().toUpperCase(), "}"),
@@ -469,7 +476,7 @@ var I3SConverter = function () {
469
476
  }, _callee3, this);
470
477
  }));
471
478
 
472
- function _convertNodesTree(_x4, _x5, _x6, _x7) {
479
+ function _convertNodesTree(_x5, _x6, _x7, _x8) {
473
480
  return _convertNodesTree2.apply(this, arguments);
474
481
  }
475
482
 
@@ -555,7 +562,7 @@ var I3SConverter = function () {
555
562
  }, _callee5, this);
556
563
  }));
557
564
 
558
- function _writeNodeIndexDocument(_x8, _x9, _x10) {
565
+ function _writeNodeIndexDocument(_x9, _x10, _x11) {
559
566
  return _writeNodeIndexDocument2.apply(this, arguments);
560
567
  }
561
568
 
@@ -601,7 +608,7 @@ var I3SConverter = function () {
601
608
  }, _callee6, this, [[5, 10]]);
602
609
  }));
603
610
 
604
- function _createSlpk(_x11) {
611
+ function _createSlpk(_x12) {
605
612
  return _createSlpk2.apply(this, arguments);
606
613
  }
607
614
 
@@ -634,7 +641,7 @@ var I3SConverter = function () {
634
641
  }, _callee7, this);
635
642
  }));
636
643
 
637
- function _addChildrenWithNeighborsAndWriteFile(_x12) {
644
+ function _addChildrenWithNeighborsAndWriteFile(_x13) {
638
645
  return _addChildrenWithNeighborsAndWriteFile2.apply(this, arguments);
639
646
  }
640
647
 
@@ -759,7 +766,7 @@ var I3SConverter = function () {
759
766
  }, _callee8, this, [[4, 28, 31, 34]]);
760
767
  }));
761
768
 
762
- function _addChildren(_x13) {
769
+ function _addChildren(_x14) {
763
770
  return _addChildren2.apply(this, arguments);
764
771
  }
765
772
 
@@ -886,7 +893,7 @@ var I3SConverter = function () {
886
893
  }, _callee9, this, [[1, 38, 41, 44], [10, 21, 24, 27]]);
887
894
  }));
888
895
 
889
- function _addNeighborsAndWriteFile(_x14, _x15) {
896
+ function _addNeighborsAndWriteFile(_x15, _x16) {
890
897
  return _addNeighborsAndWriteFile2.apply(this, arguments);
891
898
  }
892
899
 
@@ -1030,7 +1037,7 @@ var I3SConverter = function () {
1030
1037
  }, _callee10, this, [[15, 35, 38, 41]]);
1031
1038
  }));
1032
1039
 
1033
- function _createNode(_x16, _x17, _x18, _x19) {
1040
+ function _createNode(_x17, _x18, _x19, _x20) {
1034
1041
  return _createNode2.apply(this, arguments);
1035
1042
  }
1036
1043
 
@@ -1081,7 +1088,7 @@ var I3SConverter = function () {
1081
1088
  }, _callee11, this);
1082
1089
  }));
1083
1090
 
1084
- function _convertResources(_x20) {
1091
+ function _convertResources(_x21) {
1085
1092
  return _convertResources2.apply(this, arguments);
1086
1093
  }
1087
1094
 
@@ -1234,7 +1241,7 @@ var I3SConverter = function () {
1234
1241
  }, _callee12, this);
1235
1242
  }));
1236
1243
 
1237
- function _writeResources(_x21, _x22) {
1244
+ function _writeResources(_x22, _x23) {
1238
1245
  return _writeResources2.apply(this, arguments);
1239
1246
  }
1240
1247
 
@@ -1309,7 +1316,7 @@ var I3SConverter = function () {
1309
1316
  }, _callee13, this);
1310
1317
  }));
1311
1318
 
1312
- function _writeGeometries(_x23, _x24, _x25, _x26) {
1319
+ function _writeGeometries(_x24, _x25, _x26, _x27) {
1313
1320
  return _writeGeometries2.apply(this, arguments);
1314
1321
  }
1315
1322
 
@@ -1367,7 +1374,7 @@ var I3SConverter = function () {
1367
1374
  }, _callee14, this);
1368
1375
  }));
1369
1376
 
1370
- function _writeShared(_x27, _x28, _x29, _x30) {
1377
+ function _writeShared(_x28, _x29, _x30, _x31) {
1371
1378
  return _writeShared2.apply(this, arguments);
1372
1379
  }
1373
1380
 
@@ -1460,7 +1467,7 @@ var I3SConverter = function () {
1460
1467
  }, _callee15, this);
1461
1468
  }));
1462
1469
 
1463
- function _writeTexture(_x31, _x32, _x33) {
1470
+ function _writeTexture(_x32, _x33, _x34) {
1464
1471
  return _writeTexture2.apply(this, arguments);
1465
1472
  }
1466
1473
 
@@ -1507,7 +1514,7 @@ var I3SConverter = function () {
1507
1514
  }, _callee16, this);
1508
1515
  }));
1509
1516
 
1510
- function writeTextureFile(_x34, _x35, _x36, _x37, _x38) {
1517
+ function writeTextureFile(_x35, _x36, _x37, _x38, _x39) {
1511
1518
  return _writeTextureFile.apply(this, arguments);
1512
1519
  }
1513
1520
 
@@ -1838,7 +1845,7 @@ var I3SConverter = function () {
1838
1845
  }, _callee18, this);
1839
1846
  }));
1840
1847
 
1841
- function _finishConversion(_x39) {
1848
+ function _finishConversion(_x40) {
1842
1849
  return _finishConversion2.apply(this, arguments);
1843
1850
  }
1844
1851