@loaders.gl/3d-tiles 4.0.0-alpha.4 → 4.0.0-alpha.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (393) hide show
  1. package/dist/bundle.d.ts +2 -0
  2. package/dist/bundle.d.ts.map +1 -0
  3. package/dist/bundle.js +2 -2
  4. package/dist/cesium-ion-loader.d.ts +6 -0
  5. package/dist/cesium-ion-loader.d.ts.map +1 -0
  6. package/dist/cesium-ion-loader.js +37 -32
  7. package/dist/dist.min.js +14526 -0
  8. package/dist/es5/bundle.js +6 -0
  9. package/dist/es5/bundle.js.map +1 -0
  10. package/dist/es5/cesium-ion-loader.js +77 -0
  11. package/dist/es5/cesium-ion-loader.js.map +1 -0
  12. package/dist/es5/index.js +63 -0
  13. package/dist/es5/index.js.map +1 -0
  14. package/dist/es5/lib/classes/helpers/tile-3d-accessor-utils.js +114 -0
  15. package/dist/es5/lib/classes/helpers/tile-3d-accessor-utils.js.map +1 -0
  16. package/dist/es5/lib/classes/tile-3d-batch-table-hierarchy.js +180 -0
  17. package/dist/es5/lib/classes/tile-3d-batch-table-hierarchy.js.map +1 -0
  18. package/dist/es5/lib/classes/tile-3d-batch-table.js +285 -0
  19. package/dist/es5/lib/classes/tile-3d-batch-table.js.map +1 -0
  20. package/dist/es5/lib/classes/tile-3d-feature-table.js +97 -0
  21. package/dist/es5/lib/classes/tile-3d-feature-table.js.map +1 -0
  22. package/dist/es5/lib/constants.js +32 -0
  23. package/dist/es5/lib/constants.js.map +1 -0
  24. package/dist/es5/lib/encoders/encode-3d-tile-batched-model.js +49 -0
  25. package/dist/es5/lib/encoders/encode-3d-tile-batched-model.js.map +1 -0
  26. package/dist/es5/lib/encoders/encode-3d-tile-composite.js +30 -0
  27. package/dist/es5/lib/encoders/encode-3d-tile-composite.js.map +1 -0
  28. package/dist/es5/lib/encoders/encode-3d-tile-instanced-model.js +47 -0
  29. package/dist/es5/lib/encoders/encode-3d-tile-instanced-model.js.map +1 -0
  30. package/dist/es5/lib/encoders/encode-3d-tile-point-cloud.js +48 -0
  31. package/dist/es5/lib/encoders/encode-3d-tile-point-cloud.js.map +1 -0
  32. package/dist/es5/lib/encoders/encode-3d-tile.js +35 -0
  33. package/dist/es5/lib/encoders/encode-3d-tile.js.map +1 -0
  34. package/dist/es5/lib/encoders/helpers/encode-3d-tile-header.js +35 -0
  35. package/dist/es5/lib/encoders/helpers/encode-3d-tile-header.js.map +1 -0
  36. package/dist/es5/lib/ion/ion.js +170 -0
  37. package/dist/es5/lib/ion/ion.js.map +1 -0
  38. package/dist/es5/lib/parsers/helpers/normalize-3d-tile-colors.js +64 -0
  39. package/dist/es5/lib/parsers/helpers/normalize-3d-tile-colors.js.map +1 -0
  40. package/dist/es5/lib/parsers/helpers/normalize-3d-tile-normals.js +32 -0
  41. package/dist/es5/lib/parsers/helpers/normalize-3d-tile-normals.js.map +1 -0
  42. package/dist/es5/lib/parsers/helpers/normalize-3d-tile-positions.js +32 -0
  43. package/dist/es5/lib/parsers/helpers/normalize-3d-tile-positions.js.map +1 -0
  44. package/dist/es5/lib/parsers/helpers/parse-3d-implicit-tiles.js +280 -0
  45. package/dist/es5/lib/parsers/helpers/parse-3d-implicit-tiles.js.map +1 -0
  46. package/dist/es5/lib/parsers/helpers/parse-3d-tile-gltf-view.js +96 -0
  47. package/dist/es5/lib/parsers/helpers/parse-3d-tile-gltf-view.js.map +1 -0
  48. package/dist/es5/lib/parsers/helpers/parse-3d-tile-header.js +22 -0
  49. package/dist/es5/lib/parsers/helpers/parse-3d-tile-header.js.map +1 -0
  50. package/dist/es5/lib/parsers/helpers/parse-3d-tile-subtree.js +145 -0
  51. package/dist/es5/lib/parsers/helpers/parse-3d-tile-subtree.js.map +1 -0
  52. package/dist/es5/lib/parsers/helpers/parse-3d-tile-tables.js +85 -0
  53. package/dist/es5/lib/parsers/helpers/parse-3d-tile-tables.js.map +1 -0
  54. package/dist/es5/lib/parsers/helpers/parse-utils.js +28 -0
  55. package/dist/es5/lib/parsers/helpers/parse-utils.js.map +1 -0
  56. package/dist/es5/lib/parsers/parse-3d-tile-batched-model.js +51 -0
  57. package/dist/es5/lib/parsers/parse-3d-tile-batched-model.js.map +1 -0
  58. package/dist/es5/lib/parsers/parse-3d-tile-composite.js +48 -0
  59. package/dist/es5/lib/parsers/parse-3d-tile-composite.js.map +1 -0
  60. package/dist/es5/lib/parsers/parse-3d-tile-gltf.js +35 -0
  61. package/dist/es5/lib/parsers/parse-3d-tile-gltf.js.map +1 -0
  62. package/dist/es5/lib/parsers/parse-3d-tile-header.js +271 -0
  63. package/dist/es5/lib/parsers/parse-3d-tile-header.js.map +1 -0
  64. package/dist/es5/lib/parsers/parse-3d-tile-instanced-model.js +172 -0
  65. package/dist/es5/lib/parsers/parse-3d-tile-instanced-model.js.map +1 -0
  66. package/dist/es5/lib/parsers/parse-3d-tile-point-cloud.js +271 -0
  67. package/dist/es5/lib/parsers/parse-3d-tile-point-cloud.js.map +1 -0
  68. package/dist/es5/lib/parsers/parse-3d-tile.js +74 -0
  69. package/dist/es5/lib/parsers/parse-3d-tile.js.map +1 -0
  70. package/dist/es5/lib/utils/obb/s2-corners-to-obb.js +30 -0
  71. package/dist/es5/lib/utils/obb/s2-corners-to-obb.js.map +1 -0
  72. package/dist/es5/lib/utils/s2/converters/s2-to-boundary.js +44 -0
  73. package/dist/es5/lib/utils/s2/converters/s2-to-boundary.js.map +1 -0
  74. package/dist/es5/lib/utils/s2/converters/s2-to-obb-points.js +30 -0
  75. package/dist/es5/lib/utils/s2/converters/s2-to-obb-points.js.map +1 -0
  76. package/dist/es5/lib/utils/s2/converters/s2-to-region.js +52 -0
  77. package/dist/es5/lib/utils/s2/converters/s2-to-region.js.map +1 -0
  78. package/dist/es5/lib/utils/s2/index.js +90 -0
  79. package/dist/es5/lib/utils/s2/index.js.map +1 -0
  80. package/dist/es5/lib/utils/s2/s2-geometry-functions.js +19 -0
  81. package/dist/es5/lib/utils/s2/s2-geometry-functions.js.map +1 -0
  82. package/dist/es5/lib/utils/s2/s2-token-functions.js +41 -0
  83. package/dist/es5/lib/utils/s2/s2-token-functions.js.map +1 -0
  84. package/dist/es5/lib/utils/s2/s2geometry/s2-cell-utils.js +22 -0
  85. package/dist/es5/lib/utils/s2/s2geometry/s2-cell-utils.js.map +1 -0
  86. package/dist/es5/lib/utils/s2/s2geometry/s2-geometry.js +207 -0
  87. package/dist/es5/lib/utils/s2/s2geometry/s2-geometry.js.map +1 -0
  88. package/dist/es5/lib/utils/version.js +9 -0
  89. package/dist/es5/lib/utils/version.js.map +1 -0
  90. package/dist/es5/tile-3d-subtree-loader.js +22 -0
  91. package/dist/es5/tile-3d-subtree-loader.js.map +1 -0
  92. package/dist/es5/tile-3d-writer.js +26 -0
  93. package/dist/es5/tile-3d-writer.js.map +1 -0
  94. package/dist/es5/tiles-3d-loader.js +134 -0
  95. package/dist/es5/tiles-3d-loader.js.map +1 -0
  96. package/dist/es5/types.js +2 -0
  97. package/dist/es5/types.js.map +1 -0
  98. package/dist/esm/bundle.js +4 -0
  99. package/dist/esm/bundle.js.map +1 -0
  100. package/dist/esm/cesium-ion-loader.js +36 -0
  101. package/dist/esm/cesium-ion-loader.js.map +1 -0
  102. package/dist/esm/index.js +9 -0
  103. package/dist/esm/index.js.map +1 -0
  104. package/dist/esm/lib/classes/helpers/tile-3d-accessor-utils.js +96 -0
  105. package/dist/esm/lib/classes/helpers/tile-3d-accessor-utils.js.map +1 -0
  106. package/dist/esm/lib/classes/tile-3d-batch-table-hierarchy.js +171 -0
  107. package/dist/esm/lib/classes/tile-3d-batch-table-hierarchy.js.map +1 -0
  108. package/dist/esm/lib/classes/tile-3d-batch-table.js +231 -0
  109. package/dist/esm/lib/classes/tile-3d-batch-table.js.map +1 -0
  110. package/dist/esm/lib/classes/tile-3d-feature-table.js +70 -0
  111. package/dist/esm/lib/classes/tile-3d-feature-table.js.map +1 -0
  112. package/dist/esm/lib/constants.js +22 -0
  113. package/dist/esm/lib/constants.js.map +1 -0
  114. package/dist/esm/lib/encoders/encode-3d-tile-batched-model.js +40 -0
  115. package/dist/esm/lib/encoders/encode-3d-tile-batched-model.js.map +1 -0
  116. package/dist/esm/lib/encoders/encode-3d-tile-composite.js +21 -0
  117. package/dist/esm/lib/encoders/encode-3d-tile-composite.js.map +1 -0
  118. package/dist/esm/lib/encoders/encode-3d-tile-instanced-model.js +36 -0
  119. package/dist/esm/lib/encoders/encode-3d-tile-instanced-model.js.map +1 -0
  120. package/dist/esm/lib/encoders/encode-3d-tile-point-cloud.js +39 -0
  121. package/dist/esm/lib/encoders/encode-3d-tile-point-cloud.js.map +1 -0
  122. package/dist/esm/lib/encoders/encode-3d-tile.js +29 -0
  123. package/dist/esm/lib/encoders/encode-3d-tile.js.map +1 -0
  124. package/dist/esm/lib/encoders/helpers/encode-3d-tile-header.js +28 -0
  125. package/dist/esm/lib/encoders/helpers/encode-3d-tile-header.js.map +1 -0
  126. package/dist/esm/lib/ion/ion.js +70 -0
  127. package/dist/esm/lib/ion/ion.js.map +1 -0
  128. package/dist/esm/lib/parsers/helpers/normalize-3d-tile-colors.js +58 -0
  129. package/dist/esm/lib/parsers/helpers/normalize-3d-tile-colors.js.map +1 -0
  130. package/dist/esm/lib/parsers/helpers/normalize-3d-tile-normals.js +26 -0
  131. package/dist/esm/lib/parsers/helpers/normalize-3d-tile-normals.js.map +1 -0
  132. package/dist/esm/lib/parsers/helpers/normalize-3d-tile-positions.js +26 -0
  133. package/dist/esm/lib/parsers/helpers/normalize-3d-tile-positions.js.map +1 -0
  134. package/dist/esm/lib/parsers/helpers/parse-3d-implicit-tiles.js +241 -0
  135. package/dist/esm/lib/parsers/helpers/parse-3d-implicit-tiles.js.map +1 -0
  136. package/dist/esm/lib/parsers/helpers/parse-3d-tile-gltf-view.js +59 -0
  137. package/dist/esm/lib/parsers/helpers/parse-3d-tile-gltf-view.js.map +1 -0
  138. package/dist/esm/lib/parsers/helpers/parse-3d-tile-header.js +16 -0
  139. package/dist/esm/lib/parsers/helpers/parse-3d-tile-header.js.map +1 -0
  140. package/dist/esm/lib/parsers/helpers/parse-3d-tile-subtree.js +67 -0
  141. package/dist/esm/lib/parsers/helpers/parse-3d-tile-subtree.js.map +1 -0
  142. package/dist/esm/lib/parsers/helpers/parse-3d-tile-tables.js +80 -0
  143. package/dist/esm/lib/parsers/helpers/parse-3d-tile-tables.js.map +1 -0
  144. package/dist/esm/lib/parsers/helpers/parse-utils.js +20 -0
  145. package/dist/esm/lib/parsers/helpers/parse-utils.js.map +1 -0
  146. package/dist/esm/lib/parsers/parse-3d-tile-batched-model.js +25 -0
  147. package/dist/esm/lib/parsers/parse-3d-tile-batched-model.js.map +1 -0
  148. package/dist/esm/lib/parsers/parse-3d-tile-composite.js +15 -0
  149. package/dist/esm/lib/parsers/parse-3d-tile-composite.js.map +1 -0
  150. package/dist/esm/lib/parsers/parse-3d-tile-gltf.js +10 -0
  151. package/dist/esm/lib/parsers/parse-3d-tile-gltf.js.map +1 -0
  152. package/dist/esm/lib/parsers/parse-3d-tile-header.js +164 -0
  153. package/dist/esm/lib/parsers/parse-3d-tile-header.js.map +1 -0
  154. package/dist/esm/lib/parsers/parse-3d-tile-instanced-model.js +147 -0
  155. package/dist/esm/lib/parsers/parse-3d-tile-instanced-model.js.map +1 -0
  156. package/dist/esm/lib/parsers/parse-3d-tile-point-cloud.js +211 -0
  157. package/dist/esm/lib/parsers/parse-3d-tile-point-cloud.js.map +1 -0
  158. package/dist/esm/lib/parsers/parse-3d-tile.js +30 -0
  159. package/dist/esm/lib/parsers/parse-3d-tile.js.map +1 -0
  160. package/dist/esm/lib/utils/obb/s2-corners-to-obb.js +23 -0
  161. package/dist/esm/lib/utils/obb/s2-corners-to-obb.js.map +1 -0
  162. package/dist/esm/lib/utils/s2/converters/s2-to-boundary.js +40 -0
  163. package/dist/esm/lib/utils/s2/converters/s2-to-boundary.js.map +1 -0
  164. package/dist/esm/lib/utils/s2/converters/s2-to-obb-points.js +24 -0
  165. package/dist/esm/lib/utils/s2/converters/s2-to-obb-points.js.map +1 -0
  166. package/dist/esm/lib/utils/s2/converters/s2-to-region.js +42 -0
  167. package/dist/esm/lib/utils/s2/converters/s2-to-region.js.map +1 -0
  168. package/dist/esm/lib/utils/s2/index.js +7 -0
  169. package/dist/esm/lib/utils/s2/index.js.map +1 -0
  170. package/dist/esm/lib/utils/s2/s2-geometry-functions.js +12 -0
  171. package/dist/esm/lib/utils/s2/s2-geometry-functions.js.map +1 -0
  172. package/dist/esm/lib/utils/s2/s2-token-functions.js +32 -0
  173. package/dist/esm/lib/utils/s2/s2-token-functions.js.map +1 -0
  174. package/dist/esm/lib/utils/s2/s2geometry/s2-cell-utils.js +15 -0
  175. package/dist/esm/lib/utils/s2/s2geometry/s2-cell-utils.js.map +1 -0
  176. package/dist/esm/lib/utils/s2/s2geometry/s2-geometry.js +186 -0
  177. package/dist/esm/lib/utils/s2/s2geometry/s2-geometry.js.map +1 -0
  178. package/dist/esm/lib/utils/version.js +2 -0
  179. package/dist/esm/lib/utils/version.js.map +1 -0
  180. package/dist/esm/tile-3d-subtree-loader.js +14 -0
  181. package/dist/esm/tile-3d-subtree-loader.js.map +1 -0
  182. package/dist/esm/tile-3d-writer.js +19 -0
  183. package/dist/esm/tile-3d-writer.js.map +1 -0
  184. package/dist/esm/tiles-3d-loader.js +64 -0
  185. package/dist/esm/tiles-3d-loader.js.map +1 -0
  186. package/dist/esm/types.js +2 -0
  187. package/dist/esm/types.js.map +1 -0
  188. package/dist/index.d.ts +10 -0
  189. package/dist/index.d.ts.map +1 -0
  190. package/dist/index.js +26 -8
  191. package/dist/lib/classes/helpers/tile-3d-accessor-utils.d.ts +8 -0
  192. package/dist/lib/classes/helpers/tile-3d-accessor-utils.d.ts.map +1 -0
  193. package/dist/lib/classes/helpers/tile-3d-accessor-utils.js +106 -89
  194. package/dist/lib/classes/tile-3d-batch-table-hierarchy.d.ts +10 -0
  195. package/dist/lib/classes/tile-3d-batch-table-hierarchy.d.ts.map +1 -0
  196. package/dist/lib/classes/tile-3d-batch-table-hierarchy.js +184 -202
  197. package/dist/lib/classes/tile-3d-batch-table.d.ts +34 -0
  198. package/dist/lib/classes/tile-3d-batch-table.d.ts.map +1 -0
  199. package/dist/lib/classes/tile-3d-batch-table.js +223 -267
  200. package/dist/lib/classes/tile-3d-feature-table.d.ts +15 -0
  201. package/dist/lib/classes/tile-3d-feature-table.d.ts.map +1 -0
  202. package/dist/lib/classes/tile-3d-feature-table.js +64 -79
  203. package/dist/lib/constants.d.ts +22 -0
  204. package/dist/lib/constants.d.ts.map +1 -0
  205. package/dist/lib/constants.js +23 -18
  206. package/dist/lib/encoders/encode-3d-tile-batched-model.d.ts +2 -0
  207. package/dist/lib/encoders/encode-3d-tile-batched-model.d.ts.map +1 -0
  208. package/dist/lib/encoders/encode-3d-tile-batched-model.js +45 -45
  209. package/dist/lib/encoders/encode-3d-tile-composite.d.ts +2 -0
  210. package/dist/lib/encoders/encode-3d-tile-composite.d.ts.map +1 -0
  211. package/dist/lib/encoders/encode-3d-tile-composite.js +23 -24
  212. package/dist/lib/encoders/encode-3d-tile-instanced-model.d.ts +2 -0
  213. package/dist/lib/encoders/encode-3d-tile-instanced-model.d.ts.map +1 -0
  214. package/dist/lib/encoders/encode-3d-tile-instanced-model.js +37 -37
  215. package/dist/lib/encoders/encode-3d-tile-point-cloud.d.ts +2 -0
  216. package/dist/lib/encoders/encode-3d-tile-point-cloud.d.ts.map +1 -0
  217. package/dist/lib/encoders/encode-3d-tile-point-cloud.js +36 -38
  218. package/dist/lib/encoders/encode-3d-tile.d.ts +2 -0
  219. package/dist/lib/encoders/encode-3d-tile.d.ts.map +1 -0
  220. package/dist/lib/encoders/encode-3d-tile.js +30 -32
  221. package/dist/lib/encoders/helpers/encode-3d-tile-header.d.ts +3 -0
  222. package/dist/lib/encoders/helpers/encode-3d-tile-header.d.ts.map +1 -0
  223. package/dist/lib/encoders/helpers/encode-3d-tile-header.js +28 -29
  224. package/dist/lib/ion/ion.d.ts +4 -0
  225. package/dist/lib/ion/ion.d.ts.map +1 -0
  226. package/dist/lib/ion/ion.js +60 -69
  227. package/dist/lib/parsers/helpers/normalize-3d-tile-colors.d.ts +7 -0
  228. package/dist/lib/parsers/helpers/normalize-3d-tile-colors.d.ts.map +1 -0
  229. package/dist/lib/parsers/helpers/normalize-3d-tile-colors.js +60 -62
  230. package/dist/lib/parsers/helpers/normalize-3d-tile-normals.d.ts +6 -0
  231. package/dist/lib/parsers/helpers/normalize-3d-tile-normals.d.ts.map +1 -0
  232. package/dist/lib/parsers/helpers/normalize-3d-tile-normals.js +26 -26
  233. package/dist/lib/parsers/helpers/normalize-3d-tile-positions.d.ts +2 -0
  234. package/dist/lib/parsers/helpers/normalize-3d-tile-positions.d.ts.map +1 -0
  235. package/dist/lib/parsers/helpers/normalize-3d-tile-positions.js +39 -28
  236. package/dist/lib/parsers/helpers/parse-3d-implicit-tiles.d.ts +57 -0
  237. package/dist/lib/parsers/helpers/parse-3d-implicit-tiles.d.ts.map +1 -0
  238. package/dist/lib/parsers/helpers/parse-3d-implicit-tiles.js +266 -0
  239. package/dist/lib/parsers/helpers/parse-3d-tile-gltf-view.d.ts +7 -0
  240. package/dist/lib/parsers/helpers/parse-3d-tile-gltf-view.d.ts.map +1 -0
  241. package/dist/lib/parsers/helpers/parse-3d-tile-gltf-view.js +82 -63
  242. package/dist/lib/parsers/helpers/parse-3d-tile-header.d.ts +2 -0
  243. package/dist/lib/parsers/helpers/parse-3d-tile-header.d.ts.map +1 -0
  244. package/dist/lib/parsers/helpers/parse-3d-tile-header.js +26 -15
  245. package/dist/lib/parsers/helpers/parse-3d-tile-subtree.d.ts +10 -0
  246. package/dist/lib/parsers/helpers/parse-3d-tile-subtree.d.ts.map +1 -0
  247. package/dist/lib/parsers/helpers/parse-3d-tile-subtree.js +104 -0
  248. package/dist/lib/parsers/helpers/parse-3d-tile-tables.d.ts +3 -0
  249. package/dist/lib/parsers/helpers/parse-3d-tile-tables.d.ts.map +1 -0
  250. package/dist/lib/parsers/helpers/parse-3d-tile-tables.js +85 -81
  251. package/dist/lib/parsers/helpers/parse-utils.d.ts +4 -0
  252. package/dist/lib/parsers/helpers/parse-utils.d.ts.map +1 -0
  253. package/dist/lib/parsers/helpers/parse-utils.js +29 -16
  254. package/dist/lib/parsers/parse-3d-tile-batched-model.d.ts +2 -0
  255. package/dist/lib/parsers/parse-3d-tile-batched-model.d.ts.map +1 -0
  256. package/dist/lib/parsers/parse-3d-tile-batched-model.js +30 -26
  257. package/dist/lib/parsers/parse-3d-tile-composite.d.ts +2 -0
  258. package/dist/lib/parsers/parse-3d-tile-composite.d.ts.map +1 -0
  259. package/dist/lib/parsers/parse-3d-tile-composite.js +25 -16
  260. package/dist/lib/parsers/parse-3d-tile-gltf.d.ts +2 -0
  261. package/dist/lib/parsers/parse-3d-tile-gltf.d.ts.map +1 -0
  262. package/dist/lib/parsers/parse-3d-tile-gltf.js +18 -0
  263. package/dist/lib/parsers/parse-3d-tile-header.d.ts +20 -0
  264. package/dist/lib/parsers/parse-3d-tile-header.d.ts.map +1 -0
  265. package/dist/lib/parsers/parse-3d-tile-header.js +170 -70
  266. package/dist/lib/parsers/parse-3d-tile-instanced-model.d.ts +2 -0
  267. package/dist/lib/parsers/parse-3d-tile-instanced-model.d.ts.map +1 -0
  268. package/dist/lib/parsers/parse-3d-tile-instanced-model.js +179 -170
  269. package/dist/lib/parsers/parse-3d-tile-point-cloud.d.ts +3 -0
  270. package/dist/lib/parsers/parse-3d-tile-point-cloud.d.ts.map +1 -0
  271. package/dist/lib/parsers/parse-3d-tile-point-cloud.js +350 -184
  272. package/dist/lib/parsers/parse-3d-tile.d.ts +2 -0
  273. package/dist/lib/parsers/parse-3d-tile.d.ts.map +1 -0
  274. package/dist/lib/parsers/parse-3d-tile.js +36 -27
  275. package/dist/lib/utils/obb/s2-corners-to-obb.d.ts +15 -0
  276. package/dist/lib/utils/obb/s2-corners-to-obb.d.ts.map +1 -0
  277. package/dist/lib/utils/obb/s2-corners-to-obb.js +37 -0
  278. package/dist/lib/utils/s2/converters/s2-to-boundary.d.ts +9 -0
  279. package/dist/lib/utils/s2/converters/s2-to-boundary.d.ts.map +1 -0
  280. package/dist/lib/utils/s2/converters/s2-to-boundary.js +61 -0
  281. package/dist/lib/utils/s2/converters/s2-to-obb-points.d.ts +15 -0
  282. package/dist/lib/utils/s2/converters/s2-to-obb-points.d.ts.map +1 -0
  283. package/dist/lib/utils/s2/converters/s2-to-obb-points.js +36 -0
  284. package/dist/lib/utils/s2/converters/s2-to-region.d.ts +13 -0
  285. package/dist/lib/utils/s2/converters/s2-to-region.d.ts.map +1 -0
  286. package/dist/lib/utils/s2/converters/s2-to-region.js +59 -0
  287. package/dist/lib/utils/s2/index.d.ts +8 -0
  288. package/dist/lib/utils/s2/index.d.ts.map +1 -0
  289. package/dist/lib/utils/s2/index.js +23 -0
  290. package/dist/lib/utils/s2/s2-geometry-functions.d.ts +14 -0
  291. package/dist/lib/utils/s2/s2-geometry-functions.d.ts.map +1 -0
  292. package/dist/lib/utils/s2/s2-geometry-functions.js +29 -0
  293. package/dist/lib/utils/s2/s2-token-functions.d.ts +23 -0
  294. package/dist/lib/utils/s2/s2-token-functions.d.ts.map +1 -0
  295. package/dist/lib/utils/s2/s2-token-functions.js +68 -0
  296. package/dist/lib/utils/s2/s2geometry/s2-cell-utils.d.ts +14 -0
  297. package/dist/lib/utils/s2/s2geometry/s2-cell-utils.d.ts.map +1 -0
  298. package/dist/lib/utils/s2/s2geometry/s2-cell-utils.js +32 -0
  299. package/dist/lib/utils/s2/s2geometry/s2-geometry.d.ts +52 -0
  300. package/dist/lib/utils/s2/s2geometry/s2-geometry.d.ts.map +1 -0
  301. package/dist/lib/utils/s2/s2geometry/s2-geometry.js +260 -0
  302. package/dist/lib/utils/version.d.ts +2 -0
  303. package/dist/lib/utils/version.d.ts.map +1 -0
  304. package/dist/lib/utils/version.js +7 -2
  305. package/dist/tile-3d-subtree-loader.d.ts +7 -0
  306. package/dist/tile-3d-subtree-loader.d.ts.map +1 -0
  307. package/dist/tile-3d-subtree-loader.js +23 -0
  308. package/dist/tile-3d-writer.d.ts +6 -0
  309. package/dist/tile-3d-writer.d.ts.map +1 -0
  310. package/dist/tile-3d-writer.js +24 -17
  311. package/dist/tiles-3d-loader.d.ts +6 -0
  312. package/dist/tiles-3d-loader.d.ts.map +1 -0
  313. package/dist/tiles-3d-loader.js +63 -62
  314. package/dist/types.d.ts +93 -0
  315. package/dist/types.d.ts.map +1 -0
  316. package/dist/types.js +2 -2
  317. package/package.json +14 -13
  318. package/src/cesium-ion-loader.ts +1 -0
  319. package/src/index.ts +2 -1
  320. package/src/lib/classes/{tile-3d-batch-table.js → tile-3d-batch-table.ts} +14 -4
  321. package/src/lib/classes/{tile-3d-feature-table.js → tile-3d-feature-table.ts} +5 -2
  322. package/src/lib/{constants.js → constants.ts} +2 -1
  323. package/src/lib/parsers/helpers/{normalize-3d-tile-colors.js → normalize-3d-tile-colors.ts} +1 -1
  324. package/src/lib/parsers/helpers/parse-3d-implicit-tiles.ts +396 -0
  325. package/src/lib/parsers/helpers/{parse-3d-tile-gltf-view.js → parse-3d-tile-gltf-view.ts} +1 -1
  326. package/src/lib/parsers/helpers/parse-3d-tile-subtree.ts +148 -0
  327. package/src/lib/parsers/helpers/{parse-3d-tile-tables.js → parse-3d-tile-tables.ts} +1 -1
  328. package/src/lib/parsers/parse-3d-tile-gltf.ts +16 -0
  329. package/src/lib/parsers/parse-3d-tile-header.ts +220 -0
  330. package/src/lib/parsers/{parse-3d-tile-instanced-model.js → parse-3d-tile-instanced-model.ts} +6 -0
  331. package/src/lib/parsers/{parse-3d-tile-point-cloud.js → parse-3d-tile-point-cloud.ts} +2 -2
  332. package/src/lib/parsers/{parse-3d-tile.js → parse-3d-tile.ts} +8 -0
  333. package/src/lib/utils/obb/s2-corners-to-obb.ts +51 -0
  334. package/src/lib/utils/s2/converters/s2-to-boundary.ts +67 -0
  335. package/src/lib/utils/s2/converters/s2-to-obb-points.ts +46 -0
  336. package/src/lib/utils/s2/converters/s2-to-region.ts +69 -0
  337. package/src/lib/utils/s2/index.ts +17 -0
  338. package/src/lib/utils/s2/s2-geometry-functions.ts +28 -0
  339. package/src/lib/utils/s2/s2-token-functions.ts +67 -0
  340. package/src/lib/utils/s2/s2geometry/s2-cell-utils.ts +33 -0
  341. package/src/lib/utils/s2/s2geometry/s2-geometry.ts +296 -0
  342. package/src/tile-3d-subtree-loader.ts +19 -0
  343. package/src/tiles-3d-loader.ts +2 -1
  344. package/src/types.ts +60 -6
  345. package/dist/bundle.js.map +0 -1
  346. package/dist/cesium-ion-loader.js.map +0 -1
  347. package/dist/index.js.map +0 -1
  348. package/dist/lib/classes/helpers/tile-3d-accessor-utils.js.map +0 -1
  349. package/dist/lib/classes/tile-3d-batch-table-hierarchy.js.map +0 -1
  350. package/dist/lib/classes/tile-3d-batch-table.js.map +0 -1
  351. package/dist/lib/classes/tile-3d-feature-table.js.map +0 -1
  352. package/dist/lib/constants.js.map +0 -1
  353. package/dist/lib/encoders/encode-3d-tile-batched-model.js.map +0 -1
  354. package/dist/lib/encoders/encode-3d-tile-composite.js.map +0 -1
  355. package/dist/lib/encoders/encode-3d-tile-instanced-model.js.map +0 -1
  356. package/dist/lib/encoders/encode-3d-tile-point-cloud.js.map +0 -1
  357. package/dist/lib/encoders/encode-3d-tile.js.map +0 -1
  358. package/dist/lib/encoders/helpers/encode-3d-tile-header.js.map +0 -1
  359. package/dist/lib/ion/ion.js.map +0 -1
  360. package/dist/lib/parsers/helpers/normalize-3d-tile-colors.js.map +0 -1
  361. package/dist/lib/parsers/helpers/normalize-3d-tile-normals.js.map +0 -1
  362. package/dist/lib/parsers/helpers/normalize-3d-tile-positions.js.map +0 -1
  363. package/dist/lib/parsers/helpers/parse-3d-tile-gltf-view.js.map +0 -1
  364. package/dist/lib/parsers/helpers/parse-3d-tile-header.js.map +0 -1
  365. package/dist/lib/parsers/helpers/parse-3d-tile-tables.js.map +0 -1
  366. package/dist/lib/parsers/helpers/parse-utils.js.map +0 -1
  367. package/dist/lib/parsers/parse-3d-tile-batched-model.js.map +0 -1
  368. package/dist/lib/parsers/parse-3d-tile-composite.js.map +0 -1
  369. package/dist/lib/parsers/parse-3d-tile-header.js.map +0 -1
  370. package/dist/lib/parsers/parse-3d-tile-instanced-model.js.map +0 -1
  371. package/dist/lib/parsers/parse-3d-tile-point-cloud.js.map +0 -1
  372. package/dist/lib/parsers/parse-3d-tile.js.map +0 -1
  373. package/dist/lib/utils/version.js.map +0 -1
  374. package/dist/tile-3d-writer.js.map +0 -1
  375. package/dist/tiles-3d-loader.js.map +0 -1
  376. package/dist/types.js.map +0 -1
  377. package/src/lib/parsers/parse-3d-tile-header.js +0 -69
  378. /package/src/lib/classes/helpers/{tile-3d-accessor-utils.js → tile-3d-accessor-utils.ts} +0 -0
  379. /package/src/lib/classes/{tile-3d-batch-table-hierarchy.js → tile-3d-batch-table-hierarchy.ts} +0 -0
  380. /package/src/lib/encoders/{encode-3d-tile-batched-model.js → encode-3d-tile-batched-model.ts} +0 -0
  381. /package/src/lib/encoders/{encode-3d-tile-composite.js → encode-3d-tile-composite.ts} +0 -0
  382. /package/src/lib/encoders/{encode-3d-tile-instanced-model.js → encode-3d-tile-instanced-model.ts} +0 -0
  383. /package/src/lib/encoders/{encode-3d-tile-point-cloud.js → encode-3d-tile-point-cloud.ts} +0 -0
  384. /package/src/lib/encoders/{encode-3d-tile.js → encode-3d-tile.ts} +0 -0
  385. /package/src/lib/encoders/helpers/{encode-3d-tile-header.js → encode-3d-tile-header.ts} +0 -0
  386. /package/src/lib/ion/{ion.js → ion.ts} +0 -0
  387. /package/src/lib/parsers/helpers/{normalize-3d-tile-normals.js → normalize-3d-tile-normals.ts} +0 -0
  388. /package/src/lib/parsers/helpers/{normalize-3d-tile-positions.js → normalize-3d-tile-positions.ts} +0 -0
  389. /package/src/lib/parsers/helpers/{parse-3d-tile-header.js → parse-3d-tile-header.ts} +0 -0
  390. /package/src/lib/parsers/helpers/{parse-utils.js → parse-utils.ts} +0 -0
  391. /package/src/lib/parsers/{parse-3d-tile-batched-model.js → parse-3d-tile-batched-model.ts} +0 -0
  392. /package/src/lib/parsers/{parse-3d-tile-composite.js → parse-3d-tile-composite.ts} +0 -0
  393. /package/src/lib/utils/{version.js → version.ts} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loaders.gl/3d-tiles",
