@loaders.gl/3d-tiles 3.1.0-beta.7 → 3.1.0

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 (119) hide show
  1. package/dist/bundle.js +2335 -184
  2. package/dist/es5/bundle.js +1 -1
  3. package/dist/es5/bundle.js.map +1 -1
  4. package/dist/es5/cesium-ion-loader.js +78 -23
  5. package/dist/es5/cesium-ion-loader.js.map +1 -1
  6. package/dist/es5/index.js +8 -8
  7. package/dist/es5/lib/classes/helpers/tile-3d-accessor-utils.js +42 -30
  8. package/dist/es5/lib/classes/helpers/tile-3d-accessor-utils.js.map +1 -1
  9. package/dist/es5/lib/classes/tile-3d-batch-table-hierarchy.js +59 -57
  10. package/dist/es5/lib/classes/tile-3d-batch-table-hierarchy.js.map +1 -1
  11. package/dist/es5/lib/classes/tile-3d-batch-table.js +238 -201
  12. package/dist/es5/lib/classes/tile-3d-batch-table.js.map +1 -1
  13. package/dist/es5/lib/classes/tile-3d-feature-table.js +78 -62
  14. package/dist/es5/lib/classes/tile-3d-feature-table.js.map +1 -1
  15. package/dist/es5/lib/constants.js +6 -5
  16. package/dist/es5/lib/constants.js.map +1 -1
  17. package/dist/es5/lib/encoders/encode-3d-tile-batched-model.js +22 -15
  18. package/dist/es5/lib/encoders/encode-3d-tile-batched-model.js.map +1 -1
  19. package/dist/es5/lib/encoders/encode-3d-tile-composite.js +13 -6
  20. package/dist/es5/lib/encoders/encode-3d-tile-composite.js.map +1 -1
  21. package/dist/es5/lib/encoders/encode-3d-tile-instanced-model.js +23 -14
  22. package/dist/es5/lib/encoders/encode-3d-tile-instanced-model.js.map +1 -1
  23. package/dist/es5/lib/encoders/encode-3d-tile-point-cloud.js +22 -15
  24. package/dist/es5/lib/encoders/encode-3d-tile-point-cloud.js.map +1 -1
  25. package/dist/es5/lib/encoders/encode-3d-tile.js +3 -3
  26. package/dist/es5/lib/encoders/encode-3d-tile.js.map +1 -1
  27. package/dist/es5/lib/encoders/helpers/encode-3d-tile-header.js +6 -6
  28. package/dist/es5/lib/encoders/helpers/encode-3d-tile-header.js.map +1 -1
  29. package/dist/es5/lib/ion/ion.js +197 -69
  30. package/dist/es5/lib/ion/ion.js.map +1 -1
  31. package/dist/es5/lib/parsers/helpers/normalize-3d-tile-colors.js +18 -17
  32. package/dist/es5/lib/parsers/helpers/normalize-3d-tile-colors.js.map +1 -1
  33. package/dist/es5/lib/parsers/helpers/normalize-3d-tile-normals.js +3 -3
  34. package/dist/es5/lib/parsers/helpers/normalize-3d-tile-normals.js.map +1 -1
  35. package/dist/es5/lib/parsers/helpers/normalize-3d-tile-positions.js +3 -3
  36. package/dist/es5/lib/parsers/helpers/normalize-3d-tile-positions.js.map +1 -1
  37. package/dist/es5/lib/parsers/helpers/parse-3d-implicit-tiles.js +270 -0
  38. package/dist/es5/lib/parsers/helpers/parse-3d-implicit-tiles.js.map +1 -0
  39. package/dist/es5/lib/parsers/helpers/parse-3d-tile-gltf-view.js +66 -26
  40. package/dist/es5/lib/parsers/helpers/parse-3d-tile-gltf-view.js.map +1 -1
  41. package/dist/es5/lib/parsers/helpers/parse-3d-tile-header.js +4 -3
  42. package/dist/es5/lib/parsers/helpers/parse-3d-tile-header.js.map +1 -1
  43. package/dist/es5/lib/parsers/helpers/parse-3d-tile-subtree.js +141 -53
  44. package/dist/es5/lib/parsers/helpers/parse-3d-tile-subtree.js.map +1 -1
  45. package/dist/es5/lib/parsers/helpers/parse-3d-tile-tables.js +17 -19
  46. package/dist/es5/lib/parsers/helpers/parse-3d-tile-tables.js.map +1 -1
  47. package/dist/es5/lib/parsers/helpers/parse-utils.js +8 -7
  48. package/dist/es5/lib/parsers/helpers/parse-utils.js.map +1 -1
  49. package/dist/es5/lib/parsers/parse-3d-tile-batched-model.js +36 -10
  50. package/dist/es5/lib/parsers/parse-3d-tile-batched-model.js.map +1 -1
  51. package/dist/es5/lib/parsers/parse-3d-tile-composite.js +48 -12
  52. package/dist/es5/lib/parsers/parse-3d-tile-composite.js.map +1 -1
  53. package/dist/es5/lib/parsers/parse-3d-tile-gltf.js +45 -0
  54. package/dist/es5/lib/parsers/parse-3d-tile-gltf.js.map +1 -0
  55. package/dist/es5/lib/parsers/parse-3d-tile-header.js +161 -14
  56. package/dist/es5/lib/parsers/parse-3d-tile-header.js.map +1 -1
  57. package/dist/es5/lib/parsers/parse-3d-tile-instanced-model.js +63 -38
  58. package/dist/es5/lib/parsers/parse-3d-tile-instanced-model.js.map +1 -1
  59. package/dist/es5/lib/parsers/parse-3d-tile-point-cloud.js +198 -117
  60. package/dist/es5/lib/parsers/parse-3d-tile-point-cloud.js.map +1 -1
  61. package/dist/es5/lib/parsers/parse-3d-tile.js +74 -15
  62. package/dist/es5/lib/parsers/parse-3d-tile.js.map +1 -1
  63. package/dist/es5/lib/utils/version.js +1 -1
  64. package/dist/es5/lib/utils/version.js.map +1 -1
  65. package/dist/es5/tile-3d-subtree-loader.js +1 -1
  66. package/dist/es5/tile-3d-subtree-loader.js.map +1 -1
  67. package/dist/es5/tile-3d-writer.js +5 -5
  68. package/dist/es5/tile-3d-writer.js.map +1 -1
  69. package/dist/es5/tiles-3d-loader.js +142 -37
  70. package/dist/es5/tiles-3d-loader.js.map +1 -1
  71. package/dist/esm/lib/constants.js +2 -1
  72. package/dist/esm/lib/constants.js.map +1 -1
  73. package/dist/esm/lib/ion/ion.js.map +1 -1
  74. package/dist/esm/lib/parsers/helpers/parse-3d-implicit-tiles.js +173 -0
  75. package/dist/esm/lib/parsers/helpers/parse-3d-implicit-tiles.js.map +1 -0
  76. package/dist/esm/lib/parsers/helpers/parse-3d-tile-subtree.js.map +1 -1
  77. package/dist/esm/lib/parsers/parse-3d-tile-gltf.js +10 -0
  78. package/dist/esm/lib/parsers/parse-3d-tile-gltf.js.map +1 -0
  79. package/dist/esm/lib/parsers/parse-3d-tile-header.js +67 -0
  80. package/dist/esm/lib/parsers/parse-3d-tile-header.js.map +1 -1
  81. package/dist/esm/lib/parsers/parse-3d-tile.js +4 -0
  82. package/dist/esm/lib/parsers/parse-3d-tile.js.map +1 -1
  83. package/dist/esm/lib/utils/version.js +1 -1
  84. package/dist/esm/lib/utils/version.js.map +1 -1
  85. package/dist/esm/tiles-3d-loader.js +9 -2
  86. package/dist/esm/tiles-3d-loader.js.map +1 -1
  87. package/dist/lib/constants.d.ts +1 -0
  88. package/dist/lib/constants.d.ts.map +1 -1
  89. package/dist/lib/constants.js +2 -1
  90. package/dist/lib/ion/ion.d.ts +3 -3
  91. package/dist/lib/ion/ion.d.ts.map +1 -1
  92. package/dist/lib/parsers/helpers/parse-3d-implicit-tiles.d.ts +39 -0
  93. package/dist/lib/parsers/helpers/parse-3d-implicit-tiles.d.ts.map +1 -0
  94. package/dist/lib/parsers/helpers/parse-3d-implicit-tiles.js +189 -0
  95. package/dist/lib/parsers/helpers/parse-3d-tile-subtree.d.ts +2 -2
  96. package/dist/lib/parsers/helpers/parse-3d-tile-subtree.d.ts.map +1 -1
  97. package/dist/lib/parsers/helpers/parse-3d-tile-subtree.js +1 -0
  98. package/dist/lib/parsers/parse-3d-tile-gltf.d.ts +2 -0
  99. package/dist/lib/parsers/parse-3d-tile-gltf.d.ts.map +1 -0
  100. package/dist/lib/parsers/parse-3d-tile-gltf.js +18 -0
  101. package/dist/lib/parsers/parse-3d-tile-header.d.ts +16 -0
  102. package/dist/lib/parsers/parse-3d-tile-header.d.ts.map +1 -1
  103. package/dist/lib/parsers/parse-3d-tile-header.js +67 -1
  104. package/dist/lib/parsers/parse-3d-tile.d.ts.map +1 -1
  105. package/dist/lib/parsers/parse-3d-tile.js +3 -0
  106. package/dist/tiles-3d-loader.d.ts.map +1 -1
  107. package/dist/tiles-3d-loader.js +8 -1
  108. package/dist/types.d.ts +6 -2
  109. package/dist/types.d.ts.map +1 -1
  110. package/package.json +7 -7
  111. package/src/lib/constants.ts +2 -1
  112. package/src/lib/ion/{ion.js → ion.ts} +0 -0
  113. package/src/lib/parsers/helpers/parse-3d-implicit-tiles.ts +255 -0
  114. package/src/lib/parsers/helpers/parse-3d-tile-subtree.ts +4 -3
  115. package/src/lib/parsers/parse-3d-tile-gltf.js +16 -0
  116. package/src/lib/parsers/parse-3d-tile-header.ts +82 -1
  117. package/src/lib/parsers/parse-3d-tile.ts +4 -0
  118. package/src/tiles-3d-loader.ts +17 -2
  119. package/src/types.ts +7 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/lib/parsers/helpers/parse-3d-tile-subtree.ts"],"names":["fetchFile","SUBTREE_FILE_MAGIC","SUBTREE_FILE_VERSION","parse3DTilesSubtree","data","magic","Uint32Array","slice","Error","version","jsonByteLength","parseUint64Value","stringAttribute","Uint8Array","textDecoder","TextDecoder","string","decode","subtree","JSON","parse","binaryByteLength","internalBinaryBuffer","ArrayBuffer","tileAvailability","explicitBitstream","getExplicitBitstream","contentAvailability","childSubtreeAvailability","name","bufferViewIndex","bufferView","bufferViews","buffer","buffers","uri","response","arrayBuffer","byteOffset","byteLength","dataView","DataView","left","getUint32","right"],"mappings":"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","sourcesContent":["import type {SubtreeAvailability, ExplicitBitstream} from '../../../types';\nimport {fetchFile} from '@loaders.gl/core';\n\nconst SUBTREE_FILE_MAGIC = 0x74627573;\nconst SUBTREE_FILE_VERSION = 1;\n\n/**\n * Parse subtree file\n * Spec - https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_implicit_tiling#subtree-file-format\n * @param data\n * @returns\n */\nexport default async function parse3DTilesSubtree(data: ArrayBuffer): Promise<SubtreeAvailability> {\n const magic = new Uint32Array(data.slice(0, 4));\n\n if (magic[0] !== SUBTREE_FILE_MAGIC) {\n throw new Error('Wrong subtree file magic number');\n }\n\n const version = new Uint32Array(data.slice(4, 8));\n\n if (version[0] !== SUBTREE_FILE_VERSION) {\n throw new Error('Wrong subtree file verson, must be 1');\n }\n\n const jsonByteLength = parseUint64Value(data.slice(8, 16));\n const stringAttribute = new Uint8Array(data, 24, jsonByteLength);\n\n const textDecoder = new TextDecoder('utf8');\n const string = textDecoder.decode(stringAttribute);\n const subtree = JSON.parse(string);\n\n const binaryByteLength = parseUint64Value(data.slice(16, 24));\n let internalBinaryBuffer = new ArrayBuffer(0);\n\n if (binaryByteLength) {\n internalBinaryBuffer = data.slice(24 + jsonByteLength);\n }\n\n if ('bufferView' in subtree.tileAvailability) {\n subtree.tileAvailability.explicitBitstream = await getExplicitBitstream(\n subtree,\n 'tileAvailability',\n internalBinaryBuffer\n );\n }\n\n if ('bufferView' in subtree.contentAvailability) {\n subtree.contentAvailability.explicitBitstream = await getExplicitBitstream(\n subtree,\n 'contentAvailability',\n internalBinaryBuffer\n );\n }\n\n if ('bufferView' in subtree.childSubtreeAvailability) {\n subtree.childSubtreeAvailability.explicitBitstream = await getExplicitBitstream(\n subtree,\n 'childSubtreeAvailability',\n internalBinaryBuffer\n );\n }\n\n return subtree;\n}\n\n/**\n * Get explicit bitstream for subtree availability data.\n * @param subtree\n * @param name\n * @param internalBinaryBuffer\n */\nasync function getExplicitBitstream(\n subtree: SubtreeAvailability,\n name: string,\n internalBinaryBuffer: ArrayBuffer\n): Promise<ExplicitBitstream> {\n const bufferViewIndex = subtree[name].bufferView;\n const bufferView = subtree.bufferViews[bufferViewIndex];\n const buffer = subtree.buffers[bufferView.buffer];\n\n // External bitstream loading\n if (buffer.uri) {\n const response = await fetchFile(buffer.uri);\n const data = await response.arrayBuffer();\n // Return view of bitstream.\n return new Uint8Array(data, bufferView.byteOffset, bufferView.byteLength);\n }\n // Return view of bitstream.\n return new Uint8Array(internalBinaryBuffer, bufferView.byteOffset, bufferView.byteLength);\n}\n\n/**\n * Parse buffer to return uint64 value\n * @param buffer\n * @returns 64-bit value until precision is lost after Number.MAX_SAFE_INTEGER\n */\nfunction parseUint64Value(buffer: ArrayBuffer): number {\n const dataView = new DataView(buffer);\n const left = dataView.getUint32(0, true);\n const right = dataView.getUint32(4, true);\n // combine the two 32-bit values\n return left + 2 ** 32 * right;\n}\n"],"file":"parse-3d-tile-subtree.js"}
1
+ {"version":3,"sources":["../../../../../src/lib/parsers/helpers/parse-3d-tile-subtree.ts"],"names":["fetchFile","SUBTREE_FILE_MAGIC","SUBTREE_FILE_VERSION","parse3DTilesSubtree","data","magic","Uint32Array","slice","Error","version","jsonByteLength","parseUint64Value","stringAttribute","Uint8Array","textDecoder","TextDecoder","string","decode","subtree","JSON","parse","binaryByteLength","internalBinaryBuffer","ArrayBuffer","tileAvailability","explicitBitstream","getExplicitBitstream","contentAvailability","childSubtreeAvailability","name","bufferViewIndex","bufferView","bufferViews","buffer","buffers","uri","response","arrayBuffer","byteOffset","byteLength","dataView","DataView","left","getUint32","right"],"mappings":"AACA,SAAQA,SAAR,QAAwB,kBAAxB;AAEA,MAAMC,kBAAkB,GAAG,UAA3B;AACA,MAAMC,oBAAoB,GAAG,CAA7B;AASA,eAAe,eAAeC,mBAAf,CAAmCC,IAAnC,EAAwE;AACrF,QAAMC,KAAK,GAAG,IAAIC,WAAJ,CAAgBF,IAAI,CAACG,KAAL,CAAW,CAAX,EAAc,CAAd,CAAhB,CAAd;;AAEA,MAAIF,KAAK,CAAC,CAAD,CAAL,KAAaJ,kBAAjB,EAAqC;AACnC,UAAM,IAAIO,KAAJ,CAAU,iCAAV,CAAN;AACD;;AAED,QAAMC,OAAO,GAAG,IAAIH,WAAJ,CAAgBF,IAAI,CAACG,KAAL,CAAW,CAAX,EAAc,CAAd,CAAhB,CAAhB;;AAEA,MAAIE,OAAO,CAAC,CAAD,CAAP,KAAeP,oBAAnB,EAAyC;AACvC,UAAM,IAAIM,KAAJ,CAAU,sCAAV,CAAN;AACD;;AAED,QAAME,cAAc,GAAGC,gBAAgB,CAACP,IAAI,CAACG,KAAL,CAAW,CAAX,EAAc,EAAd,CAAD,CAAvC;AACA,QAAMK,eAAe,GAAG,IAAIC,UAAJ,CAAeT,IAAf,EAAqB,EAArB,EAAyBM,cAAzB,CAAxB;AAEA,QAAMI,WAAW,GAAG,IAAIC,WAAJ,CAAgB,MAAhB,CAApB;AACA,QAAMC,MAAM,GAAGF,WAAW,CAACG,MAAZ,CAAmBL,eAAnB,CAAf;AACA,QAAMM,OAAO,GAAGC,IAAI,CAACC,KAAL,CAAWJ,MAAX,CAAhB;AAEA,QAAMK,gBAAgB,GAAGV,gBAAgB,CAACP,IAAI,CAACG,KAAL,CAAW,EAAX,EAAe,EAAf,CAAD,CAAzC;AACA,MAAIe,oBAAoB,GAAG,IAAIC,WAAJ,CAAgB,CAAhB,CAA3B;;AAEA,MAAIF,gBAAJ,EAAsB;AACpBC,IAAAA,oBAAoB,GAAGlB,IAAI,CAACG,KAAL,CAAW,KAAKG,cAAhB,CAAvB;AACD;;AAED,MAAI,gBAAgBQ,OAAO,CAACM,gBAA5B,EAA8C;AAC5CN,IAAAA,OAAO,CAACM,gBAAR,CAAyBC,iBAAzB,GAA6C,MAAMC,oBAAoB,CACrER,OADqE,EAErE,kBAFqE,EAGrEI,oBAHqE,CAAvE;AAKD;;AAED,MAAI,gBAAgBJ,OAAO,CAACS,mBAA5B,EAAiD;AAC/CT,IAAAA,OAAO,CAACS,mBAAR,CAA4BF,iBAA5B,GAAgD,MAAMC,oBAAoB,CACxER,OADwE,EAExE,qBAFwE,EAGxEI,oBAHwE,CAA1E;AAKD;;AAED,MAAI,gBAAgBJ,OAAO,CAACU,wBAA5B,EAAsD;AACpDV,IAAAA,OAAO,CAACU,wBAAR,CAAiCH,iBAAjC,GAAqD,MAAMC,oBAAoB,CAC7ER,OAD6E,EAE7E,0BAF6E,EAG7EI,oBAH6E,CAA/E;AAKD;;AAED,SAAOJ,OAAP;AACD;;AAQD,eAAeQ,oBAAf,CACER,OADF,EAEEW,IAFF,EAGEP,oBAHF,EAI8B;AAC5B,QAAMQ,eAAe,GAAGZ,OAAO,CAACW,IAAD,CAAP,CAAcE,UAAtC;AACA,QAAMA,UAAU,GAAGb,OAAO,CAACc,WAAR,CAAoBF,eAApB,CAAnB;AACA,QAAMG,MAAM,GAAGf,OAAO,CAACgB,OAAR,CAAgBH,UAAU,CAACE,MAA3B,CAAf;;AAGA,MAAIA,MAAM,CAACE,GAAX,EAAgB;AACd,UAAMC,QAAQ,GAAG,MAAMpC,SAAS,CAACiC,MAAM,CAACE,GAAR,CAAhC;AACA,UAAM/B,IAAI,GAAG,MAAMgC,QAAQ,CAACC,WAAT,EAAnB;AAEA,WAAO,IAAIxB,UAAJ,CAAeT,IAAf,EAAqB2B,UAAU,CAACO,UAAhC,EAA4CP,UAAU,CAACQ,UAAvD,CAAP;AACD;;AAED,SAAO,IAAI1B,UAAJ,CAAeS,oBAAf,EAAqCS,UAAU,CAACO,UAAhD,EAA4DP,UAAU,CAACQ,UAAvE,CAAP;AACD;;AAOD,SAAS5B,gBAAT,CAA0BsB,MAA1B,EAAuD;AACrD,QAAMO,QAAQ,GAAG,IAAIC,QAAJ,CAAaR,MAAb,CAAjB;AACA,QAAMS,IAAI,GAAGF,QAAQ,CAACG,SAAT,CAAmB,CAAnB,EAAsB,IAAtB,CAAb;AACA,QAAMC,KAAK,GAAGJ,QAAQ,CAACG,SAAT,CAAmB,CAAnB,EAAsB,IAAtB,CAAd;AAEA,SAAOD,IAAI,GAAG,KAAK,EAAL,GAAUE,KAAxB;AACD","sourcesContent":["import type {Subtree, ExplicitBitstream} from '../../../types';\nimport {fetchFile} from '@loaders.gl/core';\n\nconst SUBTREE_FILE_MAGIC = 0x74627573;\nconst SUBTREE_FILE_VERSION = 1;\n\n/**\n * Parse subtree file\n * Spec - https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_implicit_tiling#subtree-file-format\n * @param data\n * @returns\n */\n// eslint-disable-next-line max-statements\nexport default async function parse3DTilesSubtree(data: ArrayBuffer): Promise<Subtree> {\n const magic = new Uint32Array(data.slice(0, 4));\n\n if (magic[0] !== SUBTREE_FILE_MAGIC) {\n throw new Error('Wrong subtree file magic number');\n }\n\n const version = new Uint32Array(data.slice(4, 8));\n\n if (version[0] !== SUBTREE_FILE_VERSION) {\n throw new Error('Wrong subtree file verson, must be 1');\n }\n\n const jsonByteLength = parseUint64Value(data.slice(8, 16));\n const stringAttribute = new Uint8Array(data, 24, jsonByteLength);\n\n const textDecoder = new TextDecoder('utf8');\n const string = textDecoder.decode(stringAttribute);\n const subtree = JSON.parse(string);\n\n const binaryByteLength = parseUint64Value(data.slice(16, 24));\n let internalBinaryBuffer = new ArrayBuffer(0);\n\n if (binaryByteLength) {\n internalBinaryBuffer = data.slice(24 + jsonByteLength);\n }\n\n if ('bufferView' in subtree.tileAvailability) {\n subtree.tileAvailability.explicitBitstream = await getExplicitBitstream(\n subtree,\n 'tileAvailability',\n internalBinaryBuffer\n );\n }\n\n if ('bufferView' in subtree.contentAvailability) {\n subtree.contentAvailability.explicitBitstream = await getExplicitBitstream(\n subtree,\n 'contentAvailability',\n internalBinaryBuffer\n );\n }\n\n if ('bufferView' in subtree.childSubtreeAvailability) {\n subtree.childSubtreeAvailability.explicitBitstream = await getExplicitBitstream(\n subtree,\n 'childSubtreeAvailability',\n internalBinaryBuffer\n );\n }\n\n return subtree;\n}\n\n/**\n * Get explicit bitstream for subtree availability data.\n * @param subtree\n * @param name\n * @param internalBinaryBuffer\n */\nasync function getExplicitBitstream(\n subtree: Subtree,\n name: string,\n internalBinaryBuffer: ArrayBuffer\n): Promise<ExplicitBitstream> {\n const bufferViewIndex = subtree[name].bufferView;\n const bufferView = subtree.bufferViews[bufferViewIndex];\n const buffer = subtree.buffers[bufferView.buffer];\n\n // External bitstream loading\n if (buffer.uri) {\n const response = await fetchFile(buffer.uri);\n const data = await response.arrayBuffer();\n // Return view of bitstream.\n return new Uint8Array(data, bufferView.byteOffset, bufferView.byteLength);\n }\n // Return view of bitstream.\n return new Uint8Array(internalBinaryBuffer, bufferView.byteOffset, bufferView.byteLength);\n}\n\n/**\n * Parse buffer to return uint64 value\n * @param buffer\n * @returns 64-bit value until precision is lost after Number.MAX_SAFE_INTEGER\n */\nfunction parseUint64Value(buffer: ArrayBuffer): number {\n const dataView = new DataView(buffer);\n const left = dataView.getUint32(0, true);\n const right = dataView.getUint32(4, true);\n // combine the two 32-bit values\n return left + 2 ** 32 * right;\n}\n"],"file":"parse-3d-tile-subtree.js"}
@@ -0,0 +1,10 @@
1
+ import { GLTFLoader } from '@loaders.gl/gltf';
2
+ export async function parseGltf3DTile(tile, arrayBuffer, options, context) {
3
+ tile.rotateYtoZ = true;
4
+ tile.gltfUpAxis = options['3d-tiles'] && options['3d-tiles'].assetGltfUpAxis ? options['3d-tiles'].assetGltfUpAxis : 'Y';
5
+ const {
6
+ parse
7
+ } = context;
8
+ tile.gltf = await parse(arrayBuffer, GLTFLoader, options, context);
9
+ }
10
+ //# sourceMappingURL=parse-3d-tile-gltf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/lib/parsers/parse-3d-tile-gltf.js"],"names":["GLTFLoader","parseGltf3DTile","tile","arrayBuffer","options","context","rotateYtoZ","gltfUpAxis","assetGltfUpAxis","parse","gltf"],"mappings":"AAAA,SAAQA,UAAR,QAAyB,kBAAzB;AAEA,OAAO,eAAeC,eAAf,CAA+BC,IAA/B,EAAqCC,WAArC,EAAkDC,OAAlD,EAA2DC,OAA3D,EAAoE;AAIzEH,EAAAA,IAAI,CAACI,UAAL,GAAkB,IAAlB;AAEAJ,EAAAA,IAAI,CAACK,UAAL,GACEH,OAAO,CAAC,UAAD,CAAP,IAAuBA,OAAO,CAAC,UAAD,CAAP,CAAoBI,eAA3C,GACIJ,OAAO,CAAC,UAAD,CAAP,CAAoBI,eADxB,GAEI,GAHN;AAKA,QAAM;AAACC,IAAAA;AAAD,MAAUJ,OAAhB;AACAH,EAAAA,IAAI,CAACQ,IAAL,GAAY,MAAMD,KAAK,CAACN,WAAD,EAAcH,UAAd,EAA0BI,OAA1B,EAAmCC,OAAnC,CAAvB;AACD","sourcesContent":["import {GLTFLoader} from '@loaders.gl/gltf';\n\nexport async function parseGltf3DTile(tile, arrayBuffer, options, context) {\n // Set flags\n // glTF models need to be rotated from Y to Z up\n // https://github.com/AnalyticalGraphicsInc/3d-tiles/tree/master/specification#y-up-to-z-up\n tile.rotateYtoZ = true;\n // Save gltf up axis\n tile.gltfUpAxis =\n options['3d-tiles'] && options['3d-tiles'].assetGltfUpAxis\n ? options['3d-tiles'].assetGltfUpAxis\n : 'Y';\n\n const {parse} = context;\n tile.gltf = await parse(arrayBuffer, GLTFLoader, options, context);\n}\n"],"file":"parse-3d-tile-gltf.js"}
@@ -1,4 +1,7 @@
1
+ import { Tile3DSubtreeLoader } from '../../tile-3d-subtree-loader';
2
+ import { load } from '@loaders.gl/core';
1
3
  import { LOD_METRIC_TYPE, TILE_REFINEMENT, TILE_TYPE } from '@loaders.gl/tiles';
4
+ import { parseImplicitTiles, replaceContentUrlTemplate } from './helpers/parse-3d-implicit-tiles';
2
5
 
3
6
  function getTileType(tile) {
4
7
  if (!tile.contentUrl) {
@@ -14,6 +17,8 @@ function getTileType(tile) {
14
17
 
15
18
  case 'i3dm':
16
19
  case 'b3dm':
20
+ case 'glb':
21
+ case 'gltf':
17
22
  return TILE_TYPE.SCENEGRAPH;
18
23
 
19
24
  default:
@@ -74,4 +79,66 @@ export function normalizeTileHeaders(tileset) {
74
79
 
75
80
  return root;
76
81
  }
82
+ export async function normalizeImplicitTileHeaders(tileset) {
83
+ if (!tileset.root) {
84
+ return null;
85
+ }
86
+
87
+ const basePath = tileset.basePath;
88
+ const implicitTilingExtension = tileset.root.extensions['3DTILES_implicit_tiling'];
89
+ const {
90
+ subdivisionScheme,
91
+ maximumLevel,
92
+ subtreeLevels,
93
+ subtrees: {
94
+ uri: subtreesUriTemplate
95
+ }
96
+ } = implicitTilingExtension;
97
+ const subtreeUrl = replaceContentUrlTemplate(subtreesUriTemplate, 0, 0, 0, 0);
98
+ const rootSubtreeUrl = "".concat(basePath, "/").concat(subtreeUrl);
99
+ const rootSubtree = await load(rootSubtreeUrl, Tile3DSubtreeLoader);
100
+ const contentUrlTemplate = "".concat(basePath, "/").concat(tileset.root.content.uri);
101
+ const refine = tileset.root.refine;
102
+ const rootLodMetricValue = tileset.root.geometricError;
103
+ const options = {
104
+ contentUrlTemplate,
105
+ subtreesUriTemplate,
106
+ subdivisionScheme,
107
+ subtreeLevels,
108
+ maximumLevel,
109
+ refine,
110
+ basePath,
111
+ lodMetricType: LOD_METRIC_TYPE.GEOMETRIC_ERROR,
112
+ rootLodMetricValue,
113
+ getTileType,
114
+ getRefine
115
+ };
116
+ return await normalizeImplicitTileData(tileset.root, rootSubtree, options);
117
+ }
118
+ export async function normalizeImplicitTileData(tile, rootSubtree, options) {
119
+ if (!tile) {
120
+ return null;
121
+ }
122
+
123
+ tile.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;
124
+ tile.lodMetricValue = tile.geometricError;
125
+ tile.transformMatrix = tile.transform;
126
+ const {
127
+ children,
128
+ contentUrl
129
+ } = await parseImplicitTiles(rootSubtree, options);
130
+
131
+ if (contentUrl) {
132
+ tile.contentUrl = contentUrl;
133
+ tile.content = {
134
+ uri: contentUrl.replace("".concat(options.basePath, "/"), '')
135
+ };
136
+ }
137
+
138
+ tile.refine = getRefine(tile.refine);
139
+ tile.type = getTileType(tile);
140
+ tile.children = children;
141
+ tile.id = tile.contentUrl;
142
+ return tile;
143
+ }
77
144
  //# sourceMappingURL=parse-3d-tile-header.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/parsers/parse-3d-tile-header.ts"],"names":["LOD_METRIC_TYPE","TILE_REFINEMENT","TILE_TYPE","getTileType","tile","contentUrl","EMPTY","fileExtension","split","pop","POINTCLOUD","SCENEGRAPH","getRefine","refine","REPLACE","ADD","normalizeTileData","options","content","contentUri","uri","url","basePath","id","lodMetricType","GEOMETRIC_ERROR","lodMetricValue","geometricError","transformMatrix","transform","type","normalizeTileHeaders","tileset","root","stack","push","length","children","childHeader"],"mappings":"AAAA,SAAQA,eAAR,EAAyBC,eAAzB,EAA0CC,SAA1C,QAA0D,mBAA1D;;AAEA,SAASC,WAAT,CAAqBC,IAArB,EAA2B;AACzB,MAAI,CAACA,IAAI,CAACC,UAAV,EAAsB;AACpB,WAAOH,SAAS,CAACI,KAAjB;AACD;;AAED,QAAMD,UAAU,GAAGD,IAAI,CAACC,UAAxB;AACA,QAAME,aAAa,GAAGF,UAAU,CAACG,KAAX,CAAiB,GAAjB,EAAsBC,GAAtB,EAAtB;;AACA,UAAQF,aAAR;AACE,SAAK,MAAL;AACE,aAAOL,SAAS,CAACQ,UAAjB;;AACF,SAAK,MAAL;AACA,SAAK,MAAL;AACE,aAAOR,SAAS,CAACS,UAAjB;;AACF;AACE,aAAOJ,aAAP;AAPJ;AASD;;AAED,SAASK,SAAT,CAAmBC,MAAnB,EAA2B;AACzB,UAAQA,MAAR;AACE,SAAK,SAAL;AACA,SAAK,SAAL;AACE,aAAOZ,eAAe,CAACa,OAAvB;;AACF,SAAK,KAAL;AACA,SAAK,KAAL;AACE,aAAOb,eAAe,CAACc,GAAvB;;AACF;AACE,aAAOF,MAAP;AARJ;AAUD;;AAED,OAAO,SAASG,iBAAT,CAA2BZ,IAA3B,EAAiCa,OAAjC,EAA0C;AAC/C,MAAI,CAACb,IAAL,EAAW;AACT,WAAO,IAAP;AACD;;AACD,MAAIA,IAAI,CAACc,OAAT,EAAkB;AAChB,UAAMC,UAAU,GAAGf,IAAI,CAACc,OAAL,CAAaE,GAAb,IAAoBhB,IAAI,CAACc,OAAL,CAAaG,GAApD;AACAjB,IAAAA,IAAI,CAACC,UAAL,aAAqBY,OAAO,CAACK,QAA7B,cAAyCH,UAAzC;AACD;;AACDf,EAAAA,IAAI,CAACmB,EAAL,GAAUnB,IAAI,CAACC,UAAf;AACAD,EAAAA,IAAI,CAACoB,aAAL,GAAqBxB,eAAe,CAACyB,eAArC;AACArB,EAAAA,IAAI,CAACsB,cAAL,GAAsBtB,IAAI,CAACuB,cAA3B;AACAvB,EAAAA,IAAI,CAACwB,eAAL,GAAuBxB,IAAI,CAACyB,SAA5B;AACAzB,EAAAA,IAAI,CAAC0B,IAAL,GAAY3B,WAAW,CAACC,IAAD,CAAvB;AACAA,EAAAA,IAAI,CAACS,MAAL,GAAcD,SAAS,CAACR,IAAI,CAACS,MAAN,CAAvB;AACA,SAAOT,IAAP;AACD;AAGD,OAAO,SAAS2B,oBAAT,CAA8BC,OAA9B,EAAuC;AAC5C,QAAMV,QAAQ,GAAGU,OAAO,CAACV,QAAzB;AACA,QAAMW,IAAI,GAAGjB,iBAAiB,CAACgB,OAAO,CAACC,IAAT,EAAeD,OAAf,CAA9B;AAEA,QAAME,KAAY,GAAG,EAArB;AACAA,EAAAA,KAAK,CAACC,IAAN,CAAWF,IAAX;;AAEA,SAAOC,KAAK,CAACE,MAAN,GAAe,CAAtB,EAAyB;AACvB,UAAMhC,IAAI,GAAG8B,KAAK,CAACzB,GAAN,MAAe,EAA5B;AACA,UAAM4B,QAAQ,GAAGjC,IAAI,CAACiC,QAAL,IAAiB,EAAlC;;AACA,SAAK,MAAMC,WAAX,IAA0BD,QAA1B,EAAoC;AAClCrB,MAAAA,iBAAiB,CAACsB,WAAD,EAAc;AAAChB,QAAAA;AAAD,OAAd,CAAjB;AACAY,MAAAA,KAAK,CAACC,IAAN,CAAWG,WAAX;AACD;AACF;;AAED,SAAOL,IAAP;AACD","sourcesContent":["import {LOD_METRIC_TYPE, TILE_REFINEMENT, TILE_TYPE} from '@loaders.gl/tiles';\n\nfunction getTileType(tile) {\n if (!tile.contentUrl) {\n return TILE_TYPE.EMPTY;\n }\n\n const contentUrl = tile.contentUrl;\n const fileExtension = contentUrl.split('.').pop();\n switch (fileExtension) {\n case 'pnts':\n return TILE_TYPE.POINTCLOUD;\n case 'i3dm':\n case 'b3dm':\n return TILE_TYPE.SCENEGRAPH;\n default:\n return fileExtension;\n }\n}\n\nfunction getRefine(refine) {\n switch (refine) {\n case 'REPLACE':\n case 'replace':\n return TILE_REFINEMENT.REPLACE;\n case 'ADD':\n case 'add':\n return TILE_REFINEMENT.ADD;\n default:\n return refine;\n }\n}\n\nexport function normalizeTileData(tile, options) {\n if (!tile) {\n return null;\n }\n if (tile.content) {\n const contentUri = tile.content.uri || tile.content.url;\n tile.contentUrl = `${options.basePath}/${contentUri}`;\n }\n tile.id = tile.contentUrl;\n tile.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;\n tile.lodMetricValue = tile.geometricError;\n tile.transformMatrix = tile.transform;\n tile.type = getTileType(tile);\n tile.refine = getRefine(tile.refine);\n return tile;\n}\n\n// normalize tile headers\nexport function normalizeTileHeaders(tileset) {\n const basePath = tileset.basePath;\n const root = normalizeTileData(tileset.root, tileset);\n\n const stack: any[] = [];\n stack.push(root);\n\n while (stack.length > 0) {\n const tile = stack.pop() || {};\n const children = tile.children || [];\n for (const childHeader of children) {\n normalizeTileData(childHeader, {basePath});\n stack.push(childHeader);\n }\n }\n\n return root;\n}\n"],"file":"parse-3d-tile-header.js"}
1
+ {"version":3,"sources":["../../../../src/lib/parsers/parse-3d-tile-header.ts"],"names":["Tile3DSubtreeLoader","load","LOD_METRIC_TYPE","TILE_REFINEMENT","TILE_TYPE","parseImplicitTiles","replaceContentUrlTemplate","getTileType","tile","contentUrl","EMPTY","fileExtension","split","pop","POINTCLOUD","SCENEGRAPH","getRefine","refine","REPLACE","ADD","normalizeTileData","options","content","contentUri","uri","url","basePath","id","lodMetricType","GEOMETRIC_ERROR","lodMetricValue","geometricError","transformMatrix","transform","type","normalizeTileHeaders","tileset","root","stack","push","length","children","childHeader","normalizeImplicitTileHeaders","implicitTilingExtension","extensions","subdivisionScheme","maximumLevel","subtreeLevels","subtrees","subtreesUriTemplate","subtreeUrl","rootSubtreeUrl","rootSubtree","contentUrlTemplate","rootLodMetricValue","normalizeImplicitTileData","replace"],"mappings":"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","sourcesContent":["import {Tile3DSubtreeLoader} from '../../tile-3d-subtree-loader';\nimport {load} from '@loaders.gl/core';\nimport {Tileset3D, LOD_METRIC_TYPE, TILE_REFINEMENT, TILE_TYPE} from '@loaders.gl/tiles';\nimport {Subtree} from '../../types';\nimport {parseImplicitTiles, replaceContentUrlTemplate} from './helpers/parse-3d-implicit-tiles';\n\nfunction getTileType(tile) {\n if (!tile.contentUrl) {\n return TILE_TYPE.EMPTY;\n }\n\n const contentUrl = tile.contentUrl;\n const fileExtension = contentUrl.split('.').pop();\n switch (fileExtension) {\n case 'pnts':\n return TILE_TYPE.POINTCLOUD;\n case 'i3dm':\n case 'b3dm':\n case 'glb':\n case 'gltf':\n return TILE_TYPE.SCENEGRAPH;\n default:\n return fileExtension;\n }\n}\n\nfunction getRefine(refine) {\n switch (refine) {\n case 'REPLACE':\n case 'replace':\n return TILE_REFINEMENT.REPLACE;\n case 'ADD':\n case 'add':\n return TILE_REFINEMENT.ADD;\n default:\n return refine;\n }\n}\n\nexport function normalizeTileData(tile, options) {\n if (!tile) {\n return null;\n }\n if (tile.content) {\n const contentUri = tile.content.uri || tile.content.url;\n tile.contentUrl = `${options.basePath}/${contentUri}`;\n }\n tile.id = tile.contentUrl;\n tile.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;\n tile.lodMetricValue = tile.geometricError;\n tile.transformMatrix = tile.transform;\n tile.type = getTileType(tile);\n tile.refine = getRefine(tile.refine);\n\n return tile;\n}\n\n// normalize tile headers\nexport function normalizeTileHeaders(tileset) {\n const basePath = tileset.basePath;\n const root = normalizeTileData(tileset.root, tileset);\n\n const stack: any[] = [];\n stack.push(root);\n\n while (stack.length > 0) {\n const tile = stack.pop() || {};\n const children = tile.children || [];\n for (const childHeader of children) {\n normalizeTileData(childHeader, {basePath});\n stack.push(childHeader);\n }\n }\n\n return root;\n}\n\n/**\n * Do normalisation of implicit tile headers\n * TODO Check if Tile3D class can be a return type here.\n * @param tileset\n */\nexport async function normalizeImplicitTileHeaders(tileset: Tileset3D) {\n if (!tileset.root) {\n return null;\n }\n\n const basePath = tileset.basePath;\n const implicitTilingExtension = tileset.root.extensions['3DTILES_implicit_tiling'];\n const {\n subdivisionScheme,\n maximumLevel,\n subtreeLevels,\n subtrees: {uri: subtreesUriTemplate}\n } = implicitTilingExtension;\n const subtreeUrl = replaceContentUrlTemplate(subtreesUriTemplate, 0, 0, 0, 0);\n const rootSubtreeUrl = `${basePath}/${subtreeUrl}`;\n const rootSubtree = await load(rootSubtreeUrl, Tile3DSubtreeLoader);\n const contentUrlTemplate = `${basePath}/${tileset.root.content.uri}`;\n const refine = tileset.root.refine;\n // @ts-ignore\n const rootLodMetricValue = tileset.root.geometricError;\n\n const options = {\n contentUrlTemplate,\n subtreesUriTemplate,\n subdivisionScheme,\n subtreeLevels,\n maximumLevel,\n refine,\n basePath,\n lodMetricType: LOD_METRIC_TYPE.GEOMETRIC_ERROR,\n rootLodMetricValue,\n getTileType,\n getRefine\n };\n\n return await normalizeImplicitTileData(tileset.root, rootSubtree, options);\n}\n\n/**\n * Do implicit data normalisation to create hierarchical tile structure\n * @param tile\n * @param rootSubtree\n * @param options\n * @returns\n */\nexport async function normalizeImplicitTileData(tile, rootSubtree: Subtree, options: any) {\n if (!tile) {\n return null;\n }\n\n tile.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;\n tile.lodMetricValue = tile.geometricError;\n tile.transformMatrix = tile.transform;\n\n const {children, contentUrl} = await parseImplicitTiles(rootSubtree, options);\n\n if (contentUrl) {\n tile.contentUrl = contentUrl;\n tile.content = {uri: contentUrl.replace(`${options.basePath}/`, '')};\n }\n\n tile.refine = getRefine(tile.refine);\n tile.type = getTileType(tile);\n tile.children = children;\n tile.id = tile.contentUrl;\n\n return tile;\n}\n"],"file":"parse-3d-tile-header.js"}
@@ -4,6 +4,7 @@ import { parsePointCloud3DTile } from './parse-3d-tile-point-cloud';
4
4
  import { parseBatchedModel3DTile } from './parse-3d-tile-batched-model';
5
5
  import { parseInstancedModel3DTile } from './parse-3d-tile-instanced-model';
6
6
  import { parseComposite3DTile } from './parse-3d-tile-composite';
7
+ import { parseGltf3DTile } from './parse-3d-tile-gltf';
7
8
  export async function parse3DTile(arrayBuffer, byteOffset = 0, options, context, tile = {}) {
8
9
  tile.byteOffset = byteOffset;
9
10
  tile.type = getMagicString(arrayBuffer, byteOffset);
@@ -15,6 +16,9 @@ export async function parse3DTile(arrayBuffer, byteOffset = 0, options, context,
15
16
  case TILE3D_TYPE.BATCHED_3D_MODEL:
16
17
  return await parseBatchedModel3DTile(tile, arrayBuffer, byteOffset, options, context);
17
18
 
19
+ case TILE3D_TYPE.GLTF:
20
+ return await parseGltf3DTile(tile, arrayBuffer, options, context);
21
+
18
22
  case TILE3D_TYPE.INSTANCED_3D_MODEL:
19
23
  return await parseInstancedModel3DTile(tile, arrayBuffer, byteOffset, options, context);
20
24
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/parsers/parse-3d-tile.ts"],"names":["TILE3D_TYPE","getMagicString","parsePointCloud3DTile","parseBatchedModel3DTile","parseInstancedModel3DTile","parseComposite3DTile","parse3DTile","arrayBuffer","byteOffset","options","context","tile","type","COMPOSITE","BATCHED_3D_MODEL","INSTANCED_3D_MODEL","POINT_CLOUD","Error"],"mappings":"AAGA,SAAQA,WAAR,QAA0B,cAA1B;AACA,SAAQC,cAAR,QAA6B,uBAA7B;AAEA,SAAQC,qBAAR,QAAoC,6BAApC;AACA,SAAQC,uBAAR,QAAsC,+BAAtC;AACA,SAAQC,yBAAR,QAAwC,iCAAxC;AACA,SAAQC,oBAAR,QAAmC,2BAAnC;AAGA,OAAO,eAAeC,WAAf,CAA2BC,WAA3B,EAAwCC,UAAU,GAAG,CAArD,EAAwDC,OAAxD,EAAiEC,OAAjE,EAA0EC,IAAI,GAAG,EAAjF,EAAqF;AAE1FA,EAAAA,IAAI,CAACH,UAAL,GAAkBA,UAAlB;AAEAG,EAAAA,IAAI,CAACC,IAAL,GAAYX,cAAc,CAACM,WAAD,EAAcC,UAAd,CAA1B;;AAGA,UAAQG,IAAI,CAACC,IAAb;AACE,SAAKZ,WAAW,CAACa,SAAjB;AAEE,aAAO,MAAMR,oBAAoB,CAC/BM,IAD+B,EAE/BJ,WAF+B,EAG/BC,UAH+B,EAI/BC,OAJ+B,EAK/BC,OAL+B,EAM/BJ,WAN+B,CAAjC;;AASF,SAAKN,WAAW,CAACc,gBAAjB;AACE,aAAO,MAAMX,uBAAuB,CAACQ,IAAD,EAAOJ,WAAP,EAAoBC,UAApB,EAAgCC,OAAhC,EAAyCC,OAAzC,CAApC;;AAEF,SAAKV,WAAW,CAACe,kBAAjB;AACE,aAAO,MAAMX,yBAAyB,CAACO,IAAD,EAAOJ,WAAP,EAAoBC,UAApB,EAAgCC,OAAhC,EAAyCC,OAAzC,CAAtC;;AAEF,SAAKV,WAAW,CAACgB,WAAjB;AACE,aAAO,MAAMd,qBAAqB,CAACS,IAAD,EAAOJ,WAAP,EAAoBC,UAApB,EAAgCC,OAAhC,EAAyCC,OAAzC,CAAlC;;AAEF;AAEE,YAAM,IAAIO,KAAJ,sCAAwCN,IAAI,CAACC,IAA7C,EAAN;AAvBJ;AAyBD","sourcesContent":["// This file is derived from the Cesium code base under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport {TILE3D_TYPE} from '../constants';\nimport {getMagicString} from './helpers/parse-utils';\n\nimport {parsePointCloud3DTile} from './parse-3d-tile-point-cloud';\nimport {parseBatchedModel3DTile} from './parse-3d-tile-batched-model';\nimport {parseInstancedModel3DTile} from './parse-3d-tile-instanced-model';\nimport {parseComposite3DTile} from './parse-3d-tile-composite';\n\n// Extracts\nexport async function parse3DTile(arrayBuffer, byteOffset = 0, options, context, tile = {}) {\n // @ts-expect-error\n tile.byteOffset = byteOffset;\n // @ts-expect-error\n tile.type = getMagicString(arrayBuffer, byteOffset);\n\n // @ts-expect-error\n switch (tile.type) {\n case TILE3D_TYPE.COMPOSITE:\n // Note: We pass this function as argument so that embedded tiles can be parsed recursively\n return await parseComposite3DTile(\n tile,\n arrayBuffer,\n byteOffset,\n options,\n context,\n parse3DTile\n );\n\n case TILE3D_TYPE.BATCHED_3D_MODEL:\n return await parseBatchedModel3DTile(tile, arrayBuffer, byteOffset, options, context);\n\n case TILE3D_TYPE.INSTANCED_3D_MODEL:\n return await parseInstancedModel3DTile(tile, arrayBuffer, byteOffset, options, context);\n\n case TILE3D_TYPE.POINT_CLOUD:\n return await parsePointCloud3DTile(tile, arrayBuffer, byteOffset, options, context);\n\n default:\n // @ts-expect-error\n throw new Error(`3DTileLoader: unknown type ${tile.type}`); // eslint-disable-line\n }\n}\n"],"file":"parse-3d-tile.js"}
1
+ {"version":3,"sources":["../../../../src/lib/parsers/parse-3d-tile.ts"],"names":["TILE3D_TYPE","getMagicString","parsePointCloud3DTile","parseBatchedModel3DTile","parseInstancedModel3DTile","parseComposite3DTile","parseGltf3DTile","parse3DTile","arrayBuffer","byteOffset","options","context","tile","type","COMPOSITE","BATCHED_3D_MODEL","GLTF","INSTANCED_3D_MODEL","POINT_CLOUD","Error"],"mappings":"AAGA,SAAQA,WAAR,QAA0B,cAA1B;AACA,SAAQC,cAAR,QAA6B,uBAA7B;AAEA,SAAQC,qBAAR,QAAoC,6BAApC;AACA,SAAQC,uBAAR,QAAsC,+BAAtC;AACA,SAAQC,yBAAR,QAAwC,iCAAxC;AACA,SAAQC,oBAAR,QAAmC,2BAAnC;AACA,SAAQC,eAAR,QAA8B,sBAA9B;AAGA,OAAO,eAAeC,WAAf,CAA2BC,WAA3B,EAAwCC,UAAU,GAAG,CAArD,EAAwDC,OAAxD,EAAiEC,OAAjE,EAA0EC,IAAI,GAAG,EAAjF,EAAqF;AAE1FA,EAAAA,IAAI,CAACH,UAAL,GAAkBA,UAAlB;AAEAG,EAAAA,IAAI,CAACC,IAAL,GAAYZ,cAAc,CAACO,WAAD,EAAcC,UAAd,CAA1B;;AAGA,UAAQG,IAAI,CAACC,IAAb;AACE,SAAKb,WAAW,CAACc,SAAjB;AAEE,aAAO,MAAMT,oBAAoB,CAC/BO,IAD+B,EAE/BJ,WAF+B,EAG/BC,UAH+B,EAI/BC,OAJ+B,EAK/BC,OAL+B,EAM/BJ,WAN+B,CAAjC;;AASF,SAAKP,WAAW,CAACe,gBAAjB;AACE,aAAO,MAAMZ,uBAAuB,CAACS,IAAD,EAAOJ,WAAP,EAAoBC,UAApB,EAAgCC,OAAhC,EAAyCC,OAAzC,CAApC;;AAEF,SAAKX,WAAW,CAACgB,IAAjB;AACE,aAAO,MAAMV,eAAe,CAACM,IAAD,EAAOJ,WAAP,EAAoBE,OAApB,EAA6BC,OAA7B,CAA5B;;AAEF,SAAKX,WAAW,CAACiB,kBAAjB;AACE,aAAO,MAAMb,yBAAyB,CAACQ,IAAD,EAAOJ,WAAP,EAAoBC,UAApB,EAAgCC,OAAhC,EAAyCC,OAAzC,CAAtC;;AAEF,SAAKX,WAAW,CAACkB,WAAjB;AACE,aAAO,MAAMhB,qBAAqB,CAACU,IAAD,EAAOJ,WAAP,EAAoBC,UAApB,EAAgCC,OAAhC,EAAyCC,OAAzC,CAAlC;;AAEF;AAEE,YAAM,IAAIQ,KAAJ,sCAAwCP,IAAI,CAACC,IAA7C,EAAN;AA1BJ;AA4BD","sourcesContent":["// This file is derived from the Cesium code base under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport {TILE3D_TYPE} from '../constants';\nimport {getMagicString} from './helpers/parse-utils';\n\nimport {parsePointCloud3DTile} from './parse-3d-tile-point-cloud';\nimport {parseBatchedModel3DTile} from './parse-3d-tile-batched-model';\nimport {parseInstancedModel3DTile} from './parse-3d-tile-instanced-model';\nimport {parseComposite3DTile} from './parse-3d-tile-composite';\nimport {parseGltf3DTile} from './parse-3d-tile-gltf';\n\n// Extracts\nexport async function parse3DTile(arrayBuffer, byteOffset = 0, options, context, tile = {}) {\n // @ts-expect-error\n tile.byteOffset = byteOffset;\n // @ts-expect-error\n tile.type = getMagicString(arrayBuffer, byteOffset);\n\n // @ts-expect-error\n switch (tile.type) {\n case TILE3D_TYPE.COMPOSITE:\n // Note: We pass this function as argument so that embedded tiles can be parsed recursively\n return await parseComposite3DTile(\n tile,\n arrayBuffer,\n byteOffset,\n options,\n context,\n parse3DTile\n );\n\n case TILE3D_TYPE.BATCHED_3D_MODEL:\n return await parseBatchedModel3DTile(tile, arrayBuffer, byteOffset, options, context);\n\n case TILE3D_TYPE.GLTF:\n return await parseGltf3DTile(tile, arrayBuffer, options, context);\n\n case TILE3D_TYPE.INSTANCED_3D_MODEL:\n return await parseInstancedModel3DTile(tile, arrayBuffer, byteOffset, options, context);\n\n case TILE3D_TYPE.POINT_CLOUD:\n return await parsePointCloud3DTile(tile, arrayBuffer, byteOffset, options, context);\n\n default:\n // @ts-expect-error\n throw new Error(`3DTileLoader: unknown type ${tile.type}`); // eslint-disable-line\n }\n}\n"],"file":"parse-3d-tile.js"}
@@ -1,2 +1,2 @@
1
- export const VERSION = typeof "3.1.0-beta.7" !== 'undefined' ? "3.1.0-beta.7" : 'latest';
1
+ export const VERSION = typeof "3.1.0" !== 'undefined' ? "3.1.0" : 'latest';
2
2
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/utils/version.ts"],"names":["VERSION"],"mappings":"AAGA,OAAO,MAAMA,OAAO,GAAG,0BAAuB,WAAvB,oBAAmD,QAAnE","sourcesContent":["// Version constant cannot be imported, it needs to correspond to the build version of **this** module.\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nexport const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n"],"file":"version.js"}
1
+ {"version":3,"sources":["../../../../src/lib/utils/version.ts"],"names":["VERSION"],"mappings":"AAGA,OAAO,MAAMA,OAAO,GAAG,mBAAuB,WAAvB,aAAmD,QAAnE","sourcesContent":["// Version constant cannot be imported, it needs to correspond to the build version of **this** module.\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nexport const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n"],"file":"version.js"}
@@ -2,7 +2,8 @@ import { path } from '@loaders.gl/loader-utils';
2
2
  import { TILESET_TYPE, LOD_METRIC_TYPE } from '@loaders.gl/tiles';
3
3
  import { VERSION } from './lib/utils/version';
4
4
  import { parse3DTile } from './lib/parsers/parse-3d-tile';
5
- import { normalizeTileHeaders } from './lib/parsers/parse-3d-tile-header';
5
+ import { normalizeTileHeaders, normalizeImplicitTileHeaders } from './lib/parsers/parse-3d-tile-header';
6
+ const IMPLICIT_TILING_EXTENSION_NAME = '3DTILES_implicit_tiling';
6
7
  export const Tiles3DLoader = {
7
8
  id: '3d-tiles',
8
9
  name: '3D Tiles',
@@ -44,7 +45,7 @@ async function parseTileset(data, options, context) {
44
45
  tilesetJson.loader = options.loader || Tiles3DLoader;
45
46
  tilesetJson.url = context.url;
46
47
  tilesetJson.basePath = getBaseUri(tilesetJson);
47
- tilesetJson.root = normalizeTileHeaders(tilesetJson);
48
+ tilesetJson.root = hasImplicitTilingExtension(tilesetJson) ? await normalizeImplicitTileHeaders(tilesetJson) : normalizeTileHeaders(tilesetJson);
48
49
  tilesetJson.type = TILESET_TYPE.TILES3D;
49
50
  tilesetJson.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;
50
51
  tilesetJson.lodMetricValue = ((_tilesetJson$root = tilesetJson.root) === null || _tilesetJson$root === void 0 ? void 0 : _tilesetJson$root.lodMetricValue) || 0;
@@ -69,4 +70,10 @@ async function parse(data, options, context) {
69
70
 
70
71
  return data;
71
72
  }
73
+
74
+ function hasImplicitTilingExtension(tilesetJson) {
75
+ var _tilesetJson$extensio, _tilesetJson$extensio2;
76
+
77
+ return (tilesetJson === null || tilesetJson === void 0 ? void 0 : (_tilesetJson$extensio = tilesetJson.extensionsRequired) === null || _tilesetJson$extensio === void 0 ? void 0 : _tilesetJson$extensio.includes(IMPLICIT_TILING_EXTENSION_NAME)) && (tilesetJson === null || tilesetJson === void 0 ? void 0 : (_tilesetJson$extensio2 = tilesetJson.extensionsUsed) === null || _tilesetJson$extensio2 === void 0 ? void 0 : _tilesetJson$extensio2.includes(IMPLICIT_TILING_EXTENSION_NAME));
78
+ }
72
79
  //# sourceMappingURL=tiles-3d-loader.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/tiles-3d-loader.ts"],"names":["path","TILESET_TYPE","LOD_METRIC_TYPE","VERSION","parse3DTile","normalizeTileHeaders","Tiles3DLoader","id","name","module","version","extensions","mimeTypes","tests","parse","options","loadGLTF","decodeQuantizedPositions","isTileset","assetGltfUpAxis","getBaseUri","tileset","dirname","url","parseTile","arrayBuffer","context","tile","content","featureIds","byteOffset","parseTileset","data","tilesetJson","JSON","TextDecoder","decode","loader","basePath","root","type","TILES3D","lodMetricType","GEOMETRIC_ERROR","lodMetricValue","loaderOptions","indexOf"],"mappings":"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","sourcesContent":["import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {path} from '@loaders.gl/loader-utils';\nimport {TILESET_TYPE, LOD_METRIC_TYPE} from '@loaders.gl/tiles';\nimport {VERSION} from './lib/utils/version';\nimport {parse3DTile} from './lib/parsers/parse-3d-tile';\nimport {normalizeTileHeaders} from './lib/parsers/parse-3d-tile-header';\n\n/**\n * Loader for 3D Tiles\n */\nexport const Tiles3DLoader: LoaderWithParser = {\n id: '3d-tiles',\n name: '3D Tiles',\n module: '3d-tiles',\n version: VERSION,\n extensions: ['cmpt', 'pnts', 'b3dm', 'i3dm'],\n mimeTypes: ['application/octet-stream'],\n tests: ['cmpt', 'pnts', 'b3dm', 'i3dm'],\n parse,\n options: {\n '3d-tiles': {\n loadGLTF: true,\n decodeQuantizedPositions: false,\n isTileset: 'auto',\n assetGltfUpAxis: null\n }\n }\n};\n\nfunction getBaseUri(tileset) {\n return path.dirname(tileset.url);\n}\n\nasync function parseTile(arrayBuffer, options, context) {\n const tile = {\n content: {\n featureIds: null\n }\n };\n const byteOffset = 0;\n await parse3DTile(arrayBuffer, byteOffset, options, context, tile.content);\n return tile.content;\n}\n\nasync function parseTileset(data, options, context) {\n const tilesetJson = JSON.parse(new TextDecoder().decode(data));\n // eslint-disable-next-line no-use-before-define\n tilesetJson.loader = options.loader || Tiles3DLoader;\n tilesetJson.url = context.url;\n // base path that non-absolute paths in tileset are relative to.\n tilesetJson.basePath = getBaseUri(tilesetJson);\n tilesetJson.root = normalizeTileHeaders(tilesetJson);\n tilesetJson.type = TILESET_TYPE.TILES3D;\n\n tilesetJson.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;\n tilesetJson.lodMetricValue = tilesetJson.root?.lodMetricValue || 0;\n\n return tilesetJson;\n}\n\nasync function parse(data, options, context) {\n // auto detect file type\n const loaderOptions = options['3d-tiles'] || {};\n let isTileset;\n if (loaderOptions.isTileset === 'auto') {\n isTileset = context.url && context.url.indexOf('.json') !== -1;\n } else {\n isTileset = loaderOptions.isTileset;\n }\n\n if (isTileset) {\n data = await parseTileset(data, options, context);\n } else {\n data = await parseTile(data, options, context);\n }\n\n return data;\n}\n"],"file":"tiles-3d-loader.js"}
1
+ {"version":3,"sources":["../../src/tiles-3d-loader.ts"],"names":["path","TILESET_TYPE","LOD_METRIC_TYPE","VERSION","parse3DTile","normalizeTileHeaders","normalizeImplicitTileHeaders","IMPLICIT_TILING_EXTENSION_NAME","Tiles3DLoader","id","name","module","version","extensions","mimeTypes","tests","parse","options","loadGLTF","decodeQuantizedPositions","isTileset","assetGltfUpAxis","getBaseUri","tileset","dirname","url","parseTile","arrayBuffer","context","tile","content","featureIds","byteOffset","parseTileset","data","tilesetJson","JSON","TextDecoder","decode","loader","basePath","root","hasImplicitTilingExtension","type","TILES3D","lodMetricType","GEOMETRIC_ERROR","lodMetricValue","loaderOptions","indexOf","extensionsRequired","includes","extensionsUsed"],"mappings":"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","sourcesContent":["import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {path} from '@loaders.gl/loader-utils';\nimport {TILESET_TYPE, LOD_METRIC_TYPE} from '@loaders.gl/tiles';\nimport {VERSION} from './lib/utils/version';\nimport {parse3DTile} from './lib/parsers/parse-3d-tile';\nimport {\n normalizeTileHeaders,\n normalizeImplicitTileHeaders\n} from './lib/parsers/parse-3d-tile-header';\n\nconst IMPLICIT_TILING_EXTENSION_NAME = '3DTILES_implicit_tiling';\n\n/**\n * Loader for 3D Tiles\n */\nexport const Tiles3DLoader: LoaderWithParser = {\n id: '3d-tiles',\n name: '3D Tiles',\n module: '3d-tiles',\n version: VERSION,\n extensions: ['cmpt', 'pnts', 'b3dm', 'i3dm'],\n mimeTypes: ['application/octet-stream'],\n tests: ['cmpt', 'pnts', 'b3dm', 'i3dm'],\n parse,\n options: {\n '3d-tiles': {\n loadGLTF: true,\n decodeQuantizedPositions: false,\n isTileset: 'auto',\n assetGltfUpAxis: null\n }\n }\n};\n\nfunction getBaseUri(tileset) {\n return path.dirname(tileset.url);\n}\n\nasync function parseTile(arrayBuffer, options, context) {\n const tile = {\n content: {\n featureIds: null\n }\n };\n const byteOffset = 0;\n await parse3DTile(arrayBuffer, byteOffset, options, context, tile.content);\n return tile.content;\n}\n\nasync function parseTileset(data, options, context) {\n const tilesetJson = JSON.parse(new TextDecoder().decode(data));\n // eslint-disable-next-line no-use-before-define\n tilesetJson.loader = options.loader || Tiles3DLoader;\n tilesetJson.url = context.url;\n // base path that non-absolute paths in tileset are relative to.\n tilesetJson.basePath = getBaseUri(tilesetJson);\n tilesetJson.root = hasImplicitTilingExtension(tilesetJson)\n ? await normalizeImplicitTileHeaders(tilesetJson)\n : normalizeTileHeaders(tilesetJson);\n\n tilesetJson.type = TILESET_TYPE.TILES3D;\n\n tilesetJson.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;\n tilesetJson.lodMetricValue = tilesetJson.root?.lodMetricValue || 0;\n\n return tilesetJson;\n}\n\nasync function parse(data, options, context) {\n // auto detect file type\n const loaderOptions = options['3d-tiles'] || {};\n let isTileset;\n if (loaderOptions.isTileset === 'auto') {\n isTileset = context.url && context.url.indexOf('.json') !== -1;\n } else {\n isTileset = loaderOptions.isTileset;\n }\n\n if (isTileset) {\n data = await parseTileset(data, options, context);\n } else {\n data = await parseTile(data, options, context);\n }\n\n return data;\n}\n\nfunction hasImplicitTilingExtension(tilesetJson) {\n return (\n tilesetJson?.extensionsRequired?.includes(IMPLICIT_TILING_EXTENSION_NAME) &&\n tilesetJson?.extensionsUsed?.includes(IMPLICIT_TILING_EXTENSION_NAME)\n );\n}\n"],"file":"tiles-3d-loader.js"}
@@ -5,6 +5,7 @@ export declare const TILE3D_TYPE: {
5
5
  INSTANCED_3D_MODEL: string;
6
6
  GEOMETRY: string;
7
7
  VECTOR: string;
8
+ GLTF: string;
8
9
  };
9
10
  export declare const TILE3D_TYPES: string[];
10
11
  export declare const MAGIC_ARRAY: {
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/lib/constants.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW;;;;;;;CAOvB,CAAC;AAEF,eAAO,MAAM,YAAY,UAA2B,CAAC;AAErD,eAAO,MAAM,WAAW;;;;;CAKvB,CAAC;AAGF,eAAO,MAAM,wBAAwB;;;;CAIpC,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/lib/constants.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW;;;;;;;;CAQvB,CAAC;AAEF,eAAO,MAAM,YAAY,UAA2B,CAAC;AAErD,eAAO,MAAM,WAAW;;;;;CAKvB,CAAC;AAGF,eAAO,MAAM,wBAAwB;;;;CAIpC,CAAC"}
@@ -8,7 +8,8 @@ exports.TILE3D_TYPE = {
8
8
  BATCHED_3D_MODEL: 'b3dm',
9
9
  INSTANCED_3D_MODEL: 'i3dm',
10
10
  GEOMETRY: 'geom',
11
- VECTOR: 'vect'
11
+ VECTOR: 'vect',
12
+ GLTF: 'glTF'
12
13
  };
13
14
  exports.TILE3D_TYPES = Object.keys(exports.TILE3D_TYPE);
14
15
  exports.MAGIC_ARRAY = {
@@ -1,4 +1,4 @@
1
- export function getIonTilesetMetadata(accessToken: any, assetId: any): Promise<any>;
2
- export function getIonAssets(accessToken: any): Promise<any>;
3
- export function getIonAssetMetadata(accessToken: any, assetId: any): Promise<any>;
1
+ export declare function getIonTilesetMetadata(accessToken: any, assetId: any): Promise<any>;
2
+ export declare function getIonAssets(accessToken: any): Promise<any>;
3
+ export declare function getIonAssetMetadata(accessToken: any, assetId: any): Promise<any>;
4
4
  //# sourceMappingURL=ion.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ion.d.ts","sourceRoot":"","sources":["../../../src/lib/ion/ion.js"],"names":[],"mappings":"AAQA,oFAqBC;AAGD,6DASC;AAGD,kFA4BC"}
1
+ {"version":3,"file":"ion.d.ts","sourceRoot":"","sources":["../../../src/lib/ion/ion.ts"],"names":[],"mappings":"AAQA,wBAAsB,qBAAqB,CAAC,WAAW,KAAA,EAAE,OAAO,KAAA,gBAqB/D;AAGD,wBAAsB,YAAY,CAAC,WAAW,KAAA,gBAS7C;AAGD,wBAAsB,mBAAmB,CAAC,WAAW,KAAA,EAAE,OAAO,KAAA,gBA4B7D"}
@@ -0,0 +1,39 @@
1
+ import type { Subtree } from '../../../types';
2
+ /**
3
+ * Recursively parse implicit tiles tree
4
+ * Spec - https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_implicit_tiling
5
+ * TODO Check out do we able to use Tile3D class as return type here.
6
+ * @param subtree
7
+ * @param lodMetricValue
8
+ * @param options
9
+ * @param parentData
10
+ * @param childIndex
11
+ * @param level
12
+ * @param globalData
13
+ */
14
+ export declare function parseImplicitTiles(subtree: Subtree, options: any, parentData?: {
15
+ mortonIndex: number;
16
+ x: number;
17
+ y: number;
18
+ z: number;
19
+ }, childIndex?: number, level?: number, globalData?: {
20
+ level: number;
21
+ mortonIndex: number;
22
+ x: number;
23
+ y: number;
24
+ z: number;
25
+ }): Promise<{
26
+ children: never[];
27
+ lodMetricValue: number;
28
+ contentUrl: string;
29
+ }>;
30
+ /**
31
+ * Replace implicit tile content url with real coordinates.
32
+ * @param templateUrl
33
+ * @param level
34
+ * @param x
35
+ * @param y
36
+ * @param z
37
+ */
38
+ export declare function replaceContentUrlTemplate(templateUrl: string, level: number, x: number, y: number, z: number): string;
39
+ //# sourceMappingURL=parse-3d-implicit-tiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-3d-implicit-tiles.d.ts","sourceRoot":"","sources":["../../../../src/lib/parsers/helpers/parse-3d-implicit-tiles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,OAAO,EAAC,MAAM,gBAAgB,CAAC;AAY1D;;;;;;;;;;;GAWG;AAGH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,GAAG,EACZ,UAAU,GAAE;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAKhE,EACD,UAAU,GAAE,MAAU,EACtB,KAAK,GAAE,MAAU,EACjB,UAAU,GAAE;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAM/E;;;;GA6GF;AAqDD;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,GACR,MAAM,CAGR"}
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.replaceContentUrlTemplate = exports.parseImplicitTiles = void 0;
4
+ const tile_3d_subtree_loader_1 = require("../../../tile-3d-subtree-loader");
5
+ const core_1 = require("@loaders.gl/core");
6
+ const QUADTREE_DEVISION_COUNT = 4;
7
+ const OCTREE_DEVISION_COUNT = 8;
8
+ const SUBDIVISION_COUNT_MAP = {
9
+ QUADTREE: QUADTREE_DEVISION_COUNT,
10
+ OCTREE: OCTREE_DEVISION_COUNT
11
+ };
12
+ /**
13
+ * Recursively parse implicit tiles tree
14
+ * Spec - https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_implicit_tiling
15
+ * TODO Check out do we able to use Tile3D class as return type here.
16
+ * @param subtree
17
+ * @param lodMetricValue
18
+ * @param options
19
+ * @param parentData
20
+ * @param childIndex
21
+ * @param level
22
+ * @param globalData
23
+ */
24
+ // eslint-disable-next-line max-params
25
+ // eslint-disable-next-line max-statements
26
+ async function parseImplicitTiles(subtree, options, parentData = {
27
+ mortonIndex: 0,
28
+ x: 0,
29
+ y: 0,
30
+ z: 0
31
+ }, childIndex = 0, level = 0, globalData = {
32
+ level: 0,
33
+ mortonIndex: 0,
34
+ x: 0,
35
+ y: 0,
36
+ z: 0
37
+ }) {
38
+ const { subdivisionScheme, subtreeLevels, maximumLevel, contentUrlTemplate, subtreesUriTemplate, basePath } = options;
39
+ const tile = { children: [], lodMetricValue: 0, contentUrl: '' };
40
+ const childrenPerTile = SUBDIVISION_COUNT_MAP[subdivisionScheme];
41
+ const childX = childIndex & 0b01;
42
+ const childY = (childIndex >> 1) & 0b01;
43
+ const childZ = (childIndex >> 2) & 0b01;
44
+ const levelOffset = (childrenPerTile ** level - 1) / (childrenPerTile - 1);
45
+ let childTileMortonIndex = concatBits(parentData.mortonIndex, childIndex);
46
+ let tileAvailabilityIndex = levelOffset + childTileMortonIndex;
47
+ // Local tile coordinates
48
+ let childTileX = concatBits(parentData.x, childX);
49
+ let childTileY = concatBits(parentData.y, childY);
50
+ let childTileZ = concatBits(parentData.z, childZ);
51
+ // TODO Remove after real implicit tileset will be tested.
52
+ // Degug data
53
+ // tile.level = level + globalData.level;
54
+ // tile.x = concatBits(globalData.x, childTileX);
55
+ // tile.y = concatBits(globalData.y, childTileY);
56
+ // tile.z = concatBits(globalData.z, childTileZ);
57
+ // tile.mortonIndex = childTileMortonIndex;
58
+ // End of debug data
59
+ let isChildSubtreeAvailable = false;
60
+ if (level + 1 > subtreeLevels) {
61
+ isChildSubtreeAvailable = getAvailabilityResult(subtree.childSubtreeAvailability, childTileMortonIndex);
62
+ }
63
+ const x = concatBits(globalData.x, childTileX);
64
+ const y = concatBits(globalData.y, childTileY);
65
+ const z = concatBits(globalData.z, childTileZ);
66
+ const lev = level + globalData.level;
67
+ if (isChildSubtreeAvailable) {
68
+ const subtreePath = `${basePath}/${subtreesUriTemplate}`;
69
+ const childSubtreeUrl = replaceContentUrlTemplate(subtreePath, lev, x, y, z);
70
+ const childSubtree = await (0, core_1.load)(childSubtreeUrl, tile_3d_subtree_loader_1.Tile3DSubtreeLoader);
71
+ subtree = childSubtree;
72
+ globalData.mortonIndex = childTileMortonIndex;
73
+ globalData.x = childTileX;
74
+ globalData.y = childTileY;
75
+ globalData.z = childTileZ;
76
+ globalData.level = level;
77
+ childTileMortonIndex = 0;
78
+ tileAvailabilityIndex = 0;
79
+ childTileX = 0;
80
+ childTileY = 0;
81
+ childTileZ = 0;
82
+ level = 0;
83
+ }
84
+ const isTileAvailable = getAvailabilityResult(subtree.tileAvailability, tileAvailabilityIndex);
85
+ if (!isTileAvailable || level > maximumLevel) {
86
+ return tile;
87
+ }
88
+ const isContentAvailable = getAvailabilityResult(subtree.contentAvailability, tileAvailabilityIndex);
89
+ if (isContentAvailable) {
90
+ tile.contentUrl = replaceContentUrlTemplate(contentUrlTemplate, lev, x, y, z);
91
+ }
92
+ const childTileLevel = level + 1;
93
+ const pData = { mortonIndex: childTileMortonIndex, x: childTileX, y: childTileY, z: childTileZ };
94
+ for (let index = 0; index < childrenPerTile; index++) {
95
+ const currentTile = await parseImplicitTiles(subtree, options, pData, index, childTileLevel, globalData);
96
+ if (currentTile.contentUrl || currentTile.children.length) {
97
+ const globalLevel = lev + 1;
98
+ const formattedTile = formatTileData(currentTile, globalLevel, options);
99
+ // @ts-ignore
100
+ tile.children.push(formattedTile);
101
+ }
102
+ }
103
+ return tile;
104
+ }
105
+ exports.parseImplicitTiles = parseImplicitTiles;
106
+ function getAvailabilityResult(availabilityData, index) {
107
+ if ('constant' in availabilityData) {
108
+ return Boolean(availabilityData.constant);
109
+ }
110
+ if (availabilityData.explicitBitstream) {
111
+ return getBooleanValueFromBitstream(index, availabilityData.explicitBitstream);
112
+ }
113
+ return false;
114
+ }
115
+ /**
116
+ * Do formatting of implicit tile data.
117
+ * TODO Check out do we able to use Tile3D class as type here.
118
+ * @param tile
119
+ * @param lodMetricValue
120
+ * @param options
121
+ * @returns
122
+ */
123
+ function formatTileData(tile, level, options) {
124
+ const { basePath, refine, getRefine, lodMetricType, getTileType, rootLodMetricValue } = options;
125
+ const uri = tile.contentUrl && tile.contentUrl.replace(`${basePath}/`, '');
126
+ const lodMetricValue = rootLodMetricValue / 2 ** level;
127
+ // TODO handle bounding volume
128
+ return {
129
+ children: tile.children,
130
+ contentUrl: tile.contentUrl,
131
+ content: { uri },
132
+ id: tile.contentUrl,
133
+ refine: getRefine(refine),
134
+ type: getTileType(tile),
135
+ lodMetricType,
136
+ lodMetricValue
137
+ // Temp debug values. Remove when real implicit tileset will be tested.
138
+ // x: tile.x,
139
+ // y: tile.y,
140
+ // z: tile.z,
141
+ // level: tile.level
142
+ };
143
+ }
144
+ /**
145
+ * Do binary concatenation
146
+ * @param first
147
+ * @param second
148
+ */
149
+ function concatBits(first, second) {
150
+ return parseInt(first.toString(2) + second.toString(2), 2);
151
+ }
152
+ /**
153
+ * Replace implicit tile content url with real coordinates.
154
+ * @param templateUrl
155
+ * @param level
156
+ * @param x
157
+ * @param y
158
+ * @param z
159
+ */
160
+ function replaceContentUrlTemplate(templateUrl, level, x, y, z) {
161
+ const mapUrl = generateMapUrl({ level, x, y, z });
162
+ return templateUrl.replace(/{level}|{x}|{y}|{z}/gi, (matched) => mapUrl[matched]);
163
+ }
164
+ exports.replaceContentUrlTemplate = replaceContentUrlTemplate;
165
+ /**
166
+ * Get Map object for content url generation
167
+ * @param items
168
+ */
169
+ function generateMapUrl(items) {
170
+ const mapUrl = {};
171
+ for (const key in items) {
172
+ mapUrl[`{${key}}`] = items[key];
173
+ }
174
+ return mapUrl;
175
+ }
176
+ /**
177
+ * Get boolean value from bistream by index
178
+ * A boolean value is encoded as a single bit, either 0 (false) or 1 (true).
179
+ * Multiple boolean values are packed tightly in the same buffer.
180
+ * These buffers of tightly-packed bits are sometimes referred to as bitstreams.
181
+ * Spec - https://github.com/CesiumGS/3d-tiles/tree/implicit-revisions/specification/Metadata#booleans
182
+ * @param availabilitiIndex
183
+ */
184
+ function getBooleanValueFromBitstream(availabilityIndex, availabilityBuffer) {
185
+ const byteIndex = Math.floor(availabilityIndex / 8);
186
+ const bitIndex = availabilityIndex % 8;
187
+ const bitValue = (availabilityBuffer[byteIndex] >> bitIndex) & 1;
188
+ return bitValue === 1;
189
+ }
@@ -1,9 +1,9 @@
1
- import type { SubtreeAvailability } from '../../../types';
1
+ import type { Subtree } from '../../../types';
2
2
  /**
3
3
  * Parse subtree file
4
4
  * Spec - https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_implicit_tiling#subtree-file-format
5
5
  * @param data
6
6
  * @returns
7
7
  */
8
- export default function parse3DTilesSubtree(data: ArrayBuffer): Promise<SubtreeAvailability>;
8
+ export default function parse3DTilesSubtree(data: ArrayBuffer): Promise<Subtree>;
9
9
  //# sourceMappingURL=parse-3d-tile-subtree.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse-3d-tile-subtree.d.ts","sourceRoot":"","sources":["../../../../src/lib/parsers/helpers/parse-3d-tile-subtree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,mBAAmB,EAAoB,MAAM,gBAAgB,CAAC;AAM3E;;;;;GAKG;AACH,wBAA8B,mBAAmB,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAoDjG"}
1
+ {"version":3,"file":"parse-3d-tile-subtree.d.ts","sourceRoot":"","sources":["../../../../src/lib/parsers/helpers/parse-3d-tile-subtree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,OAAO,EAAoB,MAAM,gBAAgB,CAAC;AAM/D;;;;;GAKG;AAEH,wBAA8B,mBAAmB,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAoDrF"}
@@ -9,6 +9,7 @@ const SUBTREE_FILE_VERSION = 1;
9
9
  * @param data
10
10
  * @returns
11
11
  */
12
+ // eslint-disable-next-line max-statements
12
13
  async function parse3DTilesSubtree(data) {
13
14
  const magic = new Uint32Array(data.slice(0, 4));
14
15
  if (magic[0] !== SUBTREE_FILE_MAGIC) {
@@ -0,0 +1,2 @@
1
+ export function parseGltf3DTile(tile: any, arrayBuffer: any, options: any, context: any): Promise<void>;
2
+ //# sourceMappingURL=parse-3d-tile-gltf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-3d-tile-gltf.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/parse-3d-tile-gltf.js"],"names":[],"mappings":"AAEA,wGAaC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseGltf3DTile = void 0;
4
+ const gltf_1 = require("@loaders.gl/gltf");
5
+ async function parseGltf3DTile(tile, arrayBuffer, options, context) {
6
+ // Set flags
7
+ // glTF models need to be rotated from Y to Z up
8
+ // https://github.com/AnalyticalGraphicsInc/3d-tiles/tree/master/specification#y-up-to-z-up
9
+ tile.rotateYtoZ = true;
10
+ // Save gltf up axis
11
+ tile.gltfUpAxis =
12
+ options['3d-tiles'] && options['3d-tiles'].assetGltfUpAxis
13
+ ? options['3d-tiles'].assetGltfUpAxis
14
+ : 'Y';
15
+ const { parse } = context;
16
+ tile.gltf = await parse(arrayBuffer, gltf_1.GLTFLoader, options, context);
17
+ }
18
+ exports.parseGltf3DTile = parseGltf3DTile;