@loaders.gl/tile-converter 3.4.13 → 3.4.15

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 (100) hide show
  1. package/dist/3d-tiles-attributes-worker.js +1 -1
  2. package/dist/converter.min.js +78 -77
  3. package/dist/dist.min.js +2081 -1557
  4. package/dist/es5/3d-tiles-attributes-worker.js +3 -3
  5. package/dist/es5/3d-tiles-attributes-worker.js.map +1 -1
  6. package/dist/es5/3d-tiles-converter/3d-tiles-converter.js +203 -417
  7. package/dist/es5/3d-tiles-converter/3d-tiles-converter.js.map +1 -1
  8. package/dist/es5/3d-tiles-converter/helpers/b3dm-converter.js +197 -266
  9. package/dist/es5/3d-tiles-converter/helpers/b3dm-converter.js.map +1 -1
  10. package/dist/es5/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js +4 -6
  11. package/dist/es5/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js.map +1 -1
  12. package/dist/es5/3d-tiles-converter/helpers/texture-atlas.js +12 -12
  13. package/dist/es5/3d-tiles-converter/helpers/texture-atlas.js.map +1 -1
  14. package/dist/es5/3d-tiles-converter/json-templates/tileset.js +35 -51
  15. package/dist/es5/3d-tiles-converter/json-templates/tileset.js.map +1 -1
  16. package/dist/es5/bundle.js +1 -1
  17. package/dist/es5/bundle.js.map +1 -1
  18. package/dist/es5/constants.js +1 -1
  19. package/dist/es5/constants.js.map +1 -1
  20. package/dist/es5/converter-cli.js +78 -133
  21. package/dist/es5/converter-cli.js.map +1 -1
  22. package/dist/es5/deps-installer/deps-installer.js +38 -110
  23. package/dist/es5/deps-installer/deps-installer.js.map +1 -1
  24. package/dist/es5/i3s-attributes-worker.js +3 -3
  25. package/dist/es5/i3s-attributes-worker.js.map +1 -1
  26. package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js +31 -36
  27. package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js.map +1 -1
  28. package/dist/es5/i3s-converter/helpers/coordinate-converter.js +23 -23
  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 +9 -27
  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 +27 -42
  33. package/dist/es5/i3s-converter/helpers/feature-attributes.js.map +1 -1
  34. package/dist/es5/i3s-converter/helpers/geometry-attributes.js +97 -114
  35. package/dist/es5/i3s-converter/helpers/geometry-attributes.js.map +1 -1
  36. package/dist/es5/i3s-converter/helpers/geometry-converter.js +524 -799
  37. package/dist/es5/i3s-converter/helpers/geometry-converter.js.map +1 -1
  38. package/dist/es5/i3s-converter/helpers/gltf-attributes.js +24 -25
  39. package/dist/es5/i3s-converter/helpers/gltf-attributes.js.map +1 -1
  40. package/dist/es5/i3s-converter/helpers/node-debug.js +27 -25
  41. package/dist/es5/i3s-converter/helpers/node-debug.js.map +1 -1
  42. package/dist/es5/i3s-converter/helpers/node-index-document.js +165 -461
  43. package/dist/es5/i3s-converter/helpers/node-index-document.js.map +1 -1
  44. package/dist/es5/i3s-converter/helpers/node-pages.js +169 -474
  45. package/dist/es5/i3s-converter/helpers/node-pages.js.map +1 -1
  46. package/dist/es5/i3s-converter/i3s-converter.js +663 -1401
  47. package/dist/es5/i3s-converter/i3s-converter.js.map +1 -1
  48. package/dist/es5/i3s-converter/json-templates/geometry-definitions.js +82 -92
  49. package/dist/es5/i3s-converter/json-templates/geometry-definitions.js.map +1 -1
  50. package/dist/es5/i3s-converter/json-templates/layers.js +130 -152
  51. package/dist/es5/i3s-converter/json-templates/layers.js.map +1 -1
  52. package/dist/es5/i3s-converter/json-templates/metadata.js +21 -23
  53. package/dist/es5/i3s-converter/json-templates/metadata.js.map +1 -1
  54. package/dist/es5/i3s-converter/json-templates/node.js +78 -89
  55. package/dist/es5/i3s-converter/json-templates/node.js.map +1 -1
  56. package/dist/es5/i3s-converter/json-templates/scene-server.js +27 -31
  57. package/dist/es5/i3s-converter/json-templates/scene-server.js.map +1 -1
  58. package/dist/es5/i3s-converter/json-templates/shared-resources.js +110 -152
  59. package/dist/es5/i3s-converter/json-templates/shared-resources.js.map +1 -1
  60. package/dist/es5/i3s-converter/json-templates/store.js +2 -4
  61. package/dist/es5/i3s-converter/json-templates/store.js.map +1 -1
  62. package/dist/es5/i3s-server/app.js +6 -6
  63. package/dist/es5/i3s-server/app.js.map +1 -1
  64. package/dist/es5/i3s-server/controllers/index-controller.js +20 -49
  65. package/dist/es5/i3s-server/controllers/index-controller.js.map +1 -1
  66. package/dist/es5/i3s-server/routes/index.js +14 -33
  67. package/dist/es5/i3s-server/routes/index.js.map +1 -1
  68. package/dist/es5/index.js +2 -2
  69. package/dist/es5/lib/utils/compress-util.js +127 -295
  70. package/dist/es5/lib/utils/compress-util.js.map +1 -1
  71. package/dist/es5/lib/utils/file-utils.js +65 -174
  72. package/dist/es5/lib/utils/file-utils.js.map +1 -1
  73. package/dist/es5/lib/utils/lod-conversion-utils.js +9 -9
  74. package/dist/es5/lib/utils/lod-conversion-utils.js.map +1 -1
  75. package/dist/es5/lib/utils/queue.js +13 -38
  76. package/dist/es5/lib/utils/queue.js.map +1 -1
  77. package/dist/es5/lib/utils/statistic-utills.js +39 -117
  78. package/dist/es5/lib/utils/statistic-utills.js.map +1 -1
  79. package/dist/es5/lib/utils/write-queue.js +74 -195
  80. package/dist/es5/lib/utils/write-queue.js.map +1 -1
  81. package/dist/es5/pgm-loader.js +3 -22
  82. package/dist/es5/pgm-loader.js.map +1 -1
  83. package/dist/es5/workers/3d-tiles-attributes-worker.js +5 -22
  84. package/dist/es5/workers/3d-tiles-attributes-worker.js.map +1 -1
  85. package/dist/es5/workers/i3s-attributes-worker.js +4 -25
  86. package/dist/es5/workers/i3s-attributes-worker.js.map +1 -1
  87. package/dist/esm/3d-tiles-attributes-worker.js +1 -1
  88. package/dist/esm/deps-installer/deps-installer.js +1 -1
  89. package/dist/esm/i3s-attributes-worker.js +1 -1
  90. package/dist/esm/i3s-converter/helpers/batch-ids-extensions.js.map +1 -1
  91. package/dist/esm/i3s-converter/helpers/geometry-converter.js +1 -1
  92. package/dist/esm/i3s-converter/helpers/geometry-converter.js.map +1 -1
  93. package/dist/esm/pgm-loader.js +1 -1
  94. package/dist/i3s-attributes-worker.js +2 -2
  95. package/dist/i3s-attributes-worker.js.map +3 -3
  96. package/dist/i3s-converter/helpers/geometry-converter.d.ts +1 -1
  97. package/dist/i3s-converter/helpers/geometry-converter.d.ts.map +1 -1
  98. package/package.json +15 -15
  99. package/src/i3s-converter/helpers/batch-ids-extensions.ts +1 -1
  100. package/src/i3s-converter/helpers/geometry-converter.ts +14 -14
