@loaders.gl/tile-converter 4.0.0-alpha.24 → 4.0.0-alpha.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/3d-tiles-converter/helpers/b3dm-converter.d.ts +4 -4
- package/dist/converter.min.js +106 -106
- package/dist/dist.min.js +507 -489
- package/dist/es5/3d-tiles-converter/helpers/b3dm-converter.js +18 -18
- package/dist/es5/3d-tiles-converter/helpers/b3dm-converter.js.map +1 -1
- package/dist/es5/deps-installer/deps-installer.js +1 -1
- package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js +16 -14
- package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/geometry-converter.js +4 -76
- package/dist/es5/i3s-converter/helpers/geometry-converter.js.map +1 -1
- package/dist/es5/i3s-converter/helpers/preprocess-3d-tiles.js +15 -8
- package/dist/es5/i3s-converter/helpers/preprocess-3d-tiles.js.map +1 -1
- package/dist/es5/i3s-converter/i3s-converter.js.map +1 -1
- package/dist/es5/i3s-converter/types.js.map +1 -1
- package/dist/es5/lib/utils/compress-util.js +1 -1
- package/dist/es5/lib/utils/compress-util.js.map +1 -1
- package/dist/es5/pgm-loader.js +1 -1
- package/dist/esm/3d-tiles-converter/helpers/b3dm-converter.js +8 -8
- package/dist/esm/3d-tiles-converter/helpers/b3dm-converter.js.map +1 -1
- package/dist/esm/deps-installer/deps-installer.js +1 -1
- package/dist/esm/i3s-converter/helpers/batch-ids-extensions.js +5 -15
- package/dist/esm/i3s-converter/helpers/batch-ids-extensions.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/geometry-converter.js +3 -75
- package/dist/esm/i3s-converter/helpers/geometry-converter.js.map +1 -1
- package/dist/esm/i3s-converter/helpers/preprocess-3d-tiles.js +15 -9
- package/dist/esm/i3s-converter/helpers/preprocess-3d-tiles.js.map +1 -1
- package/dist/esm/i3s-converter/i3s-converter.js.map +1 -1
- package/dist/esm/i3s-converter/types.js.map +1 -1
- package/dist/esm/i3s-server/bin/i3s-server.min.js +75 -75
- package/dist/esm/lib/utils/compress-util.js +1 -1
- package/dist/esm/lib/utils/compress-util.js.map +1 -1
- package/dist/esm/pgm-loader.js +1 -1
- package/dist/i3s-converter/helpers/batch-ids-extensions.d.ts +4 -1
- package/dist/i3s-converter/helpers/batch-ids-extensions.d.ts.map +1 -1
- package/dist/i3s-converter/helpers/geometry-converter.d.ts +1 -1
- package/dist/i3s-converter/helpers/geometry-converter.d.ts.map +1 -1
- package/dist/i3s-converter/helpers/preprocess-3d-tiles.d.ts.map +1 -1
- package/dist/i3s-converter/i3s-converter.d.ts.map +1 -1
- package/dist/i3s-converter/types.d.ts +6 -1
- package/dist/i3s-converter/types.d.ts.map +1 -1
- package/dist/slpk-extractor.min.js +42 -42
- package/package.json +14 -14
- package/src/3d-tiles-converter/helpers/b3dm-converter.ts +8 -8
- package/src/i3s-converter/helpers/batch-ids-extensions.ts +14 -35
- package/src/i3s-converter/helpers/geometry-converter.ts +23 -168
- package/src/i3s-converter/helpers/preprocess-3d-tiles.ts +30 -9
- package/src/i3s-converter/i3s-converter.ts +0 -2
- package/src/i3s-converter/types.ts +6 -1
- package/src/lib/utils/compress-util.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compress-util.js","names":["_zlib","require","_path","_fs","_archiver","_interopRequireDefault","_fileUtils","_workerUtils","_jszip","_crypto","_crypt","compressFileWithGzip","pathFile","compressedPathFile","concat","gzip","createGzip","input","createReadStream","output","createWriteStream","Promise","resolve","reject","on","console","log","error","pipe","compressFilesWithZip","_x","_x2","_compressFilesWithZip","apply","arguments","_asyncToGenerator2","default","_regenerator","mark","_callee2","fileMap","outputFile","level","archive","_args2","wrap","_callee2$","_context2","prev","next","length","undefined","removeFile","t0","archiver","zlib","abrupt","_ref","_callee","subFileName","subFileData","_callee$","_context","pointer","err","keys","t1","done","value","appendFileToArchive","finalize","stop","_x18","_x19","compressWithChildProcess","_x3","_x4","_x5","_x6","_x7","_compressWithChildProcess","_callee3","inputFolder","inputFiles","sevenZipExe","_callee3$","_context3","process","platform","compressWithChildProcessWindows","compressWithChildProcessUnix","_x8","_x9","_compressWithChildProcessUnix","_callee4","fullOutputFile","args","childProcess","_args4","_callee4$","_context4","getAbsoluteFilePath","ChildProcessProxy","start","command","spawn","cwd","wait","_x10","_x11","_compressWithChildProcessWindows","_callee5","_args5","_callee5$","_context5","join","substr","generateHash128FromZip","_x12","_x13","_generateHash128FromZip","_callee6","inputZipFile","zip","hashTable","zipFiles","relativePath","zipEntry","_data","content","hash","_callee6$","_context6","fs","readFile","sent","JSZip","loadAsync","files","compressedContent","dir","MD5Hash","Buffer","from","toLowerCase","push","key","atob","byteOffset","sort","item","longToByteArray","write","crypt","hexToBytes","close","long","buffer","ArrayBuffer","longNum","Float64Array","parseInt","Array","Uint8Array","reverse","addFileToZip","_x14","_x15","_x16","_x17","_addFileToZip","_callee7","fileName","zipFile","_callee7$","_context7","fileStream","append","name"],"sources":["../../../../src/lib/utils/compress-util.ts"],"sourcesContent":["import {createGzip} from 'zlib';\nimport {join} from 'path';\nimport {promises as fs, createReadStream, createWriteStream} from 'fs';\nimport archiver from 'archiver';\nimport {removeFile} from './file-utils';\nimport {ChildProcessProxy} from '@loaders.gl/worker-utils';\nimport JSZip from 'jszip';\nimport {MD5Hash} from '@loaders.gl/crypto';\nimport crypt from 'crypt';\nimport {getAbsoluteFilePath} from './file-utils';\n\n/**\n * Compress file to gzip file\n *\n * @param pathFile - the path to the file\n * @return the path to the gzip file\n */\nexport function compressFileWithGzip(pathFile: string): Promise<string> {\n const compressedPathFile = `${pathFile}.gz`;\n const gzip = createGzip();\n const input = createReadStream(pathFile);\n const output = createWriteStream(compressedPathFile);\n\n return new Promise((resolve, reject) => {\n input.on('end', () => {\n console.log(`${compressedPathFile} compressed and saved.`); // eslint-disable-line no-undef,no-console\n resolve(compressedPathFile);\n });\n input.on('error', (error) => {\n console.log(`${compressedPathFile}: compression error!`); // eslint-disable-line no-undef,no-console\n reject(error);\n });\n input.pipe(gzip).pipe(output);\n });\n}\n\n/**\n * Compress files from map into slpk file\n *\n * @param fileMap - map with file paths (key: output path, value: input path)\n * @param outputFile - output slpk file\n * @param level - compression level\n */\nexport async function compressFilesWithZip(\n fileMap: {[key: string]: string},\n outputFile: string,\n level: number = 0\n) {\n // Before creating a new file, we need to delete the old file\n try {\n await removeFile(outputFile);\n } catch (e) {\n // Do nothing if old file doesn't exist\n }\n\n const output = createWriteStream(outputFile);\n const archive = archiver('zip', {\n zlib: {level} // Sets the compression level.\n });\n\n return new Promise(async (resolve, reject) => {\n // listen for all archive data to be writte\n // 'close' event is fired only when a file descriptor is involved\n output.on('close', function () {\n console.log(`${outputFile} saved.`); // eslint-disable-line no-undef,no-console\n console.log(`${archive.pointer()} total bytes`); // eslint-disable-line no-undef,no-console\n resolve(null);\n });\n\n // This event is fired when the data source is drained no matter what was the data source.\n // It is not part of this library but rather from the NodeJS Stream API.\n // @see: https://nodejs.org/api/stream.html#stream_event_end\n output.on('end', function () {\n console.log('Data has been drained'); // eslint-disable-line no-undef,no-console\n resolve(null);\n });\n\n // good practice to catch warnings (ie stat failures and other non-blocking errors)\n archive.on('warning', function (err) {\n console.log(err); // eslint-disable-line no-undef,no-console\n reject(err);\n });\n\n // good practice to catch this error explicitly\n archive.on('error', function (err) {\n reject(err);\n });\n\n // pipe archive data to the file\n archive.pipe(output);\n\n for (const subFileName in fileMap) {\n const subFileData = fileMap[subFileName];\n await appendFileToArchive(archive, subFileName, subFileData);\n }\n\n // finalize the archive (ie we are done appending files but streams have to finish yet)\n archive.finalize();\n });\n}\n\n/**\n * Compress files using external tool 'zip'/'7z'\n *\n * @param inputFolder - folder to archive - for cwd option\n * @param outputFile - output slpk file\n * @param level - compression level\n * @param inputFiles - input files path to pass to the executable as option\n * @param sevenZipExe - path to 7z.exe executable\n */\nexport async function compressWithChildProcess(\n inputFolder: string,\n outputFile: string,\n level: number,\n inputFiles: string,\n sevenZipExe: string\n) {\n // eslint-disable-next-line no-undef\n if (process.platform === 'win32') {\n await compressWithChildProcessWindows(inputFolder, outputFile, level, inputFiles, sevenZipExe);\n } else {\n await compressWithChildProcessUnix(inputFolder, outputFile, level, inputFiles);\n }\n}\n\n/**\n * Compress files using external linux tool 'zip'\n *\n * @param inputFolder - folder to archive - for cwd option\n * @param outputFile - output slpk file\n * @param level - compression level\n * @param inputFiles - input files path to pass to the executable as option\n */\nasync function compressWithChildProcessUnix(\n inputFolder: string,\n outputFile: string,\n level: number = 0,\n inputFiles: string = '.'\n) {\n const fullOutputFile = getAbsoluteFilePath(outputFile);\n const args = [`-${level}`, '-r', fullOutputFile, inputFiles];\n const childProcess = new ChildProcessProxy();\n await childProcess.start({\n command: 'zip',\n arguments: args,\n spawn: {\n cwd: inputFolder\n },\n wait: 0\n });\n}\n\n/**\n * Compress files using windows external tool '7z'\n *\n * @param inputFolder - folder to archive - for cwd option\n * @param outputFile - output slpk file\n * @param level - compression level\n * @param inputFiles - input files path to pass to the executable as option\n * @param sevenZipExe - path to 7z.exe executable\n */\nasync function compressWithChildProcessWindows(\n inputFolder: string,\n outputFile: string,\n level: number = 0,\n inputFiles: string = join('.', '*'),\n sevenZipExe: string\n) {\n // Workaround for @listfile issue. In 7z.exe @-leading files are handled as listfiles\n // https://sevenzip.osdn.jp/chm/cmdline/syntax.htm\n if (inputFiles[0] === '@') {\n inputFiles = `*${inputFiles.substr(1)}`;\n }\n\n const fullOutputFile = getAbsoluteFilePath(outputFile);\n const args = ['a', '-tzip', `-mx=${level}`, fullOutputFile, inputFiles];\n const childProcess = new ChildProcessProxy();\n await childProcess.start({\n command: sevenZipExe,\n arguments: args,\n spawn: {\n cwd: `${inputFolder}`\n },\n wait: 0\n });\n}\n\n/**\n * Generate hash file from zip archive\n * https://github.com/Esri/i3s-spec/blob/master/docs/1.7/slpk_hashtable.cmn.md\n *\n * @param inputZipFile\n * @param outputFile\n */\nexport async function generateHash128FromZip(inputZipFile: string, outputFile: string) {\n const input = await fs.readFile(inputZipFile);\n const zip = await JSZip.loadAsync(input);\n const hashTable: {key: string; value: string}[] = [];\n const zipFiles = zip.files;\n for (const relativePath in zipFiles) {\n const zipEntry = zipFiles[relativePath];\n // Had to use a workaround because the correct string is getting the wrong data\n // const content = await zipEntry.async('nodebuffer');\n // _data isn't described in the interface, so lint thought it was wrong\n const _data = '_data';\n const content = zipEntry[_data].compressedContent;\n if (zipEntry.dir) continue; // eslint-disable-line no-continue\n // eslint-disable-next-line no-undef\n const hash = await new MD5Hash().hash(Buffer.from(relativePath.toLowerCase()));\n // eslint-disable-next-line no-undef\n hashTable.push({key: atob(hash), value: content.byteOffset});\n }\n\n hashTable.sort((prev, next) => {\n if (prev.key === next.key) {\n return prev.value < next.value ? -1 : 1;\n }\n return prev.key < next.key ? -1 : 1;\n });\n\n const output = createWriteStream(outputFile);\n return new Promise((resolve, reject) => {\n output.on('close', function () {\n console.log(`${outputFile} generated and saved`); // eslint-disable-line\n resolve(null);\n });\n output.on('error', function (err) {\n console.log(err); // eslint-disable-line\n reject(err);\n });\n for (const key in hashTable) {\n const item = hashTable[key];\n const value = longToByteArray(item.value);\n // TODO: perhaps you need to wait for the 'drain' event if the write returns 'false'\n // eslint-disable-next-line no-undef\n output.write(Buffer.from(crypt.hexToBytes(item.key).concat(value)));\n }\n output.close();\n });\n}\n\n/**\n * Encode 64 bit value to byte array\n *\n * @param long - stringified number\n * @returns\n */\nfunction longToByteArray(long: string): number[] {\n const buffer = new ArrayBuffer(8); // JS numbers are 8 bytes long, or 64 bits\n const longNum = new Float64Array(buffer); // so equivalent to Float64\n longNum[0] = parseInt(long);\n return Array.from(new Uint8Array(buffer)).reverse(); // reverse to get little endian\n}\n\n/**\n * Add file to zip archive\n *\n * @param inputFile\n * @param fileName\n * @param zipFile\n * @param sevenZipExe\n */\nexport async function addFileToZip(\n inputFolder: string,\n fileName: string,\n zipFile: string,\n sevenZipExe: string\n) {\n await compressWithChildProcess(inputFolder, zipFile, 0, fileName, sevenZipExe);\n console.log(`${fileName} added to ${zipFile}.`); // eslint-disable-line\n}\n\n/**\n *\n * @param archive zip archive instance\n * @param subFileName file path inside archive\n * @param subFileData source file path\n * @returns\n */\nfunction appendFileToArchive(archive: any, subFileName: string, subFileData: string) {\n return new Promise((resolve) => {\n const fileStream = createReadStream(subFileData);\n console.log(`Compression start: ${subFileName}`); // eslint-disable-line no-undef,no-console\n fileStream.on('close', () => {\n console.log(`Compression finish: ${subFileName}`); // eslint-disable-line no-undef,no-console\n resolve(null);\n });\n archive.append(fileStream, {name: subFileName});\n });\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"compress-util.js","names":["_zlib","require","_path","_fs","_archiver","_interopRequireDefault","_fileUtils","_workerUtils","_jszip","_crypto","_crypt","compressFileWithGzip","pathFile","compressedPathFile","concat","gzip","createGzip","input","createReadStream","output","createWriteStream","Promise","resolve","reject","on","console","log","error","pipe","compressFilesWithZip","_x","_x2","_compressFilesWithZip","apply","arguments","_asyncToGenerator2","default","_regenerator","mark","_callee2","fileMap","outputFile","level","archive","_args2","wrap","_callee2$","_context2","prev","next","length","undefined","removeFile","t0","archiver","zlib","abrupt","_ref","_callee","subFileName","subFileData","_callee$","_context","pointer","err","keys","t1","done","value","appendFileToArchive","finalize","stop","_x18","_x19","compressWithChildProcess","_x3","_x4","_x5","_x6","_x7","_compressWithChildProcess","_callee3","inputFolder","inputFiles","sevenZipExe","_callee3$","_context3","process","platform","compressWithChildProcessWindows","compressWithChildProcessUnix","_x8","_x9","_compressWithChildProcessUnix","_callee4","fullOutputFile","args","childProcess","_args4","_callee4$","_context4","getAbsoluteFilePath","ChildProcessProxy","start","command","spawn","cwd","wait","_x10","_x11","_compressWithChildProcessWindows","_callee5","_args5","_callee5$","_context5","join","substr","generateHash128FromZip","_x12","_x13","_generateHash128FromZip","_callee6","inputZipFile","zip","hashTable","zipFiles","relativePath","zipEntry","_data","content","hash","_callee6$","_context6","fs","readFile","sent","JSZip","loadAsync","files","compressedContent","dir","MD5Hash","Buffer","from","toLowerCase","push","key","atob","byteOffset","sort","item","longToByteArray","write","crypt","hexToBytes","close","long","buffer","ArrayBuffer","longNum","Float64Array","parseInt","Array","Uint8Array","reverse","addFileToZip","_x14","_x15","_x16","_x17","_addFileToZip","_callee7","fileName","zipFile","_callee7$","_context7","fileStream","append","name"],"sources":["../../../../src/lib/utils/compress-util.ts"],"sourcesContent":["import {createGzip} from 'zlib';\nimport {join} from 'path';\nimport {promises as fs, createReadStream, createWriteStream} from 'fs';\nimport archiver from 'archiver';\nimport {removeFile} from './file-utils';\nimport {ChildProcessProxy} from '@loaders.gl/worker-utils';\nimport JSZip from 'jszip';\nimport {MD5Hash} from '@loaders.gl/crypto';\nimport crypt from 'crypt';\nimport {getAbsoluteFilePath} from './file-utils';\n\n/**\n * Compress file to gzip file\n *\n * @param pathFile - the path to the file\n * @return the path to the gzip file\n */\nexport function compressFileWithGzip(pathFile: string): Promise<string> {\n const compressedPathFile = `${pathFile}.gz`;\n const gzip = createGzip();\n const input = createReadStream(pathFile);\n const output = createWriteStream(compressedPathFile);\n\n return new Promise((resolve, reject) => {\n input.on('end', () => {\n console.log(`${compressedPathFile} compressed and saved.`); // eslint-disable-line no-undef,no-console\n resolve(compressedPathFile);\n });\n input.on('error', (error) => {\n console.log(`${compressedPathFile}: compression error!`); // eslint-disable-line no-undef,no-console\n reject(error);\n });\n input.pipe(gzip).pipe(output);\n });\n}\n\n/**\n * Compress files from map into slpk file\n *\n * @param fileMap - map with file paths (key: output path, value: input path)\n * @param outputFile - output slpk file\n * @param level - compression level\n */\nexport async function compressFilesWithZip(\n fileMap: {[key: string]: string},\n outputFile: string,\n level: number = 0\n) {\n // Before creating a new file, we need to delete the old file\n try {\n await removeFile(outputFile);\n } catch (e) {\n // Do nothing if old file doesn't exist\n }\n\n const output = createWriteStream(outputFile);\n const archive = archiver('zip', {\n zlib: {level} // Sets the compression level.\n });\n\n return new Promise(async (resolve, reject) => {\n // listen for all archive data to be writte\n // 'close' event is fired only when a file descriptor is involved\n output.on('close', function () {\n console.log(`${outputFile} saved.`); // eslint-disable-line no-undef,no-console\n console.log(`${archive.pointer()} total bytes`); // eslint-disable-line no-undef,no-console\n resolve(null);\n });\n\n // This event is fired when the data source is drained no matter what was the data source.\n // It is not part of this library but rather from the NodeJS Stream API.\n // @see: https://nodejs.org/api/stream.html#stream_event_end\n output.on('end', function () {\n console.log('Data has been drained'); // eslint-disable-line no-undef,no-console\n resolve(null);\n });\n\n // good practice to catch warnings (ie stat failures and other non-blocking errors)\n archive.on('warning', function (err) {\n console.log(err); // eslint-disable-line no-undef,no-console\n reject(err);\n });\n\n // good practice to catch this error explicitly\n archive.on('error', function (err) {\n reject(err);\n });\n\n // pipe archive data to the file\n archive.pipe(output);\n\n for (const subFileName in fileMap) {\n const subFileData = fileMap[subFileName];\n await appendFileToArchive(archive, subFileName, subFileData);\n }\n\n // finalize the archive (ie we are done appending files but streams have to finish yet)\n archive.finalize();\n });\n}\n\n/**\n * Compress files using external tool 'zip'/'7z'\n *\n * @param inputFolder - folder to archive - for cwd option\n * @param outputFile - output slpk file\n * @param level - compression level\n * @param inputFiles - input files path to pass to the executable as option\n * @param sevenZipExe - path to 7z.exe executable\n */\nexport async function compressWithChildProcess(\n inputFolder: string,\n outputFile: string,\n level: number,\n inputFiles: string,\n sevenZipExe: string\n) {\n // eslint-disable-next-line no-undef\n if (process.platform === 'win32') {\n await compressWithChildProcessWindows(inputFolder, outputFile, level, inputFiles, sevenZipExe);\n } else {\n await compressWithChildProcessUnix(inputFolder, outputFile, level, inputFiles);\n }\n}\n\n/**\n * Compress files using external linux tool 'zip'\n *\n * @param inputFolder - folder to archive - for cwd option\n * @param outputFile - output slpk file\n * @param level - compression level\n * @param inputFiles - input files path to pass to the executable as option\n */\nasync function compressWithChildProcessUnix(\n inputFolder: string,\n outputFile: string,\n level: number = 0,\n inputFiles: string = '.'\n) {\n const fullOutputFile = getAbsoluteFilePath(outputFile);\n const args = [`-${level}`, '-r', fullOutputFile, inputFiles];\n const childProcess = new ChildProcessProxy();\n await childProcess.start({\n command: 'zip',\n arguments: args,\n spawn: {\n cwd: inputFolder\n },\n wait: 0\n });\n}\n\n/**\n * Compress files using windows external tool '7z'\n *\n * @param inputFolder - folder to archive - for cwd option\n * @param outputFile - output slpk file\n * @param level - compression level\n * @param inputFiles - input files path to pass to the executable as option\n * @param sevenZipExe - path to 7z.exe executable\n */\nasync function compressWithChildProcessWindows(\n inputFolder: string,\n outputFile: string,\n level: number = 0,\n inputFiles: string = join('.', '*'),\n sevenZipExe: string\n) {\n // Workaround for @listfile issue. In 7z.exe @-leading files are handled as listfiles\n // https://sevenzip.osdn.jp/chm/cmdline/syntax.htm\n if (inputFiles[0] === '@') {\n inputFiles = `*${inputFiles.substr(1)}`;\n }\n\n const fullOutputFile = getAbsoluteFilePath(outputFile);\n const args = ['a', '-tzip', `-mx=${level}`, fullOutputFile, inputFiles];\n const childProcess = new ChildProcessProxy();\n await childProcess.start({\n command: sevenZipExe,\n arguments: args,\n spawn: {\n cwd: `${inputFolder}`\n },\n wait: 0\n });\n}\n\n/**\n * Generate hash file from zip archive\n * https://github.com/Esri/i3s-spec/blob/master/docs/1.7/slpk_hashtable.cmn.md\n *\n * @param inputZipFile\n * @param outputFile\n */\nexport async function generateHash128FromZip(inputZipFile: string, outputFile: string) {\n const input = await fs.readFile(inputZipFile);\n const zip = await JSZip.loadAsync(input);\n const hashTable: {key: string; value: string}[] = [];\n const zipFiles = zip.files;\n for (const relativePath in zipFiles) {\n const zipEntry = zipFiles[relativePath];\n // Had to use a workaround because the correct string is getting the wrong data\n // const content = await zipEntry.async('nodebuffer');\n // _data isn't described in the interface, so lint thought it was wrong\n const _data = '_data';\n const content = zipEntry[_data].compressedContent;\n if (zipEntry.dir) continue; // eslint-disable-line no-continue\n // eslint-disable-next-line no-undef\n const hash = await new MD5Hash().hash(Buffer.from(relativePath.toLowerCase()), 'base64');\n // eslint-disable-next-line no-undef\n hashTable.push({key: atob(hash), value: content.byteOffset});\n }\n\n hashTable.sort((prev, next) => {\n if (prev.key === next.key) {\n return prev.value < next.value ? -1 : 1;\n }\n return prev.key < next.key ? -1 : 1;\n });\n\n const output = createWriteStream(outputFile);\n return new Promise((resolve, reject) => {\n output.on('close', function () {\n console.log(`${outputFile} generated and saved`); // eslint-disable-line\n resolve(null);\n });\n output.on('error', function (err) {\n console.log(err); // eslint-disable-line\n reject(err);\n });\n for (const key in hashTable) {\n const item = hashTable[key];\n const value = longToByteArray(item.value);\n // TODO: perhaps you need to wait for the 'drain' event if the write returns 'false'\n // eslint-disable-next-line no-undef\n output.write(Buffer.from(crypt.hexToBytes(item.key).concat(value)));\n }\n output.close();\n });\n}\n\n/**\n * Encode 64 bit value to byte array\n *\n * @param long - stringified number\n * @returns\n */\nfunction longToByteArray(long: string): number[] {\n const buffer = new ArrayBuffer(8); // JS numbers are 8 bytes long, or 64 bits\n const longNum = new Float64Array(buffer); // so equivalent to Float64\n longNum[0] = parseInt(long);\n return Array.from(new Uint8Array(buffer)).reverse(); // reverse to get little endian\n}\n\n/**\n * Add file to zip archive\n *\n * @param inputFile\n * @param fileName\n * @param zipFile\n * @param sevenZipExe\n */\nexport async function addFileToZip(\n inputFolder: string,\n fileName: string,\n zipFile: string,\n sevenZipExe: string\n) {\n await compressWithChildProcess(inputFolder, zipFile, 0, fileName, sevenZipExe);\n console.log(`${fileName} added to ${zipFile}.`); // eslint-disable-line\n}\n\n/**\n *\n * @param archive zip archive instance\n * @param subFileName file path inside archive\n * @param subFileData source file path\n * @returns\n */\nfunction appendFileToArchive(archive: any, subFileName: string, subFileData: string) {\n return new Promise((resolve) => {\n const fileStream = createReadStream(subFileData);\n console.log(`Compression start: ${subFileName}`); // eslint-disable-line no-undef,no-console\n fileStream.on('close', () => {\n console.log(`Compression finish: ${subFileName}`); // eslint-disable-line no-undef,no-console\n resolve(null);\n });\n archive.append(fileStream, {name: subFileName});\n });\n}\n"],"mappings":"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"}
|
package/dist/es5/pgm-loader.js
CHANGED
|
@@ -14,7 +14,7 @@ exports.PGMLoader = void 0;
|
|
|
14
14
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
15
15
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
16
16
|
var _geoid = require("@math.gl/geoid");
|
|
17
|
-
var VERSION = typeof "4.0.0-alpha.
|
|
17
|
+
var VERSION = typeof "4.0.0-alpha.26" !== 'undefined' ? "4.0.0-alpha.26" : 'latest';
|
|
18
18
|
var PGMLoader = {
|
|
19
19
|
name: 'PGM - Netpbm grayscale image format',
|
|
20
20
|
id: 'pgm',
|
|
@@ -15,7 +15,7 @@ export default class B3dmConverter {
|
|
|
15
15
|
}
|
|
16
16
|
async convert(i3sAttributesData) {
|
|
17
17
|
let featureAttributes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
18
|
-
const gltf = await this.
|
|
18
|
+
const gltf = await this.buildGLTF(i3sAttributesData, featureAttributes);
|
|
19
19
|
const b3dm = encodeSync({
|
|
20
20
|
gltfEncoded: new Uint8Array(gltf),
|
|
21
21
|
type: 'b3dm',
|
|
@@ -24,7 +24,7 @@ export default class B3dmConverter {
|
|
|
24
24
|
}, Tile3DWriter);
|
|
25
25
|
return b3dm;
|
|
26
26
|
}
|
|
27
|
-
async
|
|
27
|
+
async buildGLTF(i3sAttributesData, featureAttributes) {
|
|
28
28
|
const {
|
|
29
29
|
tileContent,
|
|
30
30
|
textureFormat,
|
|
@@ -37,8 +37,8 @@ export default class B3dmConverter {
|
|
|
37
37
|
modelMatrix
|
|
38
38
|
} = tileContent;
|
|
39
39
|
const gltfBuilder = new GLTFScenegraph();
|
|
40
|
-
const textureIndex = await this.
|
|
41
|
-
const pbrMaterialInfo = this.
|
|
40
|
+
const textureIndex = await this._addI3sTextureToGLTF(tileContent, textureFormat, gltfBuilder);
|
|
41
|
+
const pbrMaterialInfo = this._convertI3sMaterialToGLTFMaterial(material, textureIndex);
|
|
42
42
|
const materialIndex = gltfBuilder.addMaterial(pbrMaterialInfo);
|
|
43
43
|
const positions = attributes.positions;
|
|
44
44
|
const positionsValue = positions.value;
|
|
@@ -72,7 +72,7 @@ export default class B3dmConverter {
|
|
|
72
72
|
const gltfBuffer = encodeSync(gltfBuilder.gltf, GLTFWriter);
|
|
73
73
|
return gltfBuffer;
|
|
74
74
|
}
|
|
75
|
-
async
|
|
75
|
+
async _addI3sTextureToGLTF(tileContent, textureFormat, gltfBuilder) {
|
|
76
76
|
const {
|
|
77
77
|
texture,
|
|
78
78
|
material,
|
|
@@ -144,7 +144,7 @@ export default class B3dmConverter {
|
|
|
144
144
|
return 'image/jpeg';
|
|
145
145
|
}
|
|
146
146
|
}
|
|
147
|
-
|
|
147
|
+
_convertI3sMaterialToGLTFMaterial(material, textureIndex) {
|
|
148
148
|
const isTextureIndexExists = textureIndex !== null;
|
|
149
149
|
if (!material) {
|
|
150
150
|
material = {
|
|
@@ -166,11 +166,11 @@ export default class B3dmConverter {
|
|
|
166
166
|
return material;
|
|
167
167
|
}
|
|
168
168
|
if (textureIndex !== null) {
|
|
169
|
-
material = this.
|
|
169
|
+
material = this._setGLTFTexture(material, textureIndex);
|
|
170
170
|
}
|
|
171
171
|
return material;
|
|
172
172
|
}
|
|
173
|
-
|
|
173
|
+
_setGLTFTexture(materialDefinition, textureIndex) {
|
|
174
174
|
const material = {
|
|
175
175
|
...materialDefinition,
|
|
176
176
|
pbrMetallicRoughness: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"b3dm-converter.js","names":["encodeSync","GLTFScenegraph","GLTFWriter","Tile3DWriter","Matrix4","Vector3","Ellipsoid","convertTextureAtlas","generateSyntheticIndices","Z_UP_TO_Y_UP_MATRIX","scratchVector","B3dmConverter","constructor","_defineProperty","convert","i3sAttributesData","featureAttributes","arguments","length","undefined","gltf","buildGltf","b3dm","gltfEncoded","Uint8Array","type","featuresLength","_getFeaturesLength","batchTable","tileContent","textureFormat","box","material","attributes","indices","originalIndices","modelMatrix","gltfBuilder","textureIndex","_addI3sTextureToGltf","pbrMaterialInfo","_convertI3sMaterialToGltfMaterial","materialIndex","addMaterial","positions","positionsValue","value","uvRegions","texCoords","cartesianOrigin","cartographicOrigin","WGS84","cartesianToCartographic","_normalizePositions","_createBatchIds","normals","_checkNormals","size","meshIndex","addMesh","mode","transformMatrix","_generateTransformMatrix","nodeIndex","addNode","matrix","sceneIndex","addScene","nodeIndices","setDefaultScene","createBinaryChunk","gltfBuffer","texture","selectedTexture","pbrMetallicRoughness","baseColorTexture","source","image","mimeType","_deduceMimeTypeFromFormat","imageIndex","addImage","addTexture","colors","newPositionsValue","Float32Array","index","vertex","subarray","cartesianOriginVector","vertexVector","Array","from","transform","add","cartographicToCartesian","subtract","set","translateOriginMatrix","translate","result","multiplyLeft","i3sContent","featureIds","OBJECTID","objectIds","i","featureId","batchId","indexOf","_BATCHID","byteOffset","format","console","warn","concat","isTextureIndexExists","alphaMode","doubleSided","metallicFactor","roughnessFactor","texCoord","baseColorFactor","_setGltfTexture","materialDefinition","emissiveTexture","metallicRoughnessTexture","normalTexture","occlusionTexture","firstKey","Object","keys","find"],"sources":["../../../../src/3d-tiles-converter/helpers/b3dm-converter.ts"],"sourcesContent":["import type {I3STileContent} from '@loaders.gl/i3s';\nimport {encodeSync} from '@loaders.gl/core';\nimport {GLTFScenegraph, GLTFWriter} from '@loaders.gl/gltf';\nimport {Tile3DWriter} from '@loaders.gl/3d-tiles';\nimport {Matrix4, Vector3} from '@math.gl/core';\nimport {Ellipsoid} from '@math.gl/geospatial';\nimport {convertTextureAtlas} from './texture-atlas';\nimport {generateSyntheticIndices} from '../../lib/utils/geometry-utils';\n\nconst Z_UP_TO_Y_UP_MATRIX = new Matrix4([1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1]);\nconst scratchVector = new Vector3();\n\nexport type I3SAttributesData = {\n tileContent: I3STileContent;\n box: number[];\n textureFormat: string;\n};\n\n/**\n * Converts content of an I3S node to *.b3dm's file content\n */\nexport default class B3dmConverter {\n // @ts-expect-error\n rtcCenter: Float32Array;\n i3sTile: any;\n\n /**\n * The starter of content conversion\n * @param i3sTile - Tile3D instance for I3S node\n * @returns - encoded content\n */\n async convert(\n i3sAttributesData: I3SAttributesData,\n featureAttributes: any = null\n ): Promise<ArrayBuffer> {\n const gltf = await this.buildGltf(i3sAttributesData, featureAttributes);\n const b3dm = encodeSync(\n {\n gltfEncoded: new Uint8Array(gltf),\n type: 'b3dm',\n featuresLength: this._getFeaturesLength(featureAttributes),\n batchTable: featureAttributes\n },\n Tile3DWriter\n );\n return b3dm;\n }\n\n /**\n * Build and encode gltf\n * @param i3sTile - Tile3D instance for I3S node\n * @returns - encoded glb content\n */\n async buildGltf(\n i3sAttributesData: I3SAttributesData,\n featureAttributes: any\n ): Promise<ArrayBuffer> {\n const {tileContent, textureFormat, box} = i3sAttributesData;\n const {material, attributes, indices: originalIndices, modelMatrix} = tileContent;\n const gltfBuilder = new GLTFScenegraph();\n\n const textureIndex = await this._addI3sTextureToGltf(tileContent, textureFormat, gltfBuilder);\n const pbrMaterialInfo = this._convertI3sMaterialToGltfMaterial(material, textureIndex);\n const materialIndex = gltfBuilder.addMaterial(pbrMaterialInfo);\n\n const positions = attributes.positions;\n const positionsValue = positions.value;\n\n if (attributes.uvRegions && attributes.texCoords) {\n attributes.texCoords.value = convertTextureAtlas(\n attributes.texCoords.value,\n attributes.uvRegions.value\n );\n }\n\n const cartesianOrigin = new Vector3(box);\n const cartographicOrigin = Ellipsoid.WGS84.cartesianToCartographic(\n cartesianOrigin,\n new Vector3()\n );\n\n attributes.positions.value = this._normalizePositions(\n positionsValue,\n cartesianOrigin,\n cartographicOrigin,\n modelMatrix\n );\n this._createBatchIds(tileContent, featureAttributes);\n if (attributes.normals && !this._checkNormals(attributes.normals.value)) {\n delete attributes.normals;\n }\n const indices =\n originalIndices || generateSyntheticIndices(positionsValue.length / positions.size);\n const meshIndex = gltfBuilder.addMesh({\n attributes,\n indices,\n material: materialIndex,\n mode: 4\n });\n const transformMatrix = this._generateTransformMatrix(cartesianOrigin);\n const nodeIndex = gltfBuilder.addNode({meshIndex, matrix: transformMatrix});\n const sceneIndex = gltfBuilder.addScene({nodeIndices: [nodeIndex]});\n gltfBuilder.setDefaultScene(sceneIndex);\n\n gltfBuilder.createBinaryChunk();\n\n const gltfBuffer = encodeSync(gltfBuilder.gltf, GLTFWriter);\n\n return gltfBuffer;\n }\n\n /**\n * Update gltfBuilder with texture from I3S tile\n * @param {object} i3sTile - Tile3D object\n * @param {GLTFScenegraph} gltfBuilder - gltfScenegraph instance to construct GLTF\n * @returns {Promise<number | null>} - GLTF texture index\n */\n async _addI3sTextureToGltf(tileContent, textureFormat, gltfBuilder) {\n const {texture, material, attributes} = tileContent;\n let textureIndex = null;\n let selectedTexture = texture;\n if (!texture && material) {\n selectedTexture =\n material.pbrMetallicRoughness &&\n material.pbrMetallicRoughness.baseColorTexture &&\n material.pbrMetallicRoughness.baseColorTexture.texture.source.image;\n }\n if (selectedTexture) {\n const mimeType = this._deduceMimeTypeFromFormat(textureFormat);\n const imageIndex = gltfBuilder.addImage(selectedTexture, mimeType);\n textureIndex = gltfBuilder.addTexture({imageIndex});\n delete attributes.colors;\n }\n return textureIndex;\n }\n\n /**\n * Generate a positions array which is correct for 3DTiles/GLTF format\n * @param {Float64Array} positionsValue - the input geometry positions array\n * @param {number[]} cartesianOrigin - the tile center in the cartesian coordinate system\n * @param {number[]} cartographicOrigin - the tile center in the cartographic coordinate system\n * @param {number[]} modelMatrix - the model matrix of geometry\n * @returns {Float32Array} - the output geometry positions array\n */\n _normalizePositions(positionsValue, cartesianOrigin, cartographicOrigin, modelMatrix) {\n const newPositionsValue = new Float32Array(positionsValue.length);\n for (let index = 0; index < positionsValue.length; index += 3) {\n const vertex = positionsValue.subarray(index, index + 3);\n const cartesianOriginVector = new Vector3(cartesianOrigin);\n let vertexVector = new Vector3(Array.from(vertex))\n .transform(modelMatrix)\n .add(cartographicOrigin);\n Ellipsoid.WGS84.cartographicToCartesian(vertexVector, scratchVector);\n vertexVector = scratchVector.subtract(cartesianOriginVector);\n newPositionsValue.set(vertexVector, index);\n }\n return newPositionsValue;\n }\n\n /**\n * Generate the transformation matrix for GLTF node:\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#reference-node\n * 1. Create the translate transformation from cartesianOrigin (the positions array stores offsets from this cartesianOrigin)\n * 2. Create the rotation transformation to rotate model from z-up coordinates (I3S specific) to y-up coordinates (GLTF specific)\n * @param {number[]} cartesianOrigin - the tile center in the cartesian coordinate system\n * @returns {Matrix4} - an array of 16 numbers (4x4 matrix)\n */\n _generateTransformMatrix(cartesianOrigin) {\n const translateOriginMatrix = new Matrix4().translate(cartesianOrigin);\n const result = translateOriginMatrix.multiplyLeft(Z_UP_TO_Y_UP_MATRIX);\n return result;\n }\n\n /**\n * Create _BATCHID attribute\n * @param {Object} i3sContent - the source object\n * @returns {void}\n */\n _createBatchIds(i3sContent, featureAttributes) {\n const {featureIds} = i3sContent;\n const {OBJECTID: objectIds} = featureAttributes || {};\n if (!featureIds || !objectIds) {\n return;\n }\n\n for (let i = 0; i < featureIds.length; i++) {\n const featureId = featureIds[i];\n const batchId = objectIds.indexOf(featureId);\n featureIds[i] = batchId;\n }\n\n i3sContent.attributes._BATCHID = {\n size: 1,\n byteOffset: 0,\n value: featureIds\n };\n }\n\n /**\n * Deduce mime type by format from `textureSetDefinition.formats[0].format`\n * https://github.com/Esri/i3s-spec/blob/master/docs/1.7/textureSetDefinitionFormat.cmn.md\n * @param {string} format - format name\n * @returns {string} mime type.\n */\n _deduceMimeTypeFromFormat(format) {\n switch (format) {\n case 'jpg':\n return 'image/jpeg';\n case 'png':\n return 'image/png';\n case 'ktx2':\n return 'image/ktx2';\n default:\n console.warn(`Unexpected texture format in I3S: ${format}`); // eslint-disable-line no-console, no-undef\n return 'image/jpeg';\n }\n }\n\n /**\n * Convert i3s material to GLTF compatible material\n * @param {object} material - i3s material definition\n * @param {number | null} textureIndex - texture index in GLTF\n * @returns {object} GLTF material\n */\n _convertI3sMaterialToGltfMaterial(material, textureIndex) {\n const isTextureIndexExists = textureIndex !== null;\n\n if (!material) {\n material = {\n alphaMode: 'OPAQUE',\n doubleSided: false,\n pbrMetallicRoughness: {\n metallicFactor: 0,\n roughnessFactor: 1\n }\n };\n\n if (isTextureIndexExists) {\n material.pbrMetallicRoughness.baseColorTexture = {\n index: textureIndex,\n texCoord: 0\n };\n } else {\n material.pbrMetallicRoughness.baseColorFactor = [1, 1, 1, 1];\n }\n\n return material;\n }\n\n if (textureIndex !== null) {\n material = this._setGltfTexture(material, textureIndex);\n }\n\n return material;\n }\n\n /**\n * Set texture properties in material with GLTF textureIndex\n * @param {object} materialDefinition - i3s material definition\n * @param {number} textureIndex - texture index in GLTF\n * @returns {void}\n */\n _setGltfTexture(materialDefinition, textureIndex) {\n const material = {\n ...materialDefinition,\n pbrMetallicRoughness: {...materialDefinition.pbrMetallicRoughness}\n };\n // I3SLoader now support loading only one texture. This elseif sequence will assign this texture to one of\n // properties defined in materialDefinition\n if (\n materialDefinition.pbrMetallicRoughness &&\n materialDefinition.pbrMetallicRoughness.baseColorTexture\n ) {\n material.pbrMetallicRoughness.baseColorTexture = {\n index: textureIndex,\n texCoord: 0\n };\n } else if (materialDefinition.emissiveTexture) {\n material.emissiveTexture = {\n index: textureIndex,\n texCoord: 0\n };\n } else if (\n materialDefinition.pbrMetallicRoughness &&\n materialDefinition.pbrMetallicRoughness.metallicRoughnessTexture\n ) {\n material.pbrMetallicRoughness.metallicRoughnessTexture = {\n index: textureIndex,\n texCoord: 0\n };\n } else if (materialDefinition.normalTexture) {\n material.normalTexture = {\n index: textureIndex,\n texCoord: 0\n };\n } else if (materialDefinition.occlusionTexture) {\n material.occlusionTexture = {\n index: textureIndex,\n texCoord: 0\n };\n }\n return material;\n }\n\n /*\n * Returns Features length based on attribute array in attribute object.\n * @param {Object} attributes\n * @returns {Number} Features length .\n */\n _getFeaturesLength(attributes) {\n if (!attributes) {\n return 0;\n }\n const firstKey = Object.keys(attributes)[0];\n return firstKey ? attributes[firstKey].length : 0;\n }\n\n /* Checks that normals buffer is correct\n * @param {TypedArray} normals\n * @returns {boolean} true - normals are correct; false - normals are incorrect\n */\n _checkNormals(normals) {\n // If all normals === 0, the resulting tileset is all in black colors on Cesium\n return normals.find((value) => value);\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"b3dm-converter.js","names":["encodeSync","GLTFScenegraph","GLTFWriter","Tile3DWriter","Matrix4","Vector3","Ellipsoid","convertTextureAtlas","generateSyntheticIndices","Z_UP_TO_Y_UP_MATRIX","scratchVector","B3dmConverter","constructor","_defineProperty","convert","i3sAttributesData","featureAttributes","arguments","length","undefined","gltf","buildGLTF","b3dm","gltfEncoded","Uint8Array","type","featuresLength","_getFeaturesLength","batchTable","tileContent","textureFormat","box","material","attributes","indices","originalIndices","modelMatrix","gltfBuilder","textureIndex","_addI3sTextureToGLTF","pbrMaterialInfo","_convertI3sMaterialToGLTFMaterial","materialIndex","addMaterial","positions","positionsValue","value","uvRegions","texCoords","cartesianOrigin","cartographicOrigin","WGS84","cartesianToCartographic","_normalizePositions","_createBatchIds","normals","_checkNormals","size","meshIndex","addMesh","mode","transformMatrix","_generateTransformMatrix","nodeIndex","addNode","matrix","sceneIndex","addScene","nodeIndices","setDefaultScene","createBinaryChunk","gltfBuffer","texture","selectedTexture","pbrMetallicRoughness","baseColorTexture","source","image","mimeType","_deduceMimeTypeFromFormat","imageIndex","addImage","addTexture","colors","newPositionsValue","Float32Array","index","vertex","subarray","cartesianOriginVector","vertexVector","Array","from","transform","add","cartographicToCartesian","subtract","set","translateOriginMatrix","translate","result","multiplyLeft","i3sContent","featureIds","OBJECTID","objectIds","i","featureId","batchId","indexOf","_BATCHID","byteOffset","format","console","warn","concat","isTextureIndexExists","alphaMode","doubleSided","metallicFactor","roughnessFactor","texCoord","baseColorFactor","_setGLTFTexture","materialDefinition","emissiveTexture","metallicRoughnessTexture","normalTexture","occlusionTexture","firstKey","Object","keys","find"],"sources":["../../../../src/3d-tiles-converter/helpers/b3dm-converter.ts"],"sourcesContent":["import type {I3STileContent} from '@loaders.gl/i3s';\nimport {encodeSync} from '@loaders.gl/core';\nimport {GLTFScenegraph, GLTFWriter} from '@loaders.gl/gltf';\nimport {Tile3DWriter} from '@loaders.gl/3d-tiles';\nimport {Matrix4, Vector3} from '@math.gl/core';\nimport {Ellipsoid} from '@math.gl/geospatial';\nimport {convertTextureAtlas} from './texture-atlas';\nimport {generateSyntheticIndices} from '../../lib/utils/geometry-utils';\n\nconst Z_UP_TO_Y_UP_MATRIX = new Matrix4([1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1]);\nconst scratchVector = new Vector3();\n\nexport type I3SAttributesData = {\n tileContent: I3STileContent;\n box: number[];\n textureFormat: string;\n};\n\n/**\n * Converts content of an I3S node to *.b3dm's file content\n */\nexport default class B3dmConverter {\n // @ts-expect-error\n rtcCenter: Float32Array;\n i3sTile: any;\n\n /**\n * The starter of content conversion\n * @param i3sTile - Tile3D instance for I3S node\n * @returns - encoded content\n */\n async convert(\n i3sAttributesData: I3SAttributesData,\n featureAttributes: any = null\n ): Promise<ArrayBuffer> {\n const gltf = await this.buildGLTF(i3sAttributesData, featureAttributes);\n const b3dm = encodeSync(\n {\n gltfEncoded: new Uint8Array(gltf),\n type: 'b3dm',\n featuresLength: this._getFeaturesLength(featureAttributes),\n batchTable: featureAttributes\n },\n Tile3DWriter\n );\n return b3dm;\n }\n\n /**\n * Build and encode gltf\n * @param i3sTile - Tile3D instance for I3S node\n * @returns - encoded glb content\n */\n async buildGLTF(\n i3sAttributesData: I3SAttributesData,\n featureAttributes: any\n ): Promise<ArrayBuffer> {\n const {tileContent, textureFormat, box} = i3sAttributesData;\n const {material, attributes, indices: originalIndices, modelMatrix} = tileContent;\n const gltfBuilder = new GLTFScenegraph();\n\n const textureIndex = await this._addI3sTextureToGLTF(tileContent, textureFormat, gltfBuilder);\n const pbrMaterialInfo = this._convertI3sMaterialToGLTFMaterial(material, textureIndex);\n const materialIndex = gltfBuilder.addMaterial(pbrMaterialInfo);\n\n const positions = attributes.positions;\n const positionsValue = positions.value;\n\n if (attributes.uvRegions && attributes.texCoords) {\n attributes.texCoords.value = convertTextureAtlas(\n attributes.texCoords.value,\n attributes.uvRegions.value\n );\n }\n\n const cartesianOrigin = new Vector3(box);\n const cartographicOrigin = Ellipsoid.WGS84.cartesianToCartographic(\n cartesianOrigin,\n new Vector3()\n );\n\n attributes.positions.value = this._normalizePositions(\n positionsValue,\n cartesianOrigin,\n cartographicOrigin,\n modelMatrix\n );\n this._createBatchIds(tileContent, featureAttributes);\n if (attributes.normals && !this._checkNormals(attributes.normals.value)) {\n delete attributes.normals;\n }\n const indices =\n originalIndices || generateSyntheticIndices(positionsValue.length / positions.size);\n const meshIndex = gltfBuilder.addMesh({\n attributes,\n indices,\n material: materialIndex,\n mode: 4\n });\n const transformMatrix = this._generateTransformMatrix(cartesianOrigin);\n const nodeIndex = gltfBuilder.addNode({meshIndex, matrix: transformMatrix});\n const sceneIndex = gltfBuilder.addScene({nodeIndices: [nodeIndex]});\n gltfBuilder.setDefaultScene(sceneIndex);\n\n gltfBuilder.createBinaryChunk();\n\n const gltfBuffer = encodeSync(gltfBuilder.gltf, GLTFWriter);\n\n return gltfBuffer;\n }\n\n /**\n * Update gltfBuilder with texture from I3S tile\n * @param {object} i3sTile - Tile3D object\n * @param {GLTFScenegraph} gltfBuilder - gltfScenegraph instance to construct GLTF\n * @returns {Promise<number | null>} - GLTF texture index\n */\n async _addI3sTextureToGLTF(tileContent, textureFormat, gltfBuilder) {\n const {texture, material, attributes} = tileContent;\n let textureIndex = null;\n let selectedTexture = texture;\n if (!texture && material) {\n selectedTexture =\n material.pbrMetallicRoughness &&\n material.pbrMetallicRoughness.baseColorTexture &&\n material.pbrMetallicRoughness.baseColorTexture.texture.source.image;\n }\n if (selectedTexture) {\n const mimeType = this._deduceMimeTypeFromFormat(textureFormat);\n const imageIndex = gltfBuilder.addImage(selectedTexture, mimeType);\n textureIndex = gltfBuilder.addTexture({imageIndex});\n delete attributes.colors;\n }\n return textureIndex;\n }\n\n /**\n * Generate a positions array which is correct for 3DTiles/GLTF format\n * @param {Float64Array} positionsValue - the input geometry positions array\n * @param {number[]} cartesianOrigin - the tile center in the cartesian coordinate system\n * @param {number[]} cartographicOrigin - the tile center in the cartographic coordinate system\n * @param {number[]} modelMatrix - the model matrix of geometry\n * @returns {Float32Array} - the output geometry positions array\n */\n _normalizePositions(positionsValue, cartesianOrigin, cartographicOrigin, modelMatrix) {\n const newPositionsValue = new Float32Array(positionsValue.length);\n for (let index = 0; index < positionsValue.length; index += 3) {\n const vertex = positionsValue.subarray(index, index + 3);\n const cartesianOriginVector = new Vector3(cartesianOrigin);\n let vertexVector = new Vector3(Array.from(vertex))\n .transform(modelMatrix)\n .add(cartographicOrigin);\n Ellipsoid.WGS84.cartographicToCartesian(vertexVector, scratchVector);\n vertexVector = scratchVector.subtract(cartesianOriginVector);\n newPositionsValue.set(vertexVector, index);\n }\n return newPositionsValue;\n }\n\n /**\n * Generate the transformation matrix for GLTF node:\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#reference-node\n * 1. Create the translate transformation from cartesianOrigin (the positions array stores offsets from this cartesianOrigin)\n * 2. Create the rotation transformation to rotate model from z-up coordinates (I3S specific) to y-up coordinates (GLTF specific)\n * @param {number[]} cartesianOrigin - the tile center in the cartesian coordinate system\n * @returns {Matrix4} - an array of 16 numbers (4x4 matrix)\n */\n _generateTransformMatrix(cartesianOrigin) {\n const translateOriginMatrix = new Matrix4().translate(cartesianOrigin);\n const result = translateOriginMatrix.multiplyLeft(Z_UP_TO_Y_UP_MATRIX);\n return result;\n }\n\n /**\n * Create _BATCHID attribute\n * @param {Object} i3sContent - the source object\n * @returns {void}\n */\n _createBatchIds(i3sContent, featureAttributes) {\n const {featureIds} = i3sContent;\n const {OBJECTID: objectIds} = featureAttributes || {};\n if (!featureIds || !objectIds) {\n return;\n }\n\n for (let i = 0; i < featureIds.length; i++) {\n const featureId = featureIds[i];\n const batchId = objectIds.indexOf(featureId);\n featureIds[i] = batchId;\n }\n\n i3sContent.attributes._BATCHID = {\n size: 1,\n byteOffset: 0,\n value: featureIds\n };\n }\n\n /**\n * Deduce mime type by format from `textureSetDefinition.formats[0].format`\n * https://github.com/Esri/i3s-spec/blob/master/docs/1.7/textureSetDefinitionFormat.cmn.md\n * @param {string} format - format name\n * @returns {string} mime type.\n */\n _deduceMimeTypeFromFormat(format) {\n switch (format) {\n case 'jpg':\n return 'image/jpeg';\n case 'png':\n return 'image/png';\n case 'ktx2':\n return 'image/ktx2';\n default:\n console.warn(`Unexpected texture format in I3S: ${format}`); // eslint-disable-line no-console, no-undef\n return 'image/jpeg';\n }\n }\n\n /**\n * Convert i3s material to GLTF compatible material\n * @param {object} material - i3s material definition\n * @param {number | null} textureIndex - texture index in GLTF\n * @returns {object} GLTF material\n */\n _convertI3sMaterialToGLTFMaterial(material, textureIndex) {\n const isTextureIndexExists = textureIndex !== null;\n\n if (!material) {\n material = {\n alphaMode: 'OPAQUE',\n doubleSided: false,\n pbrMetallicRoughness: {\n metallicFactor: 0,\n roughnessFactor: 1\n }\n };\n\n if (isTextureIndexExists) {\n material.pbrMetallicRoughness.baseColorTexture = {\n index: textureIndex,\n texCoord: 0\n };\n } else {\n material.pbrMetallicRoughness.baseColorFactor = [1, 1, 1, 1];\n }\n\n return material;\n }\n\n if (textureIndex !== null) {\n material = this._setGLTFTexture(material, textureIndex);\n }\n\n return material;\n }\n\n /**\n * Set texture properties in material with GLTF textureIndex\n * @param {object} materialDefinition - i3s material definition\n * @param {number} textureIndex - texture index in GLTF\n * @returns {void}\n */\n _setGLTFTexture(materialDefinition, textureIndex) {\n const material = {\n ...materialDefinition,\n pbrMetallicRoughness: {...materialDefinition.pbrMetallicRoughness}\n };\n // I3SLoader now support loading only one texture. This elseif sequence will assign this texture to one of\n // properties defined in materialDefinition\n if (\n materialDefinition.pbrMetallicRoughness &&\n materialDefinition.pbrMetallicRoughness.baseColorTexture\n ) {\n material.pbrMetallicRoughness.baseColorTexture = {\n index: textureIndex,\n texCoord: 0\n };\n } else if (materialDefinition.emissiveTexture) {\n material.emissiveTexture = {\n index: textureIndex,\n texCoord: 0\n };\n } else if (\n materialDefinition.pbrMetallicRoughness &&\n materialDefinition.pbrMetallicRoughness.metallicRoughnessTexture\n ) {\n material.pbrMetallicRoughness.metallicRoughnessTexture = {\n index: textureIndex,\n texCoord: 0\n };\n } else if (materialDefinition.normalTexture) {\n material.normalTexture = {\n index: textureIndex,\n texCoord: 0\n };\n } else if (materialDefinition.occlusionTexture) {\n material.occlusionTexture = {\n index: textureIndex,\n texCoord: 0\n };\n }\n return material;\n }\n\n /*\n * Returns Features length based on attribute array in attribute object.\n * @param {Object} attributes\n * @returns {Number} Features length .\n */\n _getFeaturesLength(attributes) {\n if (!attributes) {\n return 0;\n }\n const firstKey = Object.keys(attributes)[0];\n return firstKey ? attributes[firstKey].length : 0;\n }\n\n /* Checks that normals buffer is correct\n * @param {TypedArray} normals\n * @returns {boolean} true - normals are correct; false - normals are incorrect\n */\n _checkNormals(normals) {\n // If all normals === 0, the resulting tileset is all in black colors on Cesium\n return normals.find((value) => value);\n }\n}\n"],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ import { join } from 'path';
|
|
|
5
5
|
import { ChildProcessProxy } from '@loaders.gl/worker-utils';
|
|
6
6
|
import { DRACO_EXTERNAL_LIBRARIES, DRACO_EXTERNAL_LIBRARY_URLS } from '@loaders.gl/draco';
|
|
7
7
|
import { BASIS_EXTERNAL_LIBRARIES } from '@loaders.gl/textures';
|
|
8
|
-
const VERSION = typeof "4.0.0-alpha.
|
|
8
|
+
const VERSION = typeof "4.0.0-alpha.26" !== 'undefined' ? "4.0.0-alpha.26" : 'beta';
|
|
9
9
|
const PGM_LINK = 'https://raw.githubusercontent.com/visgl/deck.gl-data/master/egm/egm2008-5.zip';
|
|
10
10
|
export class DepsInstaller {
|
|
11
11
|
async install() {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { emod } from '@loaders.gl/math';
|
|
2
|
-
import {
|
|
2
|
+
import { EXT_MESH_FEATURES, EXT_FEATURE_METADATA } from '@loaders.gl/gltf';
|
|
3
3
|
export function getTextureByMetadataClass(tileContent, metadataClass) {
|
|
4
4
|
var _tileContent$gltf, _tileContent$gltf$ext;
|
|
5
5
|
const extFeatureMetadata = (_tileContent$gltf = tileContent.gltf) === null || _tileContent$gltf === void 0 ? void 0 : (_tileContent$gltf$ext = _tileContent$gltf.extensions) === null || _tileContent$gltf$ext === void 0 ? void 0 : _tileContent$gltf$ext[EXT_FEATURE_METADATA];
|
|
@@ -25,27 +25,17 @@ export function handleBatchIdsExtensions(attributes, primitive, images, featureT
|
|
|
25
25
|
return handleExtFeatureMetadataExtension(attributes, extensionData, images, featureTexture);
|
|
26
26
|
case EXT_MESH_FEATURES:
|
|
27
27
|
return handleExtMeshFeaturesExtension(attributes, extensionData);
|
|
28
|
-
case EXT_STRUCTURAL_METADATA:
|
|
29
|
-
return handleExtStructuralMetadataExtension(attributes, extensionData);
|
|
30
28
|
default:
|
|
31
29
|
return [];
|
|
32
30
|
}
|
|
33
31
|
}
|
|
34
32
|
return [];
|
|
35
33
|
}
|
|
36
|
-
function handleExtStructuralMetadataExtension(attributes, extStructuralMetadata) {
|
|
37
|
-
const dataAttributeNames = extStructuralMetadata === null || extStructuralMetadata === void 0 ? void 0 : extStructuralMetadata.dataAttributeNames;
|
|
38
|
-
if (dataAttributeNames !== null && dataAttributeNames !== void 0 && dataAttributeNames.length) {
|
|
39
|
-
const batchIdsAttribute = attributes[dataAttributeNames[0]];
|
|
40
|
-
return batchIdsAttribute.value;
|
|
41
|
-
}
|
|
42
|
-
return [];
|
|
43
|
-
}
|
|
44
34
|
function handleExtMeshFeaturesExtension(attributes, extMeshFeatures) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
35
|
+
for (let ids of extMeshFeatures.featureIds) {
|
|
36
|
+
if (typeof ids.propertyTable !== 'undefined') {
|
|
37
|
+
return ids.data;
|
|
38
|
+
}
|
|
49
39
|
}
|
|
50
40
|
return [];
|
|
51
41
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batch-ids-extensions.js","names":["emod","EXT_STRUCTURAL_METADATA","EXT_MESH_FEATURES","EXT_FEATURE_METADATA","getTextureByMetadataClass","tileContent","metadataClass","_tileContent$gltf","_tileContent$gltf$ext","extFeatureMetadata","gltf","extensions","featureTextures","textureKey","texture","class","handleBatchIdsExtensions","attributes","primitive","images","featureTexture","extensionName","extensionData","Object","entries","handleExtFeatureMetadataExtension","handleExtMeshFeaturesExtension","handleExtStructuralMetadataExtension","extStructuralMetadata","dataAttributeNames","length","batchIdsAttribute","value","extMeshFeatures","_extFeatureMetadata$f","_featureIdAttribute$f","_featureIdAttribute$f2","_featureIdAttribute$f3","featureIdAttribute","featureIdAttributes","featureIds","attribute","hasOwnProperty","_attributes$POSITIONS","featuresCount","POSITIONS","generateImplicitFeatureIds","constant","divisor","featureIdTexture","featureIdTextures","_featureIdTexture$fea","_featureIdTexture$fea2","textureAttributeIndex","texCoord","textCoordAttribute","concat","textureCoordinates","generateBatchIdsFromTexture","arguments","undefined","currentValue","devisorCounter","index","push","Array","fill","_featureIdTexture$fea3","_featureIdTexture$fea4","_featureIdTexture$fea5","CHANNELS_MAP","r","g","b","a","textureIndex","featureChannel","channels","image","batchIds","width","height","components","u","v","tx","Math","min","ty","offset","batchId","Uint8Array","data","console","warn","mimeType"],"sources":["../../../../src/i3s-converter/helpers/batch-ids-extensions.ts"],"sourcesContent":["import {GLTFAccessorPostprocessed, GLTFMeshPrimitivePostprocessed} from '@loaders.gl/gltf';\nimport type {NumericArray} from '@loaders.gl/loader-utils';\nimport type {\n GLTF_EXT_feature_metadata_FeatureIdTexture,\n GLTF_EXT_feature_metadata_GLTF,\n GLTF_EXT_feature_metadata_Primitive,\n GLTF_EXT_structural_metadata\n} from '@loaders.gl/gltf';\n\nimport type {GLTF_EXT_mesh_features} from '@loaders.gl/gltf';\n\nimport {TypedArray} from '@math.gl/core';\nimport {TextureImageProperties} from '../types';\nimport {emod} from '@loaders.gl/math';\nimport {EXT_STRUCTURAL_METADATA, EXT_MESH_FEATURES, EXT_FEATURE_METADATA} from '@loaders.gl/gltf';\nimport {Tiles3DTileContent} from '@loaders.gl/3d-tiles';\n\n/**\n * Get featureTexture by metadataClass\n * @param tileContent - 3d tile content\n * @param metadataClass - user selected feature metadata class name\n * @returns featureTexture key\n */\nexport function getTextureByMetadataClass(\n tileContent: Tiles3DTileContent,\n metadataClass?: string\n): string | null {\n const extFeatureMetadata = tileContent.gltf?.extensions?.[\n EXT_FEATURE_METADATA\n ] as GLTF_EXT_feature_metadata_GLTF;\n if (!extFeatureMetadata?.featureTextures) {\n return null;\n }\n for (const textureKey in extFeatureMetadata.featureTextures) {\n const texture = extFeatureMetadata.featureTextures[textureKey];\n if (texture.class === metadataClass) {\n return textureKey;\n }\n }\n return null;\n}\n\n/**\n * Getting batchIds from 3DTilesNext extensions.\n * @param attributes - gltf accessors\n * @param primitive - gltf primitive data\n * @param images - gltf texture images\n * @param featureTexture - feature texture key\n * @return array of batch IDs\n */\nexport function handleBatchIdsExtensions(\n attributes: {\n [key: string]: GLTFAccessorPostprocessed;\n },\n primitive: GLTFMeshPrimitivePostprocessed,\n images: (TextureImageProperties | null)[],\n featureTexture: string | null\n): NumericArray {\n const extensions = primitive?.extensions;\n if (!extensions) {\n return [];\n }\n\n for (const [extensionName, extensionData] of Object.entries(extensions || {})) {\n switch (extensionName) {\n case EXT_FEATURE_METADATA:\n return handleExtFeatureMetadataExtension(\n attributes,\n extensionData as GLTF_EXT_feature_metadata_Primitive,\n images,\n featureTexture\n );\n case EXT_MESH_FEATURES:\n return handleExtMeshFeaturesExtension(attributes, extensionData as GLTF_EXT_mesh_features);\n case EXT_STRUCTURAL_METADATA:\n return handleExtStructuralMetadataExtension(\n attributes,\n extensionData as GLTF_EXT_structural_metadata\n );\n\n default:\n return [];\n }\n }\n\n return [];\n}\n\nfunction handleExtStructuralMetadataExtension(\n attributes: {\n [key: string]: GLTFAccessorPostprocessed;\n },\n extStructuralMetadata: GLTF_EXT_structural_metadata\n): NumericArray {\n // Take only first extension object to get batchIds attribute name.\n const dataAttributeNames = extStructuralMetadata?.dataAttributeNames;\n if (dataAttributeNames?.length) {\n // Let's use the first element of the array\n // TODO: What to do with others if any?\n const batchIdsAttribute = attributes[dataAttributeNames[0]];\n return batchIdsAttribute.value;\n }\n return [];\n}\n\n/**\n * Getting batchIds from EXT_mesh_features extensions.\n * @param attributes - gltf accessors\n * @param extMeshFeatures - EXT_mesh_features extension\n * @returns an array of attribute values\n */\nfunction handleExtMeshFeaturesExtension(\n attributes: {\n [key: string]: GLTFAccessorPostprocessed;\n },\n extMeshFeatures: GLTF_EXT_mesh_features\n): NumericArray {\n const dataAttributeNames = extMeshFeatures?.dataAttributeNames;\n if (dataAttributeNames?.length) {\n // Let's use the first element of the array\n // TODO: What to do with others if any?\n const batchIdsAttribute = attributes[dataAttributeNames[0]];\n return batchIdsAttribute.value;\n }\n return [];\n}\n\n/**\n * Get batchIds from EXT_feature_metadata extension.\n * Docs - https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_feature_metadata\n * @param attributes - glTF attributes\n * @param extFeatureMetadata - primitive-level EXT_FEATURE_METADATA extension data\n * @param textures - texture images\n * @param featureTexture - feature texture key\n */\nfunction handleExtFeatureMetadataExtension(\n attributes: {\n [key: string]: GLTFAccessorPostprocessed;\n },\n extFeatureMetadata: GLTF_EXT_feature_metadata_Primitive,\n images: (TextureImageProperties | null)[],\n featureTexture: string | null\n): NumericArray {\n // Take only first extension object to get batchIds attribute name.\n const featureIdAttribute = extFeatureMetadata?.featureIdAttributes?.[0];\n\n if (featureIdAttribute?.featureIds?.attribute) {\n const batchIdsAttribute = attributes[featureIdAttribute.featureIds.attribute];\n return batchIdsAttribute.value;\n }\n\n if (\n featureIdAttribute?.featureIds?.hasOwnProperty('constant') &&\n featureIdAttribute?.featureIds?.hasOwnProperty('divisor')\n ) {\n const featuresCount = attributes?.POSITIONS?.value.length / 3 || 0;\n return generateImplicitFeatureIds(\n featuresCount,\n featureIdAttribute.featureIds.constant,\n featureIdAttribute.featureIds.divisor\n );\n }\n\n // Take only first extension object to get batchIds attribute name.\n const featureIdTexture =\n extFeatureMetadata?.featureIdTextures && extFeatureMetadata?.featureIdTextures[0];\n\n if (featureIdTexture) {\n const textureAttributeIndex = featureIdTexture?.featureIds?.texture?.texCoord || 0;\n const textCoordAttribute = `TEXCOORD_${textureAttributeIndex}`;\n const textureCoordinates = attributes[textCoordAttribute].value;\n return generateBatchIdsFromTexture(featureIdTexture, textureCoordinates, images);\n }\n\n if (featureTexture) {\n const batchIdsAttribute = attributes[featureTexture];\n return batchIdsAttribute.value;\n }\n\n return [];\n}\n\n/**\n * Generates implicit feature ids\n * Spec - https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_feature_metadata#implicit-feature-ids\n * @param featuresCount\n * @param constant\n * @param devisor\n */\nfunction generateImplicitFeatureIds(\n featuresCount: number,\n constant: number = 0,\n divisor: number = 0\n): number[] {\n let featureIds: number[] = [];\n\n if (divisor > 0) {\n let currentValue = constant;\n let devisorCounter = divisor;\n\n for (let index = 0; index < featuresCount; index++) {\n featureIds.push(currentValue);\n\n devisorCounter -= 1;\n\n if (devisorCounter === 0) {\n currentValue++;\n devisorCounter = divisor;\n }\n }\n } else {\n featureIds = Array<number>(featuresCount).fill(constant, 0, featuresCount);\n }\n\n return featureIds;\n}\n\n/**\n * Get batchIds from texture.\n * @param primitive\n * @param featureIdTextures\n */\nfunction generateBatchIdsFromTexture(\n featureIdTexture: GLTF_EXT_feature_metadata_FeatureIdTexture,\n textureCoordinates: TypedArray,\n images: (TextureImageProperties | null)[]\n) {\n if (!images?.length) {\n return [];\n }\n\n const CHANNELS_MAP = {\n r: 0,\n g: 1,\n b: 2,\n a: 3\n };\n\n const textureIndex = featureIdTexture?.featureIds?.texture?.index;\n const featureChannel = featureIdTexture?.featureIds?.channels;\n\n if (!featureChannel || textureIndex === undefined) {\n return [];\n }\n\n const image = images[textureIndex];\n const batchIds: number[] = [];\n const channels = CHANNELS_MAP[featureChannel];\n\n if (image && image?.width && image?.height && image?.components) {\n for (let index = 0; index < textureCoordinates.length; index += 2) {\n const u = textureCoordinates[index];\n const v = textureCoordinates[index + 1];\n\n const tx = Math.min((emod(u) * image.width) | 0, image.width - 1);\n const ty = Math.min((emod(v) * image.height) | 0, image.height - 1);\n\n const offset = (ty * image.width + tx) * image.components + channels;\n const batchId = new Uint8Array(image.data)[offset];\n\n batchIds.push(batchId);\n }\n } else {\n console.warn(`Can't get batch Ids from ${image?.mimeType || ''} compressed texture`);\n }\n\n return batchIds;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"batch-ids-extensions.js","names":["emod","EXT_MESH_FEATURES","EXT_FEATURE_METADATA","getTextureByMetadataClass","tileContent","metadataClass","_tileContent$gltf","_tileContent$gltf$ext","extFeatureMetadata","gltf","extensions","featureTextures","textureKey","texture","class","handleBatchIdsExtensions","attributes","primitive","images","featureTexture","extensionName","extensionData","Object","entries","handleExtFeatureMetadataExtension","handleExtMeshFeaturesExtension","extMeshFeatures","ids","featureIds","propertyTable","data","_extFeatureMetadata$f","_featureIdAttribute$f","_featureIdAttribute$f2","_featureIdAttribute$f3","featureIdAttribute","featureIdAttributes","attribute","batchIdsAttribute","value","hasOwnProperty","_attributes$POSITIONS","featuresCount","POSITIONS","length","generateImplicitFeatureIds","constant","divisor","featureIdTexture","featureIdTextures","_featureIdTexture$fea","_featureIdTexture$fea2","textureAttributeIndex","texCoord","textCoordAttribute","concat","textureCoordinates","generateBatchIdsFromTexture","arguments","undefined","currentValue","devisorCounter","index","push","Array","fill","_featureIdTexture$fea3","_featureIdTexture$fea4","_featureIdTexture$fea5","CHANNELS_MAP","r","g","b","a","textureIndex","featureChannel","channels","image","batchIds","width","height","components","u","v","tx","Math","min","ty","offset","batchId","Uint8Array","console","warn","mimeType"],"sources":["../../../../src/i3s-converter/helpers/batch-ids-extensions.ts"],"sourcesContent":["import {GLTFAccessorPostprocessed, GLTFMeshPrimitivePostprocessed} from '@loaders.gl/gltf';\nimport type {NumericArray} from '@loaders.gl/loader-utils';\nimport type {\n GLTF_EXT_feature_metadata_FeatureIdTexture,\n GLTF_EXT_feature_metadata_GLTF,\n GLTF_EXT_feature_metadata_Primitive\n} from '@loaders.gl/gltf';\n\nimport type {GLTF_EXT_mesh_features} from '@loaders.gl/gltf';\n\nimport {TypedArray} from '@math.gl/core';\nimport {TextureImageProperties} from '../types';\nimport {emod} from '@loaders.gl/math';\nimport {EXT_MESH_FEATURES, EXT_FEATURE_METADATA} from '@loaders.gl/gltf';\nimport {Tiles3DTileContent} from '@loaders.gl/3d-tiles';\n\n/**\n * Get featureTexture by a metadata class.\n * Metadata classes come from a structural metadata extesion (EXT_feature_metadata or EXT_structural_metadata).\n * The glTF might contain multiple texel-level metadata textures related to different classes. Having only one metadata class\n * selected to convert to I3S, we have to pick only one texture to convert to per-vertex property.\n * @param tileContent - 3d tile content\n * @param metadataClass - user selected feature metadata class name\n * @returns featureTexture key\n */\nexport function getTextureByMetadataClass(\n tileContent: Tiles3DTileContent,\n metadataClass?: string\n): string | null {\n const extFeatureMetadata = tileContent.gltf?.extensions?.[\n EXT_FEATURE_METADATA\n ] as GLTF_EXT_feature_metadata_GLTF;\n if (!extFeatureMetadata?.featureTextures) {\n return null;\n }\n for (const textureKey in extFeatureMetadata.featureTextures) {\n const texture = extFeatureMetadata.featureTextures[textureKey];\n if (texture.class === metadataClass) {\n return textureKey;\n }\n }\n return null;\n}\n\n/**\n * Getting batchIds from 3DTilesNext extensions.\n * @param attributes - gltf accessors\n * @param primitive - gltf primitive data\n * @param images - gltf texture images\n * @param featureTexture - feature texture key\n * @return array of batch IDs\n */\nexport function handleBatchIdsExtensions(\n attributes: {\n [key: string]: GLTFAccessorPostprocessed;\n },\n primitive: GLTFMeshPrimitivePostprocessed,\n images: (TextureImageProperties | null)[],\n featureTexture: string | null\n): NumericArray {\n const extensions = primitive?.extensions;\n if (!extensions) {\n return [];\n }\n\n for (const [extensionName, extensionData] of Object.entries(extensions || {})) {\n switch (extensionName) {\n case EXT_FEATURE_METADATA:\n return handleExtFeatureMetadataExtension(\n attributes,\n extensionData as GLTF_EXT_feature_metadata_Primitive,\n images,\n featureTexture\n );\n case EXT_MESH_FEATURES:\n return handleExtMeshFeaturesExtension(attributes, extensionData as GLTF_EXT_mesh_features);\n default:\n return [];\n }\n }\n\n return [];\n}\n\n/**\n * Getting batchIds from EXT_mesh_features extensions.\n * @param attributes - gltf accessors\n * @param extMeshFeatures - EXT_mesh_features extension\n * @returns an array of attribute values\n */\nfunction handleExtMeshFeaturesExtension(\n attributes: {\n [key: string]: GLTFAccessorPostprocessed;\n },\n extMeshFeatures: GLTF_EXT_mesh_features\n): NumericArray {\n for (let ids of extMeshFeatures.featureIds) {\n if (typeof ids.propertyTable !== 'undefined') {\n // propertyTable is an index that can be 0\n // return the first featureID set that corresponts to property table.\n return ids.data as NumericArray;\n }\n }\n return [];\n}\n\n/**\n * Get batchIds from EXT_feature_metadata extension.\n * @see - https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_feature_metadata\n * @param attributes - glTF attributes\n * @param extFeatureMetadata - primitive-level EXT_FEATURE_METADATA extension data\n * @param textures - texture images\n * @param featureTexture - feature texture key\n */\nfunction handleExtFeatureMetadataExtension(\n attributes: {\n [key: string]: GLTFAccessorPostprocessed;\n },\n extFeatureMetadata: GLTF_EXT_feature_metadata_Primitive,\n images: (TextureImageProperties | null)[],\n featureTexture: string | null\n): NumericArray {\n // Take only first extension object to get batchIds attribute name.\n const featureIdAttribute = extFeatureMetadata?.featureIdAttributes?.[0];\n\n if (featureIdAttribute?.featureIds?.attribute) {\n const batchIdsAttribute = attributes[featureIdAttribute.featureIds.attribute];\n return batchIdsAttribute.value;\n }\n\n if (\n featureIdAttribute?.featureIds?.hasOwnProperty('constant') &&\n featureIdAttribute?.featureIds?.hasOwnProperty('divisor')\n ) {\n const featuresCount = attributes?.POSITIONS?.value.length / 3 || 0;\n return generateImplicitFeatureIds(\n featuresCount,\n featureIdAttribute.featureIds.constant,\n featureIdAttribute.featureIds.divisor\n );\n }\n\n // Take only first extension object to get batchIds attribute name.\n const featureIdTexture =\n extFeatureMetadata?.featureIdTextures && extFeatureMetadata?.featureIdTextures[0];\n\n if (featureIdTexture) {\n const textureAttributeIndex = featureIdTexture?.featureIds?.texture?.texCoord || 0;\n const textCoordAttribute = `TEXCOORD_${textureAttributeIndex}`;\n const textureCoordinates = attributes[textCoordAttribute].value;\n return generateBatchIdsFromTexture(featureIdTexture, textureCoordinates, images);\n }\n\n if (featureTexture) {\n const batchIdsAttribute = attributes[featureTexture];\n return batchIdsAttribute.value;\n }\n\n return [];\n}\n\n/**\n * Generates implicit feature ids\n * @see - https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_feature_metadata#implicit-feature-ids\n * @param featuresCount\n * @param constant\n * @param devisor\n */\nfunction generateImplicitFeatureIds(\n featuresCount: number,\n constant: number = 0,\n divisor: number = 0\n): number[] {\n let featureIds: number[] = [];\n\n if (divisor > 0) {\n let currentValue = constant;\n let devisorCounter = divisor;\n\n for (let index = 0; index < featuresCount; index++) {\n featureIds.push(currentValue);\n\n devisorCounter -= 1;\n\n if (devisorCounter === 0) {\n currentValue++;\n devisorCounter = divisor;\n }\n }\n } else {\n featureIds = Array<number>(featuresCount).fill(constant, 0, featuresCount);\n }\n\n return featureIds;\n}\n\n/**\n * Get batchIds from texture.\n * @param primitive\n * @param featureIdTextures\n */\nfunction generateBatchIdsFromTexture(\n featureIdTexture: GLTF_EXT_feature_metadata_FeatureIdTexture,\n textureCoordinates: TypedArray,\n images: (TextureImageProperties | null)[]\n) {\n if (!images?.length) {\n return [];\n }\n\n const CHANNELS_MAP = {\n r: 0,\n g: 1,\n b: 2,\n a: 3\n };\n\n const textureIndex = featureIdTexture?.featureIds?.texture?.index;\n const featureChannel = featureIdTexture?.featureIds?.channels;\n\n if (!featureChannel || textureIndex === undefined) {\n return [];\n }\n\n const image = images[textureIndex];\n const batchIds: number[] = [];\n const channels = CHANNELS_MAP[featureChannel];\n\n if (image && image?.width && image?.height && image?.components) {\n for (let index = 0; index < textureCoordinates.length; index += 2) {\n const u = textureCoordinates[index];\n const v = textureCoordinates[index + 1];\n\n const tx = Math.min((emod(u) * image.width) | 0, image.width - 1);\n const ty = Math.min((emod(v) * image.height) | 0, image.height - 1);\n\n const offset = (ty * image.width + tx) * image.components + channels;\n const batchId = new Uint8Array(image.data)[offset];\n\n batchIds.push(batchId);\n }\n } else {\n console.warn(`Can't get batch Ids from ${image?.mimeType || ''} compressed texture`);\n }\n\n return batchIds;\n}\n"],"mappings":"AAYA,SAAQA,IAAI,QAAO,kBAAkB;AACrC,SAAQC,iBAAiB,EAAEC,oBAAoB,QAAO,kBAAkB;AAYxE,OAAO,SAASC,yBAAyBA,CACvCC,WAA+B,EAC/BC,aAAsB,EACP;EAAA,IAAAC,iBAAA,EAAAC,qBAAA;EACf,MAAMC,kBAAkB,IAAAF,iBAAA,GAAGF,WAAW,CAACK,IAAI,cAAAH,iBAAA,wBAAAC,qBAAA,GAAhBD,iBAAA,CAAkBI,UAAU,cAAAH,qBAAA,uBAA5BA,qBAAA,CACzBL,oBAAoB,CACa;EACnC,IAAI,EAACM,kBAAkB,aAAlBA,kBAAkB,eAAlBA,kBAAkB,CAAEG,eAAe,GAAE;IACxC,OAAO,IAAI;EACb;EACA,KAAK,MAAMC,UAAU,IAAIJ,kBAAkB,CAACG,eAAe,EAAE;IAC3D,MAAME,OAAO,GAAGL,kBAAkB,CAACG,eAAe,CAACC,UAAU,CAAC;IAC9D,IAAIC,OAAO,CAACC,KAAK,KAAKT,aAAa,EAAE;MACnC,OAAOO,UAAU;IACnB;EACF;EACA,OAAO,IAAI;AACb;AAUA,OAAO,SAASG,wBAAwBA,CACtCC,UAEC,EACDC,SAAyC,EACzCC,MAAyC,EACzCC,cAA6B,EACf;EACd,MAAMT,UAAU,GAAGO,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAEP,UAAU;EACxC,IAAI,CAACA,UAAU,EAAE;IACf,OAAO,EAAE;EACX;EAEA,KAAK,MAAM,CAACU,aAAa,EAAEC,aAAa,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACb,UAAU,IAAI,CAAC,CAAC,CAAC,EAAE;IAC7E,QAAQU,aAAa;MACnB,KAAKlB,oBAAoB;QACvB,OAAOsB,iCAAiC,CACtCR,UAAU,EACVK,aAAa,EACbH,MAAM,EACNC,cACF,CAAC;MACH,KAAKlB,iBAAiB;QACpB,OAAOwB,8BAA8B,CAACT,UAAU,EAAEK,aAAuC,CAAC;MAC5F;QACE,OAAO,EAAE;IACb;EACF;EAEA,OAAO,EAAE;AACX;AAQA,SAASI,8BAA8BA,CACrCT,UAEC,EACDU,eAAuC,EACzB;EACd,KAAK,IAAIC,GAAG,IAAID,eAAe,CAACE,UAAU,EAAE;IAC1C,IAAI,OAAOD,GAAG,CAACE,aAAa,KAAK,WAAW,EAAE;MAG5C,OAAOF,GAAG,CAACG,IAAI;IACjB;EACF;EACA,OAAO,EAAE;AACX;AAUA,SAASN,iCAAiCA,CACxCR,UAEC,EACDR,kBAAuD,EACvDU,MAAyC,EACzCC,cAA6B,EACf;EAAA,IAAAY,qBAAA,EAAAC,qBAAA,EAAAC,sBAAA,EAAAC,sBAAA;EAEd,MAAMC,kBAAkB,GAAG3B,kBAAkB,aAAlBA,kBAAkB,wBAAAuB,qBAAA,GAAlBvB,kBAAkB,CAAE4B,mBAAmB,cAAAL,qBAAA,uBAAvCA,qBAAA,CAA0C,CAAC,CAAC;EAEvE,IAAII,kBAAkB,aAAlBA,kBAAkB,gBAAAH,qBAAA,GAAlBG,kBAAkB,CAAEP,UAAU,cAAAI,qBAAA,eAA9BA,qBAAA,CAAgCK,SAAS,EAAE;IAC7C,MAAMC,iBAAiB,GAAGtB,UAAU,CAACmB,kBAAkB,CAACP,UAAU,CAACS,SAAS,CAAC;IAC7E,OAAOC,iBAAiB,CAACC,KAAK;EAChC;EAEA,IACEJ,kBAAkB,aAAlBA,kBAAkB,gBAAAF,sBAAA,GAAlBE,kBAAkB,CAAEP,UAAU,cAAAK,sBAAA,eAA9BA,sBAAA,CAAgCO,cAAc,CAAC,UAAU,CAAC,IAC1DL,kBAAkB,aAAlBA,kBAAkB,gBAAAD,sBAAA,GAAlBC,kBAAkB,CAAEP,UAAU,cAAAM,sBAAA,eAA9BA,sBAAA,CAAgCM,cAAc,CAAC,SAAS,CAAC,EACzD;IAAA,IAAAC,qBAAA;IACA,MAAMC,aAAa,GAAG,CAAA1B,UAAU,aAAVA,UAAU,wBAAAyB,qBAAA,GAAVzB,UAAU,CAAE2B,SAAS,cAAAF,qBAAA,uBAArBA,qBAAA,CAAuBF,KAAK,CAACK,MAAM,IAAG,CAAC,IAAI,CAAC;IAClE,OAAOC,0BAA0B,CAC/BH,aAAa,EACbP,kBAAkB,CAACP,UAAU,CAACkB,QAAQ,EACtCX,kBAAkB,CAACP,UAAU,CAACmB,OAChC,CAAC;EACH;EAGA,MAAMC,gBAAgB,GACpB,CAAAxC,kBAAkB,aAAlBA,kBAAkB,uBAAlBA,kBAAkB,CAAEyC,iBAAiB,MAAIzC,kBAAkB,aAAlBA,kBAAkB,uBAAlBA,kBAAkB,CAAEyC,iBAAiB,CAAC,CAAC,CAAC;EAEnF,IAAID,gBAAgB,EAAE;IAAA,IAAAE,qBAAA,EAAAC,sBAAA;IACpB,MAAMC,qBAAqB,GAAG,CAAAJ,gBAAgB,aAAhBA,gBAAgB,wBAAAE,qBAAA,GAAhBF,gBAAgB,CAAEpB,UAAU,cAAAsB,qBAAA,wBAAAC,sBAAA,GAA5BD,qBAAA,CAA8BrC,OAAO,cAAAsC,sBAAA,uBAArCA,sBAAA,CAAuCE,QAAQ,KAAI,CAAC;IAClF,MAAMC,kBAAkB,eAAAC,MAAA,CAAeH,qBAAqB,CAAE;IAC9D,MAAMI,kBAAkB,GAAGxC,UAAU,CAACsC,kBAAkB,CAAC,CAACf,KAAK;IAC/D,OAAOkB,2BAA2B,CAACT,gBAAgB,EAAEQ,kBAAkB,EAAEtC,MAAM,CAAC;EAClF;EAEA,IAAIC,cAAc,EAAE;IAClB,MAAMmB,iBAAiB,GAAGtB,UAAU,CAACG,cAAc,CAAC;IACpD,OAAOmB,iBAAiB,CAACC,KAAK;EAChC;EAEA,OAAO,EAAE;AACX;AASA,SAASM,0BAA0BA,CACjCH,aAAqB,EAGX;EAAA,IAFVI,QAAgB,GAAAY,SAAA,CAAAd,MAAA,QAAAc,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,CAAC;EAAA,IACpBX,OAAe,GAAAW,SAAA,CAAAd,MAAA,QAAAc,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,CAAC;EAEnB,IAAI9B,UAAoB,GAAG,EAAE;EAE7B,IAAImB,OAAO,GAAG,CAAC,EAAE;IACf,IAAIa,YAAY,GAAGd,QAAQ;IAC3B,IAAIe,cAAc,GAAGd,OAAO;IAE5B,KAAK,IAAIe,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGpB,aAAa,EAAEoB,KAAK,EAAE,EAAE;MAClDlC,UAAU,CAACmC,IAAI,CAACH,YAAY,CAAC;MAE7BC,cAAc,IAAI,CAAC;MAEnB,IAAIA,cAAc,KAAK,CAAC,EAAE;QACxBD,YAAY,EAAE;QACdC,cAAc,GAAGd,OAAO;MAC1B;IACF;EACF,CAAC,MAAM;IACLnB,UAAU,GAAGoC,KAAK,CAAStB,aAAa,CAAC,CAACuB,IAAI,CAACnB,QAAQ,EAAE,CAAC,EAAEJ,aAAa,CAAC;EAC5E;EAEA,OAAOd,UAAU;AACnB;AAOA,SAAS6B,2BAA2BA,CAClCT,gBAA4D,EAC5DQ,kBAA8B,EAC9BtC,MAAyC,EACzC;EAAA,IAAAgD,sBAAA,EAAAC,sBAAA,EAAAC,sBAAA;EACA,IAAI,EAAClD,MAAM,aAANA,MAAM,eAANA,MAAM,CAAE0B,MAAM,GAAE;IACnB,OAAO,EAAE;EACX;EAEA,MAAMyB,YAAY,GAAG;IACnBC,CAAC,EAAE,CAAC;IACJC,CAAC,EAAE,CAAC;IACJC,CAAC,EAAE,CAAC;IACJC,CAAC,EAAE;EACL,CAAC;EAED,MAAMC,YAAY,GAAG1B,gBAAgB,aAAhBA,gBAAgB,wBAAAkB,sBAAA,GAAhBlB,gBAAgB,CAAEpB,UAAU,cAAAsC,sBAAA,wBAAAC,sBAAA,GAA5BD,sBAAA,CAA8BrD,OAAO,cAAAsD,sBAAA,uBAArCA,sBAAA,CAAuCL,KAAK;EACjE,MAAMa,cAAc,GAAG3B,gBAAgB,aAAhBA,gBAAgB,wBAAAoB,sBAAA,GAAhBpB,gBAAgB,CAAEpB,UAAU,cAAAwC,sBAAA,uBAA5BA,sBAAA,CAA8BQ,QAAQ;EAE7D,IAAI,CAACD,cAAc,IAAID,YAAY,KAAKf,SAAS,EAAE;IACjD,OAAO,EAAE;EACX;EAEA,MAAMkB,KAAK,GAAG3D,MAAM,CAACwD,YAAY,CAAC;EAClC,MAAMI,QAAkB,GAAG,EAAE;EAC7B,MAAMF,QAAQ,GAAGP,YAAY,CAACM,cAAc,CAAC;EAE7C,IAAIE,KAAK,IAAIA,KAAK,aAALA,KAAK,eAALA,KAAK,CAAEE,KAAK,IAAIF,KAAK,aAALA,KAAK,eAALA,KAAK,CAAEG,MAAM,IAAIH,KAAK,aAALA,KAAK,eAALA,KAAK,CAAEI,UAAU,EAAE;IAC/D,KAAK,IAAInB,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGN,kBAAkB,CAACZ,MAAM,EAAEkB,KAAK,IAAI,CAAC,EAAE;MACjE,MAAMoB,CAAC,GAAG1B,kBAAkB,CAACM,KAAK,CAAC;MACnC,MAAMqB,CAAC,GAAG3B,kBAAkB,CAACM,KAAK,GAAG,CAAC,CAAC;MAEvC,MAAMsB,EAAE,GAAGC,IAAI,CAACC,GAAG,CAAEtF,IAAI,CAACkF,CAAC,CAAC,GAAGL,KAAK,CAACE,KAAK,GAAI,CAAC,EAAEF,KAAK,CAACE,KAAK,GAAG,CAAC,CAAC;MACjE,MAAMQ,EAAE,GAAGF,IAAI,CAACC,GAAG,CAAEtF,IAAI,CAACmF,CAAC,CAAC,GAAGN,KAAK,CAACG,MAAM,GAAI,CAAC,EAAEH,KAAK,CAACG,MAAM,GAAG,CAAC,CAAC;MAEnE,MAAMQ,MAAM,GAAG,CAACD,EAAE,GAAGV,KAAK,CAACE,KAAK,GAAGK,EAAE,IAAIP,KAAK,CAACI,UAAU,GAAGL,QAAQ;MACpE,MAAMa,OAAO,GAAG,IAAIC,UAAU,CAACb,KAAK,CAAC/C,IAAI,CAAC,CAAC0D,MAAM,CAAC;MAElDV,QAAQ,CAACf,IAAI,CAAC0B,OAAO,CAAC;IACxB;EACF,CAAC,MAAM;IACLE,OAAO,CAACC,IAAI,6BAAArC,MAAA,CAA6B,CAAAsB,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEgB,QAAQ,KAAI,EAAE,wBAAqB,CAAC;EACtF;EAEA,OAAOf,QAAQ;AACjB"}
|
|
@@ -12,7 +12,7 @@ import { getTextureByMetadataClass, handleBatchIdsExtensions } from './batch-ids
|
|
|
12
12
|
import { checkPropertiesLength, flattenPropertyTableByFeatureIds } from './feature-attributes';
|
|
13
13
|
import { GL } from '@loaders.gl/math';
|
|
14
14
|
import { generateSyntheticIndices } from '../../lib/utils/geometry-utils';
|
|
15
|
-
import {
|
|
15
|
+
import { EXT_FEATURE_METADATA, EXT_STRUCTURAL_METADATA, getPropertyTableFromExtFeatureMetadata, getPropertyTableFromExtStructuralMetadata } from '@loaders.gl/gltf';
|
|
16
16
|
const DEFAULT_ROUGHNESS_FACTOR = 1;
|
|
17
17
|
const DEFAULT_METALLIC_FACTOR = 1;
|
|
18
18
|
const VALUES_PER_VERTEX = 3;
|
|
@@ -849,7 +849,7 @@ export function getPropertyTable(tileContent, metadataClass) {
|
|
|
849
849
|
return null;
|
|
850
850
|
}
|
|
851
851
|
let propertyTable;
|
|
852
|
-
const batchTableJson = tileContent
|
|
852
|
+
const batchTableJson = tileContent.batchTableJson;
|
|
853
853
|
if (batchTableJson) {
|
|
854
854
|
return batchTableJson;
|
|
855
855
|
}
|
|
@@ -858,11 +858,6 @@ export function getPropertyTable(tileContent, metadataClass) {
|
|
|
858
858
|
extension
|
|
859
859
|
} = getPropertyTableExtension(tileContent);
|
|
860
860
|
switch (extensionName) {
|
|
861
|
-
case EXT_MESH_FEATURES:
|
|
862
|
-
{
|
|
863
|
-
propertyTable = getPropertyTableFromExtMeshFeatures(extension, metadataClass);
|
|
864
|
-
return propertyTable;
|
|
865
|
-
}
|
|
866
861
|
case EXT_STRUCTURAL_METADATA:
|
|
867
862
|
{
|
|
868
863
|
propertyTable = getPropertyTableFromExtStructuralMetadata(extension, metadataClass);
|
|
@@ -879,7 +874,7 @@ export function getPropertyTable(tileContent, metadataClass) {
|
|
|
879
874
|
}
|
|
880
875
|
function getPropertyTableExtension(tileContent) {
|
|
881
876
|
var _tileContent$gltf3, _tileContent$gltf5, _tileContent$gltf5$ex;
|
|
882
|
-
const extensionsWithPropertyTables = [EXT_FEATURE_METADATA, EXT_STRUCTURAL_METADATA
|
|
877
|
+
const extensionsWithPropertyTables = [EXT_FEATURE_METADATA, EXT_STRUCTURAL_METADATA];
|
|
883
878
|
const extensionsUsed = tileContent === null || tileContent === void 0 ? void 0 : (_tileContent$gltf3 = tileContent.gltf) === null || _tileContent$gltf3 === void 0 ? void 0 : _tileContent$gltf3.extensionsUsed;
|
|
884
879
|
if (!extensionsUsed) {
|
|
885
880
|
return {
|
|
@@ -907,71 +902,4 @@ function getPropertyTableExtension(tileContent) {
|
|
|
907
902
|
extension
|
|
908
903
|
};
|
|
909
904
|
}
|
|
910
|
-
function getPropertyTableFromExtFeatureMetadata(extension, metadataClass) {
|
|
911
|
-
if (extension !== null && extension !== void 0 && extension.featureTables) {
|
|
912
|
-
var _Object$keys;
|
|
913
|
-
const firstFeatureTableName = (_Object$keys = Object.keys(extension.featureTables)) === null || _Object$keys === void 0 ? void 0 : _Object$keys[0];
|
|
914
|
-
if (firstFeatureTableName) {
|
|
915
|
-
const featureTable = extension === null || extension === void 0 ? void 0 : extension.featureTables[firstFeatureTableName];
|
|
916
|
-
const propertyTable = {};
|
|
917
|
-
for (const propertyName in featureTable.properties) {
|
|
918
|
-
propertyTable[propertyName] = featureTable.properties[propertyName].data;
|
|
919
|
-
}
|
|
920
|
-
return propertyTable;
|
|
921
|
-
}
|
|
922
|
-
}
|
|
923
|
-
if (extension !== null && extension !== void 0 && extension.featureTextures) {
|
|
924
|
-
let featureTexture;
|
|
925
|
-
for (const textureKey in extension.featureTextures) {
|
|
926
|
-
const texture = extension.featureTextures[textureKey];
|
|
927
|
-
if (texture.class === metadataClass) {
|
|
928
|
-
featureTexture = textureKey;
|
|
929
|
-
}
|
|
930
|
-
}
|
|
931
|
-
if (typeof featureTexture === 'string') {
|
|
932
|
-
const featureTable = extension === null || extension === void 0 ? void 0 : extension.featureTextures[featureTexture];
|
|
933
|
-
const propertyTable = {};
|
|
934
|
-
for (const propertyName in featureTable.properties) {
|
|
935
|
-
propertyTable[propertyName] = featureTable.properties[propertyName].data;
|
|
936
|
-
}
|
|
937
|
-
return propertyTable;
|
|
938
|
-
}
|
|
939
|
-
}
|
|
940
|
-
console.warn("The I3S converter couldn't handle EXT_feature_metadata extension: There is neither featureTables, no featureTextures in the extension.");
|
|
941
|
-
return null;
|
|
942
|
-
}
|
|
943
|
-
function getPropertyTableFromExtStructuralMetadata(extension, metadataClass) {
|
|
944
|
-
if (extension !== null && extension !== void 0 && extension.propertyTables) {
|
|
945
|
-
const firstPropertyTable = extension === null || extension === void 0 ? void 0 : extension.propertyTables[0];
|
|
946
|
-
const propertyTableWithData = {};
|
|
947
|
-
for (const propertyName in firstPropertyTable.properties) {
|
|
948
|
-
propertyTableWithData[propertyName] = firstPropertyTable.properties[propertyName].data;
|
|
949
|
-
}
|
|
950
|
-
return propertyTableWithData;
|
|
951
|
-
}
|
|
952
|
-
if (extension !== null && extension !== void 0 && extension.propertyTextures) {
|
|
953
|
-
if (extension !== null && extension !== void 0 && extension.propertyTextures) {
|
|
954
|
-
const firstPropertyTexture = extension === null || extension === void 0 ? void 0 : extension.propertyTextures[0];
|
|
955
|
-
const propertyTableWithData = {};
|
|
956
|
-
for (const propertyName in firstPropertyTexture.properties) {
|
|
957
|
-
propertyTableWithData[propertyName] = firstPropertyTexture.properties[propertyName].data;
|
|
958
|
-
}
|
|
959
|
-
return propertyTableWithData;
|
|
960
|
-
}
|
|
961
|
-
}
|
|
962
|
-
console.warn("The I3S converter couldn't handle EXT_structural_metadata extension: There is neither propertyTables, no propertyTextures in the extension.");
|
|
963
|
-
return null;
|
|
964
|
-
}
|
|
965
|
-
function getPropertyTableFromExtMeshFeatures(extension, metadataClass) {
|
|
966
|
-
if (extension !== null && extension !== void 0 && extension.featureIds) {
|
|
967
|
-
const firstFeatureId = extension === null || extension === void 0 ? void 0 : extension.featureIds[0];
|
|
968
|
-
const propertyTableWithData = {};
|
|
969
|
-
if (!firstFeatureId.propertyTable) {
|
|
970
|
-
console.warn('Should be implemented as we have the tileset with Ext_mesh_features not linked with EXT_structural_metadata extension');
|
|
971
|
-
}
|
|
972
|
-
return propertyTableWithData;
|
|
973
|
-
}
|
|
974
|
-
console.warn("The I3S converter couldn't handle EXT_mesh_features extension: There is no featureIds in the extension.");
|
|
975
|
-
return null;
|
|
976
|
-
}
|
|
977
905
|
//# sourceMappingURL=geometry-converter.js.map
|