3
- "version": "4.0.0-alpha.4",
3
+ "version": "4.0.0-alpha.6",
4
4
  "description": "3D Tiles, an open standard for streaming massive heterogeneous 3D geospatial datasets.",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -20,9 +20,9 @@
20
20
  "point cloud",
21
21
  "pointcloud"
22
22
  ],
23
- "types": "src/index.ts",
24
- "main": "dist/index.js",
25
- "module": "dist/index.js",
23
+ "types": "dist/index.d.ts",
24
+ "main": "dist/es5/index.js",
25
+ "module": "dist/esm/index.js",
26
26
  "sideEffects": false,
27
27
  "files": [
28
28
  "src",
@@ -31,19 +31,20 @@
31
31
  ],
32
32
  "scripts": {
33
33
  "pre-build": "npm run build-bundle",
34
- "build-bundle": "esbuild src/bundle.ts --bundle --outfile=dist/bundle.js"
34
+ "build-bundle": "esbuild src/bundle.ts --bundle --outfile=dist/dist.min.js"
35
35
  },
36
36
  "dependencies": {
37
- "@loaders.gl/draco": "4.0.0-alpha.4",
38
- "@loaders.gl/gltf": "4.0.0-alpha.4",
39
- "@loaders.gl/loader-utils": "4.0.0-alpha.4",
40
- "@loaders.gl/math": "4.0.0-alpha.4",
41
- "@loaders.gl/tiles": "4.0.0-alpha.4",
37
+ "@loaders.gl/draco": "4.0.0-alpha.6",
38
+ "@loaders.gl/gltf": "4.0.0-alpha.6",
39
+ "@loaders.gl/loader-utils": "4.0.0-alpha.6",
40
+ "@loaders.gl/math": "4.0.0-alpha.6",
41
+ "@loaders.gl/tiles": "4.0.0-alpha.6",
42
42
  "@math.gl/core": "^3.5.1",
43
- "@math.gl/geospatial": "^3.5.1"
43
+ "@math.gl/geospatial": "^3.5.1",
44
+ "long": "^5.2.1"
44
45
  },