@@ -1 +1 @@
1
- {"version":3,"file":"3d-tiles-converter.js","names":["_path","require","_process","_interopRequireDefault","_jsonMapTransform","_core","_i3s","_tiles","_pgmLoader","_i3sObbTo3dTilesObb","_lodConversionUtils","_fileUtils","_statisticUtills","_tileset","_coordinateConverter","_dTilesAttributesWorker","_workerUtils","_constants","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty2","default","getOwnPropertyDescriptors","defineProperties","defineProperty","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","prototype","toString","slice","constructor","name","from","test","arr","len","arr2","I3S","Tiles3DConverter","_classCallCheck2","options","tilesetPath","vertexCounter","conversionStartTime","geoidHeightModel","sourceTileset","attributeStorageInfo","workerSource","_createClass2","_convert","_asyncToGenerator2","_regenerator","mark","_callee","inputUrl","outputPath","tilesetName","maxDepth","egmFilePath","sourceTilesetJson","rootNode","rootTile","tileset","workerFarm","wrap","_callee$","_context","prev","isBrowser","console","log","BROWSER_ERROR_MESSAGE","abrupt","process","hrtime","load","PGMLoader","sent","loadWorkers","I3SLoader","Tileset3D","loadOptions","_nodeWorkers","reuseWorkers","workerUrl","i3s","coordinateSystem","COORDINATE_SYSTEM","LNGLAT_OFFSETS","decodeTextures","tilesetInitializationPromise","root","header","obb","createObbFromMbs","mbs","join","concat","removeDir","t0","boundingVolume","box","i3sObbTo3dTilesObb","geometricError","convertScreenThresholdToGeometricError","children","_addChildren","transform","tilesetTemplate","writeFile","JSON","stringify","_finishConversion","slpk","WorkerFarm","getWorkerFarm","destroy","stop","convert","_x","_convertChildNode","_callee2","parentSourceNode","parentNode","level","childNodeInfo","sourceChild","_sourceChild$header","featureAttributes","child","i3sAttributesData","b3dm","_callee2$","_context2","_loadChildNode","contentUrl","_loadTile","content","vertexCount","_loadChildAttributes","tileContent","textureFormat","transform3DTilesAttributesOnWorker","tile3dWorkerSource","uri","id","Uint8Array","unloadContent","convertChildNode","_x2","_x3","_x4","_x5","_addChildren2","_callee3","promises","_iterator","_step","_callee3$","_context3","Promise","all","_x6","_x7","_x8","_loadChildNode2","_callee4","_ref","loader","nodeUrl","_callee4$","_context4","nodePages","nodePagesTile","formTileFromNodePages","_relativeUrlToFullUrl","url","href","isTileHeader","loadContent","Tile3D","_x9","_x10","baseUrl","relativeUrl","resultArray","split","relativeUrlArray","_iterator2","_step2","folder","_loadChildAttributes2","_callee5","attributeUrls","index","attribute","attributesList","_callee5$","_context5","attributeName","attributeType","_getAttributeType","I3SAttributeLoader","_replaceNestedArrays","assign","_toConsumableArray2","_x11","_x12","attributeValues","valueType","objectIds","attributeObject","_finishConversion2","_callee6","params","filesSize","diff","conversionTime","_callee6$","_context6","calculateFilesSize","timeConverter","_x13","_loadWorkers","_callee7","tile3dAttributesWorkerUrl","sourceResponse","_callee7$","_context7","getWorkerURL","Tile3dAttributesWorker","getLoaderOptions","fetchFile","text","exports"],"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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"}
1
+ {"version":3,"file":"3d-tiles-converter.js","names":["_path","require","_process","_interopRequireDefault","_jsonMapTransform","_core","_i3s","_tiles","_pgmLoader","_i3sObbTo3dTilesObb","_lodConversionUtils","_fileUtils","_statisticUtills","_tileset","_coordinateConverter","_dTilesAttributesWorker","_workerUtils","_constants","I3S","Tiles3DConverter","constructor","_defineProperty2","default","options","tilesetPath","vertexCounter","conversionStartTime","geoidHeightModel","sourceTileset","attributeStorageInfo","workerSource","convert","isBrowser","console","log","BROWSER_ERROR_MESSAGE","inputUrl","outputPath","tilesetName","maxDepth","egmFilePath","process","hrtime","load","PGMLoader","loadWorkers","sourceTilesetJson","I3SLoader","Tileset3D","loadOptions","_nodeWorkers","reuseWorkers","workerUrl","i3s","coordinateSystem","COORDINATE_SYSTEM","LNGLAT_OFFSETS","decodeTextures","tilesetInitializationPromise","rootNode","root","header","obb","createObbFromMbs","mbs","join","concat","removeDir","e","rootTile","boundingVolume","box","i3sObbTo3dTilesObb","geometricError","convertScreenThresholdToGeometricError","children","_addChildren","tileset","transform","tilesetTemplate","writeFile","JSON","stringify","_finishConversion","slpk","workerFarm","WorkerFarm","getWorkerFarm","destroy","convertChildNode","parentSourceNode","parentNode","level","childNodeInfo","sourceChild","_loadChildNode","push","contentUrl","_sourceChild$header","_loadTile","content","vertexCount","featureAttributes","_loadChildAttributes","child","i3sAttributesData","tileContent","textureFormat","b3dm","transform3DTilesAttributesOnWorker","source","tile3dWorkerSource","uri","id","Uint8Array","unloadContent","promises","Promise","all","nodePages","nodePagesTile","formTileFromNodePages","loader","nodeUrl","_relativeUrlToFullUrl","url","href","isTileHeader","loadContent","Tile3D","baseUrl","relativeUrl","resultArray","split","relativeUrlArray","folder","slice","attributeUrls","index","length","attribute","attributeName","name","attributeType","_getAttributeType","I3SAttributeLoader","attributesList","_replaceNestedArrays","Object","assign","attributeValues","valueType","objectIds","attributeObject","key","Array","from","params","filesSize","calculateFilesSize","diff","conversionTime","timeConverter","tile3dAttributesWorkerUrl","getWorkerURL","Tile3dAttributesWorker","getLoaderOptions","sourceResponse","fetchFile","text","exports"],"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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"}
@@ -5,10 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.default = void 0;
8
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
12
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
9
  var _core = require("@loaders.gl/core");
14
10
  var _gltf = require("@loaders.gl/gltf");
@@ -16,286 +12,221 @@ var _dTiles = require("@loaders.gl/3d-tiles");
16
12
  var _core2 = require("@math.gl/core");
17
13
  var _geospatial = require("@math.gl/geospatial");
18
14
  var _textureAtlas = require("./texture-atlas");
19
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
20
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
21
- var Z_UP_TO_Y_UP_MATRIX = new _core2.Matrix4([1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1]);
22
- var scratchVector = new _core2.Vector3();
23
- var B3dmConverter = function () {
24
- function B3dmConverter() {
25
- (0, _classCallCheck2.default)(this, B3dmConverter);
15
+ const Z_UP_TO_Y_UP_MATRIX = new _core2.Matrix4([1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1]);
16
+ const scratchVector = new _core2.Vector3();
17
+ class B3dmConverter {
18
+ constructor() {
26
19
  (0, _defineProperty2.default)(this, "rtcCenter", void 0);
27
20
  (0, _defineProperty2.default)(this, "i3sTile", void 0);
28
21
  }
29
- (0, _createClass2.default)(B3dmConverter, [{
30
- key: "convert",
31
- value: function () {
32
- var _convert = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(i3sAttributesData) {
33
- var featureAttributes,
34
- gltf,
35
- b3dm,
36
- _args = arguments;
37
- return _regenerator.default.wrap(function _callee$(_context) {
38
- while (1) switch (_context.prev = _context.next) {
39
- case 0:
40
- featureAttributes = _args.length > 1 && _args[1] !== undefined ? _args[1] : null;
41
- _context.next = 3;
42
- return this.buildGltf(i3sAttributesData, featureAttributes);
43
- case 3:
44
- gltf = _context.sent;
45
- b3dm = (0, _core.encodeSync)({
46
- gltfEncoded: new Uint8Array(gltf),
47
- type: 'b3dm',
48
- featuresLength: this._getFeaturesLength(featureAttributes),
49
- batchTable: featureAttributes
50
- }, _dTiles.Tile3DWriter);
51
- return _context.abrupt("return", b3dm);
52
- case 6:
53
- case "end":
54
- return _context.stop();
55
- }
56
- }, _callee, this);
57
- }));
58
- function convert(_x) {
59
- return _convert.apply(this, arguments);
60
- }
61
- return convert;
62
- }()
63
- }, {
64
- key: "buildGltf",
65
- value: function () {
66
- var _buildGltf = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee2(i3sAttributesData, featureAttributes) {
67
- var tileContent, textureFormat, material, attributes, originalIndices, cartesianOrigin, cartographicOrigin, modelMatrix, gltfBuilder, textureIndex, pbrMaterialInfo, materialIndex, positions, positionsValue, indices, meshIndex, transformMatrix, nodeIndex, sceneIndex, gltfBuffer;
68
- return _regenerator.default.wrap(function _callee2$(_context2) {
69
- while (1) switch (_context2.prev = _context2.next) {
70
- case 0:
71
- tileContent = i3sAttributesData.tileContent, textureFormat = i3sAttributesData.textureFormat;
72
- material = tileContent.material, attributes = tileContent.attributes, originalIndices = tileContent.indices, cartesianOrigin = tileContent.cartesianOrigin, cartographicOrigin = tileContent.cartographicOrigin, modelMatrix = tileContent.modelMatrix;
73
- gltfBuilder = new _gltf.GLTFScenegraph();
74
- _context2.next = 5;
75
- return this._addI3sTextureToGltf(tileContent, textureFormat, gltfBuilder);
76
- case 5:
77
- textureIndex = _context2.sent;
78
- pbrMaterialInfo = this._convertI3sMaterialToGltfMaterial(material, textureIndex);
79
- materialIndex = gltfBuilder.addMaterial(pbrMaterialInfo);
80
- positions = attributes.positions;
81
- positionsValue = positions.value;
82
- if (attributes.uvRegions && attributes.texCoords) {
83
- attributes.texCoords.value = (0, _textureAtlas.convertTextureAtlas)(attributes.texCoords.value, attributes.uvRegions.value);
84
- }
85
- attributes.positions.value = this._normalizePositions(positionsValue, cartesianOrigin, cartographicOrigin, modelMatrix);
86
- this._createBatchIds(tileContent, featureAttributes);
87
- if (attributes.normals && !this._checkNormals(attributes.normals.value)) {
88
- delete attributes.normals;
89
- }
90
- indices = originalIndices || this._generateSynteticIndices(positionsValue.length / positions.size);
91
- meshIndex = gltfBuilder.addMesh({
92
- attributes: attributes,
93
- indices: indices,
94
- material: materialIndex,
95
- mode: 4
96
- });
97
- transformMatrix = this._generateTransformMatrix(cartesianOrigin);
98
- nodeIndex = gltfBuilder.addNode({
99
- meshIndex: meshIndex,
100
- matrix: transformMatrix
101
- });
102
- sceneIndex = gltfBuilder.addScene({
103
- nodeIndices: [nodeIndex]
104
- });
105
- gltfBuilder.setDefaultScene(sceneIndex);
106
- gltfBuilder.createBinaryChunk();
107
- gltfBuffer = (0, _core.encodeSync)(gltfBuilder.gltf, _gltf.GLTFWriter);
108
- return _context2.abrupt("return", gltfBuffer);
109
- case 23:
110
- case "end":
111
- return _context2.stop();
112
- }
113
- }, _callee2, this);
114
- }));
115
- function buildGltf(_x2, _x3) {
116
- return _buildGltf.apply(this, arguments);
117
- }
118
- return buildGltf;
119
- }()
120
- }, {
121
- key: "_addI3sTextureToGltf",
122
- value: function () {
123
- var _addI3sTextureToGltf2 = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee3(tileContent, textureFormat, gltfBuilder) {
124
- var texture, material, attributes, textureIndex, selectedTexture, mimeType, imageIndex;
125
- return _regenerator.default.wrap(function _callee3$(_context3) {
126
- while (1) switch (_context3.prev = _context3.next) {
127
- case 0:
128
- texture = tileContent.texture, material = tileContent.material, attributes = tileContent.attributes;
129
- textureIndex = null;
130
- selectedTexture = texture;
131
- if (!texture && material) {
132
- selectedTexture = material.pbrMetallicRoughness && material.pbrMetallicRoughness.baseColorTexture && material.pbrMetallicRoughness.baseColorTexture.texture.source.image;
133
- }
134
- if (selectedTexture) {
135
- mimeType = this._deduceMimeTypeFromFormat(textureFormat);
136
- imageIndex = gltfBuilder.addImage(selectedTexture, mimeType);
137
- textureIndex = gltfBuilder.addTexture({
138
- imageIndex: imageIndex
139
- });
140
- delete attributes.colors;
141
- }
142
- return _context3.abrupt("return", textureIndex);
143
- case 6:
144
- case "end":
145
- return _context3.stop();
146
- }
147
- }, _callee3, this);
148
- }));
149
- function _addI3sTextureToGltf(_x4, _x5, _x6) {
150
- return _addI3sTextureToGltf2.apply(this, arguments);
151
- }
152
- return _addI3sTextureToGltf;
153
- }()
154
- }, {
155
- key: "_normalizePositions",
156
- value: function _normalizePositions(positionsValue, cartesianOrigin, cartographicOrigin, modelMatrix) {
157
- var newPositionsValue = new Float32Array(positionsValue.length);
158
- for (var index = 0; index < positionsValue.length; index += 3) {
159
- var vertex = positionsValue.subarray(index, index + 3);
160
- var cartesianOriginVector = new _core2.Vector3(cartesianOrigin);
161
- var vertexVector = new _core2.Vector3(Array.from(vertex)).transform(modelMatrix).add(cartographicOrigin);
162
- _geospatial.Ellipsoid.WGS84.cartographicToCartesian(vertexVector, scratchVector);
163
- vertexVector = scratchVector.subtract(cartesianOriginVector);
164
- newPositionsValue.set(vertexVector, index);
165
- }
166
- return newPositionsValue;
22
+ async convert(i3sAttributesData) {
23
+ let featureAttributes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
24
+ const gltf = await this.buildGltf(i3sAttributesData, featureAttributes);
25
+ const b3dm = (0, _core.encodeSync)({
26
+ gltfEncoded: new Uint8Array(gltf),
27
+ type: 'b3dm',
28
+ featuresLength: this._getFeaturesLength(featureAttributes),
29
+ batchTable: featureAttributes
30
+ }, _dTiles.Tile3DWriter);
31
+ return b3dm;
32
+ }
33
+ async buildGltf(i3sAttributesData, featureAttributes) {
34
+ const {
35
+ tileContent,
36
+ textureFormat
37
+ } = i3sAttributesData;
38
+ const {
39
+ material,
40
+ attributes,
41
+ indices: originalIndices,
42
+ cartesianOrigin,
43
+ cartographicOrigin,
44
+ modelMatrix
45
+ } = tileContent;
46
+ const gltfBuilder = new _gltf.GLTFScenegraph();
47
+ const textureIndex = await this._addI3sTextureToGltf(tileContent, textureFormat, gltfBuilder);
48
+ const pbrMaterialInfo = this._convertI3sMaterialToGltfMaterial(material, textureIndex);
49
+ const materialIndex = gltfBuilder.addMaterial(pbrMaterialInfo);
50
+ const positions = attributes.positions;
51
+ const positionsValue = positions.value;
52
+ if (attributes.uvRegions && attributes.texCoords) {
53
+ attributes.texCoords.value = (0, _textureAtlas.convertTextureAtlas)(attributes.texCoords.value, attributes.uvRegions.value);
167
54
  }
168
- }, {
169
- key: "_generateTransformMatrix",
170
- value: function _generateTransformMatrix(cartesianOrigin) {
171
- var translateOriginMatrix = new _core2.Matrix4().translate(cartesianOrigin);
172
- var result = translateOriginMatrix.multiplyLeft(Z_UP_TO_Y_UP_MATRIX);
173
- return result;
55
+ attributes.positions.value = this._normalizePositions(positionsValue, cartesianOrigin, cartographicOrigin, modelMatrix);
56
+ this._createBatchIds(tileContent, featureAttributes);
57
+ if (attributes.normals && !this._checkNormals(attributes.normals.value)) {
58
+ delete attributes.normals;
174
59
  }
175
- }, {
176
- key: "_createBatchIds",
177
- value: function _createBatchIds(i3sContent, featureAttributes) {
178
- var featureIds = i3sContent.featureIds;
179
- var _ref = featureAttributes || {},
180
- objectIds = _ref.OBJECTID;
181
- if (!featureIds || !objectIds) {
182
- return;
183
- }
184
- for (var i = 0; i < featureIds.length; i++) {
185
- var featureId = featureIds[i];
186
- var batchId = objectIds.indexOf(featureId);
187
- featureIds[i] = batchId;
188
- }
189
- i3sContent.attributes._BATCHID = {
190
- size: 1,
191
- byteOffset: 0,
192
- value: featureIds
193
- };
60
+ const indices = originalIndices || this._generateSynteticIndices(positionsValue.length / positions.size);
61
+ const meshIndex = gltfBuilder.addMesh({
62
+ attributes,
63
+ indices,
64
+ material: materialIndex,
65
+ mode: 4
66
+ });
67
+ const transformMatrix = this._generateTransformMatrix(cartesianOrigin);
68
+ const nodeIndex = gltfBuilder.addNode({
69
+ meshIndex,
70
+ matrix: transformMatrix
71
+ });
72
+ const sceneIndex = gltfBuilder.addScene({
73
+ nodeIndices: [nodeIndex]
74
+ });
75
+ gltfBuilder.setDefaultScene(sceneIndex);
76
+ gltfBuilder.createBinaryChunk();
77
+ const gltfBuffer = (0, _core.encodeSync)(gltfBuilder.gltf, _gltf.GLTFWriter);
78
+ return gltfBuffer;
79
+ }
80
+ async _addI3sTextureToGltf(tileContent, textureFormat, gltfBuilder) {
81
+ const {
82
+ texture,
83
+ material,
84
+ attributes
85
+ } = tileContent;
86
+ let textureIndex = null;
87
+ let selectedTexture = texture;
88
+ if (!texture && material) {
89
+ selectedTexture = material.pbrMetallicRoughness && material.pbrMetallicRoughness.baseColorTexture && material.pbrMetallicRoughness.baseColorTexture.texture.source.image;
194
90
  }
195
- }, {
196
- key: "_generateSynteticIndices",
197
- value: function _generateSynteticIndices(vertexCount) {
198
- var result = new Uint32Array(vertexCount);
199
- for (var index = 0; index < vertexCount; index++) {
200
- result.set([index], index);
201
- }
202
- return result;
91
+ if (selectedTexture) {
92
+ const mimeType = this._deduceMimeTypeFromFormat(textureFormat);
93
+ const imageIndex = gltfBuilder.addImage(selectedTexture, mimeType);
94
+ textureIndex = gltfBuilder.addTexture({
95
+ imageIndex
96
+ });
97
+ delete attributes.colors;
203
98
  }
204
- }, {
205
- key: "_deduceMimeTypeFromFormat",
206
- value: function _deduceMimeTypeFromFormat(format) {
207
- switch (format) {
208
- case 'jpg':
209
- return 'image/jpeg';
210
- case 'png':
211
- return 'image/png';
212
- case 'ktx2':
213
- return 'image/ktx2';
214
- default:
215
- console.warn("Unexpected texture format in I3S: ".concat(format));
216
- return 'image/jpeg';
217
- }
99
+ return textureIndex;
100
+ }
101
+ _normalizePositions(positionsValue, cartesianOrigin, cartographicOrigin, modelMatrix) {
102
+ const newPositionsValue = new Float32Array(positionsValue.length);
103
+ for (let index = 0; index < positionsValue.length; index += 3) {
104
+ const vertex = positionsValue.subarray(index, index + 3);
105
+ const cartesianOriginVector = new _core2.Vector3(cartesianOrigin);
106
+ let vertexVector = new _core2.Vector3(Array.from(vertex)).transform(modelMatrix).add(cartographicOrigin);
107
+ _geospatial.Ellipsoid.WGS84.cartographicToCartesian(vertexVector, scratchVector);
108
+ vertexVector = scratchVector.subtract(cartesianOriginVector);
109
+ newPositionsValue.set(vertexVector, index);
218
110
  }
219
- }, {
220
- key: "_convertI3sMaterialToGltfMaterial",
221
- value: function _convertI3sMaterialToGltfMaterial(material, textureIndex) {
222
- var isTextureIndexExists = textureIndex !== null;
223
- if (!material) {
224
- material = {
225
- alphaMode: 'OPAQUE',
226
- doubleSided: false,
227
- pbrMetallicRoughness: {
228
- metallicFactor: 0,
229
- roughnessFactor: 1
230
- }
231
- };
232
- if (isTextureIndexExists) {
233
- material.pbrMetallicRoughness.baseColorTexture = {
234
- index: textureIndex,
235
- texCoord: 0
236
- };
237
- } else {
238
- material.pbrMetallicRoughness.baseColorFactor = [1, 1, 1, 1];
239
- }
240
- return material;
241
- }
242
- if (textureIndex !== null) {
243
- material = this._setGltfTexture(material, textureIndex);
244
- }
245
- return material;
111
+ return newPositionsValue;
112
+ }
113
+ _generateTransformMatrix(cartesianOrigin) {
114
+ const translateOriginMatrix = new _core2.Matrix4().translate(cartesianOrigin);
115
+ const result = translateOriginMatrix.multiplyLeft(Z_UP_TO_Y_UP_MATRIX);
116
+ return result;
117
+ }
118
+ _createBatchIds(i3sContent, featureAttributes) {
119
+ const {
120
+ featureIds
121
+ } = i3sContent;
122
+ const {
123
+ OBJECTID: objectIds
124
+ } = featureAttributes || {};
125
+ if (!featureIds || !objectIds) {
126
+ return;
246
127
  }
247
- }, {
248
- key: "_setGltfTexture",
249
- value: function _setGltfTexture(materialDefinition, textureIndex) {
250
- var material = _objectSpread(_objectSpread({}, materialDefinition), {}, {
251
- pbrMetallicRoughness: _objectSpread({}, materialDefinition.pbrMetallicRoughness)
252
- });
253
- if (materialDefinition.pbrMetallicRoughness && materialDefinition.pbrMetallicRoughness.baseColorTexture) {
128
+ for (let i = 0; i < featureIds.length; i++) {
129
+ const featureId = featureIds[i];
130
+ const batchId = objectIds.indexOf(featureId);
131
+ featureIds[i] = batchId;
132
+ }
133
+ i3sContent.attributes._BATCHID = {
134
+ size: 1,
135
+ byteOffset: 0,
136
+ value: featureIds
137
+ };
138
+ }
139
+ _generateSynteticIndices(vertexCount) {
140
+ const result = new Uint32Array(vertexCount);
141
+ for (let index = 0; index < vertexCount; index++) {
142
+ result.set([index], index);
143
+ }
144
+ return result;
145
+ }
146
+ _deduceMimeTypeFromFormat(format) {
147
+ switch (format) {
148
+ case 'jpg':
149
+ return 'image/jpeg';
150
+ case 'png':
151
+ return 'image/png';
152
+ case 'ktx2':
153
+ return 'image/ktx2';
154
+ default:
155
+ console.warn("Unexpected texture format in I3S: ".concat(format));
156
+ return 'image/jpeg';
157
+ }
158
+ }
159
+ _convertI3sMaterialToGltfMaterial(material, textureIndex) {
160
+ const isTextureIndexExists = textureIndex !== null;
161
+ if (!material) {
162
+ material = {
163
+ alphaMode: 'OPAQUE',
164
+ doubleSided: false,
165
+ pbrMetallicRoughness: {
166
+ metallicFactor: 0,
167
+ roughnessFactor: 1
168
+ }
169
+ };
170
+ if (isTextureIndexExists) {
254
171
  material.pbrMetallicRoughness.baseColorTexture = {
255
172
  index: textureIndex,
256
173
  texCoord: 0
257
174
  };
258
- } else if (materialDefinition.emissiveTexture) {
259
- material.emissiveTexture = {
260
- index: textureIndex,
261
- texCoord: 0
262
- };
263
- } else if (materialDefinition.pbrMetallicRoughness && materialDefinition.pbrMetallicRoughness.metallicRoughnessTexture) {
264
- material.pbrMetallicRoughness.metallicRoughnessTexture = {
265
- index: textureIndex,
266
- texCoord: 0
267
- };
268
- } else if (materialDefinition.normalTexture) {
269
- material.normalTexture = {
270
- index: textureIndex,
271
- texCoord: 0
272
- };
273
- } else if (materialDefinition.occlusionTexture) {
274
- material.occlusionTexture = {
275
- index: textureIndex,
276
- texCoord: 0
277
- };
175
+ } else {
176
+ material.pbrMetallicRoughness.baseColorFactor = [1, 1, 1, 1];
278
177
  }
279
178
  return material;
280
179
  }
281
- }, {
282
- key: "_getFeaturesLength",
283
- value: function _getFeaturesLength(attributes) {
284
- if (!attributes) {
285
- return 0;
180
+ if (textureIndex !== null) {
181
+ material = this._setGltfTexture(material, textureIndex);
182
+ }
183
+ return material;
184
+ }
185
+ _setGltfTexture(materialDefinition, textureIndex) {
186
+ const material = {
187
+ ...materialDefinition,
188
+ pbrMetallicRoughness: {
189
+ ...materialDefinition.pbrMetallicRoughness
286
190
  }
287
- var firstKey = Object.keys(attributes)[0];
288
- return firstKey ? attributes[firstKey].length : 0;
191
+ };
192
+ if (materialDefinition.pbrMetallicRoughness && materialDefinition.pbrMetallicRoughness.baseColorTexture) {
193
+ material.pbrMetallicRoughness.baseColorTexture = {
194
+ index: textureIndex,
195
+ texCoord: 0
196
+ };
197
+ } else if (materialDefinition.emissiveTexture) {
198
+ material.emissiveTexture = {
199
+ index: textureIndex,
200
+ texCoord: 0
201
+ };
202
+ } else if (materialDefinition.pbrMetallicRoughness && materialDefinition.pbrMetallicRoughness.metallicRoughnessTexture) {
203
+ material.pbrMetallicRoughness.metallicRoughnessTexture = {
204
+ index: textureIndex,
205
+ texCoord: 0
206
+ };
207
+ } else if (materialDefinition.normalTexture) {
208
+ material.normalTexture = {
209
+ index: textureIndex,
210
+ texCoord: 0
211
+ };
212
+ } else if (materialDefinition.occlusionTexture) {
213
+ material.occlusionTexture = {
214
+ index: textureIndex,
215
+ texCoord: 0
216
+ };
289
217
  }
290
- }, {
291
- key: "_checkNormals",
292
- value: function _checkNormals(normals) {
293
- return normals.find(function (value) {
294
- return value;
295
- });
218
+ return material;
219
+ }
220
+ _getFeaturesLength(attributes) {
221
+ if (!attributes) {
222
+ return 0;
296
223
  }
297
- }]);
298
- return B3dmConverter;
299
- }();
224
+ const firstKey = Object.keys(attributes)[0];
225
+ return firstKey ? attributes[firstKey].length : 0;
226
+ }
227
+ _checkNormals(normals) {
228
+ return normals.find(value => value);
229
+ }
230
+ }
300
231
  exports.default = B3dmConverter;
301
232
  //# sourceMappingURL=b3dm-converter.js.map