45
46
  "peerDependencies": {
46
- "@loaders.gl/core": "^3.0.0"
47
+ "@loaders.gl/core": "4.0.0-alpha.5"
47
48
  },
48
- "gitHead": "53026061b3c8871f7e96d3a5826125cc6613bddc"
49
+ "gitHead": "acc1985050dfaa0f1f0c066f8da5bce7454a046c"
49
50
  }
@@ -33,6 +33,7 @@ export const CesiumIonLoader: LoaderWithParser = {
33
33
  },
34
34
  options: {
35
35
  'cesium-ion': {
36
+ // @ts-expect-error
36
37
  ...Tiles3DLoader.options['3d-tiles'],
37
38
  accessToken: null
38
39
  }
package/src/index.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  // LOADERS
2
2
  export {Tiles3DLoader} from './tiles-3d-loader';
3
3
  export {CesiumIonLoader} from './cesium-ion-loader';
4
+ export {Tile3DSubtreeLoader} from './tile-3d-subtree-loader';
4
5
 
5
6
  // WRITERS
6
7
  export {Tile3DWriter} from './tile-3d-writer';
@@ -12,4 +13,4 @@ export {default as Tile3DBatchTable} from './lib/classes/tile-3d-batch-table';
12
13
  // EXPERIMENTAL
13
14
  export {TILE3D_TYPE} from './lib/constants';
14
15
  export {getIonTilesetMetadata as _getIonTilesetMetadata} from './lib/ion/ion';
15
- export type {BatchTableJson, B3DMContent, Node3D} from './types';
16
+ export type {FeatureTableJson, B3DMContent, Node3D, ImplicitTilingExtension} from './types';
@@ -21,6 +21,16 @@ const IGNORED_PROPERTY_FIELDS = {
21
21
 
22
22
  // The size of this array equals the maximum instance count among all loaded tiles, which has the potential to be large.
23
23
  export default class Tile3DBatchTableParser {
24
+ json;
25
+ binary;
26
+ featureCount;
27
+ _extensions;
28
+ // Copy all top-level property fields from the json object, ignoring special fields
29
+ _properties;
30
+ _binaryProperties;
31
+ // TODO: hierarchy support is only partially implemented and not tested
32
+ _hierarchy;
33
+
24
34
  constructor(json, binary, featureCount, options = {}) {
25
35
  assert(featureCount >= 0);
26
36
  this.json = json || {};
@@ -49,11 +59,11 @@ export default class Tile3DBatchTableParser {
49
59
  return this.json && this.json.extensions && this.json.extensions[extensionName];
50
60
  }
51
61
 
52
- memorySizeInBytes() {
62
+ memorySizeInBytes(): number {
53
63
  return 0;
54
64
  }
55
65
 
56
- isClass(batchId, className) {
66
+ isClass(batchId, className: string): boolean {
57
67
  this._checkBatchId(batchId);
58
68
  assert(typeof className === 'string', className);
59
69
 
@@ -178,7 +188,7 @@ export default class Tile3DBatchTableParser {
178
188
  _checkBatchId(batchId) {
179
189
  const valid = batchId >= 0 && batchId < this.featureCount;
180
190
  if (!valid) {
181
- throw new Error(`batchId not in range [0, featureCount - 1].`);
191
+ throw new Error('batchId not in range [0, featureCount - 1].');
182
192
  }
183
193
  }
184
194
 
@@ -191,7 +201,7 @@ export default class Tile3DBatchTableParser {
191
201
  }
192
202
 
193
203
  _initializeBinaryProperties() {
194
- let binaryProperties = null;
204
+ let binaryProperties: Record<string, any> | null = null;
195
205
  for (const name in this._properties) {
196
206
  const property = this._properties[name];
197
207
  const binaryProperty = this._initializeBinaryProperty(name, property);
@@ -6,11 +6,14 @@ import {GL, GLType} from '@loaders.gl/math';
6
6
  // Reference:
7
7
  // https://github.com/AnalyticalGraphicsInc/cesium/blob/1de96d087f0b17575eb1a3f736407b348c765d59/Source/Scene/Cesium3DTileFeatureTable.js
8
8
  export default class Tile3DFeatureTable {
9
+ json;
10
+ buffer;
11
+ featuresLength = 0;
12
+ _cachedTypedArrays = {};
13
+
9
14
  constructor(featureTableJson, featureTableBinary) {
10
15
  this.json = featureTableJson;
11
16
  this.buffer = featureTableBinary;
12
- this.featuresLength = 0;
13
- this._cachedTypedArrays = {};
14
17
  }
15
18
 
16
19
  getExtension(extensionName) {
@@ -6,7 +6,8 @@ export const TILE3D_TYPE = {
6
6
  BATCHED_3D_MODEL: 'b3dm',
7
7
  INSTANCED_3D_MODEL: 'i3dm',
8
8
  GEOMETRY: 'geom',
9
- VECTOR: 'vect'
9
+ VECTOR: 'vect',
10
+ GLTF: 'glTF'
10
11
  };
11
12
 
12
13
  export const TILE3D_TYPES = Object.keys(TILE3D_TYPE);
@@ -1,7 +1,7 @@
1
1
  import {decodeRGB565, GL} from '@loaders.gl/math';
2
2
 
3
3
  /* eslint-disable complexity*/
4
- export function normalize3DTileColorAttribute(tile, colors, batchTable) {
4
+ export function normalize3DTileColorAttribute(tile, colors, batchTable?) {
5
5
  // no colors defined
6
6
  if (!colors && (!tile || !tile.batchIds || !batchTable)) {
7
7
  return null;
@@ -0,0 +1,396 @@
1
+ import type {Availability, BoundingVolume, Subtree} from '../../../types';
2
+ import {Tile3DSubtreeLoader} from '../../../tile-3d-subtree-loader';
3
+ import {load} from '@loaders.gl/core';
4
+
5
+ import {getS2CellIdFromToken, getS2ChildCellId, getS2TokenFromCellId} from '../../utils/s2/index';
6
+ import type {S2VolumeInfo} from '../../utils/obb/s2-corners-to-obb';
7
+ import {convertS2BoundingVolumetoOBB} from '../../utils/obb/s2-corners-to-obb';
8
+ import Long from 'long';
9
+
10
+ const QUADTREE_DEVISION_COUNT = 4;
11
+ const OCTREE_DEVISION_COUNT = 8;
12
+
13
+ const SUBDIVISION_COUNT_MAP = {
14
+ QUADTREE: QUADTREE_DEVISION_COUNT,
15
+ OCTREE: OCTREE_DEVISION_COUNT
16
+ };
17
+
18
+ /**
19
+ * S2VolumeBox is an extention of BoundingVolume of type "box"
20
+ */
21
+ export type S2VolumeBox = {
22
+ /** BoundingVolume of type "box" has the "box" field. S2VolumeBox contains it as well. */
23
+ box: number[];
24
+ /** s2VolumeInfo provides additional info about the box - specifically the token, min and max height */
25
+ s2VolumeInfo: S2VolumeInfo;
26
+ };
27
+
28
+ function getChildS2VolumeBox(
29
+ s2VolumeBox: S2VolumeBox | undefined,
30
+ index: number,
31
+ subdivisionScheme: string
32
+ ): S2VolumeBox | undefined {
33
+ if (s2VolumeBox?.box) {
34
+ // Check if the BoundingVolume is of type "box"
35
+ const cellId: Long = getS2CellIdFromToken(s2VolumeBox.s2VolumeInfo.token);
36
+ const childCellId = getS2ChildCellId(cellId, index);
37
+ const childToken = getS2TokenFromCellId(childCellId);
38
+
39
+ // Clone object. Note, s2VolumeInfo is a plain object that doesn't contain any nested object.
40
+ // So, we can use the Spread Operator to make a shallow copy of the object.
41
+ const s2ChildVolumeInfo: S2VolumeInfo = {...s2VolumeBox.s2VolumeInfo};
42
+ s2ChildVolumeInfo.token = childToken; // replace the token with the child's one
43
+
44
+ // In case of QUADTREE the sizeZ should NOT be changed!
45
+ // https://portal.ogc.org/files/102132
46
+ // A quadtree divides space only on the x and y dimensions.
47
+ // It divides each tile into 4 smaller tiles where the x and y dimensions are halved.
48
+ // The quadtree z minimum and maximum remain unchanged.
49
+ switch (subdivisionScheme) {
50
+ case 'OCTREE':
51
+ const s2VolumeInfo: S2VolumeInfo = s2VolumeBox.s2VolumeInfo;
52
+ const delta = s2VolumeInfo.maximumHeight - s2VolumeInfo.minimumHeight;
53
+ const sizeZ: number = delta / 2.0; // It's a next level (a child)
54
+ const midZ: number = s2VolumeInfo.minimumHeight + delta / 2.0;
55
+ s2VolumeInfo.minimumHeight = midZ - sizeZ;
56
+ s2VolumeInfo.maximumHeight = midZ + sizeZ;
57
+ break;
58
+ default:
59
+ break;
60
+ }
61
+ const box = convertS2BoundingVolumetoOBB(s2ChildVolumeInfo);
62
+ const childS2VolumeBox: S2VolumeBox = {
63
+ box,
64
+ s2VolumeInfo: s2ChildVolumeInfo
65
+ };
66
+ return childS2VolumeBox;
67
+ }
68
+ return undefined;
69
+ }
70
+
71
+ /**
72
+ * Recursively parse implicit tiles tree
73
+ * Spec - https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_implicit_tiling
74
+ * TODO Check out do we able to use Tile3D class as return type here.
75
+ * @param subtree
76
+ * @param lodMetricValue
77
+ * @param options
78
+ * @param parentData
79
+ * @param childIndex
80
+ * @param level
81
+ * @param globalData
82
+ */
83
+ // eslint-disable-next-line max-statements
84
+ export async function parseImplicitTiles(params: {
85
+ subtree: Subtree;
86
+ options: any;
87
+ parentData?: {mortonIndex: number; x: number; y: number; z: number};
88
+ childIndex?: number;
89
+ level?: number;
90
+ globalData?: {level: number; mortonIndex: number; x: number; y: number; z: number};
91
+ s2VolumeBox?: S2VolumeBox;
92
+ }) {
93
+ const {
94
+ options,
95
+ parentData = {
96
+ mortonIndex: 0,
97
+ x: 0,
98
+ y: 0,
99
+ z: 0
100
+ },
101
+ childIndex = 0,
102
+ globalData = {
103
+ level: 0,
104
+ mortonIndex: 0,
105
+ x: 0,
106
+ y: 0,
107
+ z: 0
108
+ },
109
+ s2VolumeBox
110
+ } = params;
111
+ let {subtree, level = 0} = params;
112
+ const {
113
+ subdivisionScheme,
114
+ subtreeLevels,
115
+ maximumLevel,
116
+ contentUrlTemplate,
117
+ subtreesUriTemplate,
118
+ basePath
119
+ } = options;
120
+
121
+ const tile = {children: [], lodMetricValue: 0, contentUrl: ''};
122
+
123
+ const childrenPerTile = SUBDIVISION_COUNT_MAP[subdivisionScheme];
124
+
125
+ const childX = childIndex & 0b01;
126
+ const childY = (childIndex >> 1) & 0b01;
127
+ const childZ = (childIndex >> 2) & 0b01;
128
+
129
+ const levelOffset = (childrenPerTile ** level - 1) / (childrenPerTile - 1);
130
+ let childTileMortonIndex = concatBits(parentData.mortonIndex, childIndex);
131
+ let tileAvailabilityIndex = levelOffset + childTileMortonIndex;
132
+
133
+ // Local tile coordinates
134
+ let childTileX = concatBits(parentData.x, childX);
135
+ let childTileY = concatBits(parentData.y, childY);
136
+ let childTileZ = concatBits(parentData.z, childZ);
137
+
138
+ let isChildSubtreeAvailable = false;
139
+
140
+ if (level + 1 > subtreeLevels) {
141
+ isChildSubtreeAvailable = getAvailabilityResult(
142
+ subtree.childSubtreeAvailability,
143
+ childTileMortonIndex
144
+ );
145
+ }
146
+
147
+ const x = concatBits(globalData.x, childTileX);
148
+ const y = concatBits(globalData.y, childTileY);
149
+ const z = concatBits(globalData.z, childTileZ);
150
+ const lev = level + globalData.level;
151
+
152
+ if (isChildSubtreeAvailable) {
153
+ const subtreePath = `${basePath}/${subtreesUriTemplate}`;
154
+ const childSubtreeUrl = replaceContentUrlTemplate(subtreePath, lev, x, y, z);
155
+ const childSubtree = await load(childSubtreeUrl, Tile3DSubtreeLoader);
156
+
157
+ subtree = childSubtree;
158
+
159
+ globalData.mortonIndex = childTileMortonIndex;
160
+ globalData.x = childTileX;
161
+ globalData.y = childTileY;
162
+ globalData.z = childTileZ;
163
+ globalData.level = level;
164
+
165
+ childTileMortonIndex = 0;
166
+ tileAvailabilityIndex = 0;
167
+ childTileX = 0;
168
+ childTileY = 0;
169
+ childTileZ = 0;
170
+ level = 0;
171
+ }
172
+
173
+ const isTileAvailable = getAvailabilityResult(subtree.tileAvailability, tileAvailabilityIndex);
174
+
175
+ if (!isTileAvailable || level > maximumLevel) {
176
+ return tile;
177
+ }
178
+
179
+ const isContentAvailable = getAvailabilityResult(
180
+ subtree.contentAvailability,
181
+ tileAvailabilityIndex
182
+ );
183
+
184
+ if (isContentAvailable) {
185
+ tile.contentUrl = replaceContentUrlTemplate(contentUrlTemplate, lev, x, y, z);
186
+ }
187
+
188
+ const childTileLevel = level + 1;
189
+ const pData = {mortonIndex: childTileMortonIndex, x: childTileX, y: childTileY, z: childTileZ};
190
+
191
+ for (let index = 0; index < childrenPerTile; index++) {
192
+ const childS2VolumeBox: S2VolumeBox | undefined = getChildS2VolumeBox(
193
+ s2VolumeBox,
194
+ index,
195
+ subdivisionScheme
196
+ );
197
+
198
+ // Recursive calling...
199
+ const childTileParsed = await parseImplicitTiles({
200
+ subtree,
201
+ options,
202
+ parentData: pData,
203
+ childIndex: index,
204
+ level: childTileLevel,
205
+ globalData,
206
+ s2VolumeBox: childS2VolumeBox
207
+ });
208
+
209
+ if (childTileParsed.contentUrl || childTileParsed.children.length) {
210
+ const globalLevel = lev + 1;
211
+ const childCoordinates = {childTileX, childTileY, childTileZ};
212
+ const formattedTile = formatTileData(
213
+ childTileParsed,
214
+ globalLevel,
215
+ childCoordinates,
216
+ options,
217
+ s2VolumeBox
218
+ );
219
+ // @ts-ignore
220
+ tile.children.push(formattedTile);
221
+ }
222
+ }
223
+
224
+ return tile;
225
+ }
226
+
227
+ function getAvailabilityResult(availabilityData: Availability, index: number): boolean {
228
+ if ('constant' in availabilityData) {
229
+ return Boolean(availabilityData.constant);
230
+ }
231
+
232
+ if (availabilityData.explicitBitstream) {
233
+ return getBooleanValueFromBitstream(index, availabilityData.explicitBitstream);
234
+ }
235
+
236
+ return false;
237
+ }
238
+
239
+ /**
240
+ * Do formatting of implicit tile data.
241
+ * TODO Check out do we able to use Tile3D class as type here.
242
+ * @param tile
243
+ * @param lodMetricValue
244
+ * @param options
245
+ * @returns
246
+ */
247
+ function formatTileData(
248
+ tile,
249
+ level: number,
250
+ childCoordinates: {childTileX: number; childTileY: number; childTileZ: number},
251
+ options: any,
252
+ s2VolumeBox?: S2VolumeBox
253
+ ) {
254
+ const {
255
+ basePath,
256
+ refine,
257
+ getRefine,
258
+ lodMetricType,
259
+ getTileType,
260
+ rootLodMetricValue,
261
+ rootBoundingVolume
262
+ } = options;
263
+ const uri = tile.contentUrl && tile.contentUrl.replace(`${basePath}/`, '');
264
+ const lodMetricValue = rootLodMetricValue / 2 ** level;
265
+
266
+ const boundingVolume: BoundingVolume = s2VolumeBox?.box
267
+ ? {box: s2VolumeBox.box}
268
+ : rootBoundingVolume;
269
+
270
+ const boundingVolumeForChildTile = calculateBoundingVolumeForChildTile(
271
+ level,
272
+ boundingVolume,
273
+ childCoordinates
274
+ );
275
+
276
+ return {
277
+ children: tile.children,
278
+ contentUrl: tile.contentUrl,
279
+ content: {uri},
280
+ id: tile.contentUrl,
281
+ refine: getRefine(refine),
282
+ type: getTileType(tile),
283
+ lodMetricType,
284
+ lodMetricValue,
285
+ geometricError: lodMetricValue,
286
+ transform: tile.transform,
287
+ boundingVolume: boundingVolumeForChildTile
288
+ };
289
+ }
290
+
291
+ /**
292
+ * Calculate child bounding volume.
293
+ * Spec - https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_implicit_tiling#subdivision-rules
294
+ * @param level
295
+ * @param rootBoundingVolume
296
+ * @param childCoordinates
297
+ */
298
+ function calculateBoundingVolumeForChildTile(
299
+ level: number,
300
+ rootBoundingVolume: BoundingVolume,
301
+ childCoordinates: {childTileX: number; childTileY: number; childTileZ: number}
302
+ ): BoundingVolume {
303
+ if (rootBoundingVolume.region) {
304
+ const {childTileX, childTileY, childTileZ} = childCoordinates;
305
+ const [west, south, east, north, minimumHeight, maximumHeight] = rootBoundingVolume.region;
306
+ const boundingVolumesCount = 2 ** level;
307
+
308
+ const sizeX = (east - west) / boundingVolumesCount;
309
+ const sizeY = (north - south) / boundingVolumesCount;
310
+
311
+ // TODO : Why is the subdivisionScheme not being checked here?
312
+
313
+ // In case of QUADTREE the sizeZ should NOT be changed!
314
+ // https://portal.ogc.org/files/102132
315
+ // A quadtree divides space only on the x and y dimensions. It divides each tile into 4 smaller tiles where the x and y dimensions are halved. The quadtree z minimum and maximum remain unchanged.
316
+
317
+ const sizeZ = (maximumHeight - minimumHeight) / boundingVolumesCount;
318
+
319
+ const [childWest, childEast] = [west + sizeX * childTileX, west + sizeX * (childTileX + 1)];
320
+ const [childSouth, childNorth] = [south + sizeY * childTileY, south + sizeY * (childTileY + 1)];
321
+ const [childMinimumHeight, childMaximumHeight] = [
322
+ minimumHeight + sizeZ * childTileZ,
323
+ minimumHeight + sizeZ * (childTileZ + 1)
324
+ ];
325
+
326
+ return {
327
+ region: [childWest, childSouth, childEast, childNorth, childMinimumHeight, childMaximumHeight]
328
+ };
329
+ }
330
+
331
+ if (rootBoundingVolume.box) {
332
+ return rootBoundingVolume;
333
+ }
334
+
335
+ throw new Error(`Unsupported bounding volume type ${rootBoundingVolume}`);
336
+ }
337
+
338
+ /**
339
+ * Do binary concatenation
340
+ * @param first
341
+ * @param second
342
+ */
343
+ function concatBits(first: number, second: number): number {
344
+ return parseInt(first.toString(2) + second.toString(2), 2);
345
+ }
346
+
347
+ /**
348
+ * Replace implicit tile content url with real coordinates.
349
+ * @param templateUrl
350
+ * @param level
351
+ * @param x
352
+ * @param y
353
+ * @param z
354
+ */
355
+ export function replaceContentUrlTemplate(
356
+ templateUrl: string,
357
+ level: number,
358
+ x: number,
359
+ y: number,
360
+ z: number
361
+ ): string {
362
+ const mapUrl = generateMapUrl({level, x, y, z});
363
+ return templateUrl.replace(/{level}|{x}|{y}|{z}/gi, (matched) => mapUrl[matched]);
364
+ }
365
+
366
+ /**
367
+ * Get Map object for content url generation
368
+ * @param items
369
+ */
370
+ function generateMapUrl(items: {[key: string]: number}): {[key: string]: string} {
371
+ const mapUrl = {};
372
+
373
+ for (const key in items) {
374
+ mapUrl[`{${key}}`] = items[key];
375
+ }
376
+ return mapUrl;
377
+ }
378
+
379
+ /**
380
+ * Get boolean value from bistream by index
381
+ * A boolean value is encoded as a single bit, either 0 (false) or 1 (true).
382
+ * Multiple boolean values are packed tightly in the same buffer.
383
+ * These buffers of tightly-packed bits are sometimes referred to as bitstreams.
384
+ * Spec - https://github.com/CesiumGS/3d-tiles/tree/implicit-revisions/specification/Metadata#booleans
385
+ * @param availabilitiIndex
386
+ */
387
+ function getBooleanValueFromBitstream(
388
+ availabilityIndex: number,
389
+ availabilityBuffer: Uint8Array
390
+ ): boolean {
391
+ const byteIndex = Math.floor(availabilityIndex / 8);
392
+ const bitIndex = availabilityIndex % 8;
393
+ const bitValue = (availabilityBuffer[byteIndex] >> bitIndex) & 1;
394
+
395
+ return bitValue === 1;
396
+ }
@@ -90,6 +90,6 @@ function extractGLTFBufferOrURL(tile, gltfFormat, options) {
90
90
  case GLTF_FORMAT.EMBEDDED:
91
91
  break;
92
92
  default:
93
- throw new Error(`b3dm: Illegal glTF format field`);
93
+ throw new Error('b3dm: Illegal glTF format field');
94
94
  }
95
95
  }