@loaders.gl/3d-tiles 4.0.0-alpha.5 → 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.
- package/dist/bundle.js +2 -2
- package/dist/cesium-ion-loader.d.ts.map +1 -1
- package/dist/cesium-ion-loader.js +37 -32
- package/dist/dist.min.js +3850 -1551
- package/dist/es5/bundle.js +6 -0
- package/dist/es5/bundle.js.map +1 -0
- package/dist/es5/cesium-ion-loader.js +77 -0
- package/dist/es5/cesium-ion-loader.js.map +1 -0
- package/dist/es5/index.js +63 -0
- package/dist/es5/index.js.map +1 -0
- package/dist/es5/lib/classes/helpers/tile-3d-accessor-utils.js +114 -0
- package/dist/es5/lib/classes/helpers/tile-3d-accessor-utils.js.map +1 -0
- package/dist/es5/lib/classes/tile-3d-batch-table-hierarchy.js +180 -0
- package/dist/es5/lib/classes/tile-3d-batch-table-hierarchy.js.map +1 -0
- package/dist/es5/lib/classes/tile-3d-batch-table.js +285 -0
- package/dist/es5/lib/classes/tile-3d-batch-table.js.map +1 -0
- package/dist/es5/lib/classes/tile-3d-feature-table.js +97 -0
- package/dist/es5/lib/classes/tile-3d-feature-table.js.map +1 -0
- package/dist/es5/lib/constants.js +32 -0
- package/dist/es5/lib/constants.js.map +1 -0
- package/dist/es5/lib/encoders/encode-3d-tile-batched-model.js +49 -0
- package/dist/es5/lib/encoders/encode-3d-tile-batched-model.js.map +1 -0
- package/dist/es5/lib/encoders/encode-3d-tile-composite.js +30 -0
- package/dist/es5/lib/encoders/encode-3d-tile-composite.js.map +1 -0
- package/dist/es5/lib/encoders/encode-3d-tile-instanced-model.js +47 -0
- package/dist/es5/lib/encoders/encode-3d-tile-instanced-model.js.map +1 -0
- package/dist/es5/lib/encoders/encode-3d-tile-point-cloud.js +48 -0
- package/dist/es5/lib/encoders/encode-3d-tile-point-cloud.js.map +1 -0
- package/dist/es5/lib/encoders/encode-3d-tile.js +35 -0
- package/dist/es5/lib/encoders/encode-3d-tile.js.map +1 -0
- package/dist/es5/lib/encoders/helpers/encode-3d-tile-header.js +35 -0
- package/dist/es5/lib/encoders/helpers/encode-3d-tile-header.js.map +1 -0
- package/dist/es5/lib/ion/ion.js +170 -0
- package/dist/es5/lib/ion/ion.js.map +1 -0
- package/dist/es5/lib/parsers/helpers/normalize-3d-tile-colors.js +64 -0
- package/dist/es5/lib/parsers/helpers/normalize-3d-tile-colors.js.map +1 -0
- package/dist/es5/lib/parsers/helpers/normalize-3d-tile-normals.js +32 -0
- package/dist/es5/lib/parsers/helpers/normalize-3d-tile-normals.js.map +1 -0
- package/dist/es5/lib/parsers/helpers/normalize-3d-tile-positions.js +32 -0
- package/dist/es5/lib/parsers/helpers/normalize-3d-tile-positions.js.map +1 -0
- package/dist/es5/lib/parsers/helpers/parse-3d-implicit-tiles.js +280 -0
- package/dist/es5/lib/parsers/helpers/parse-3d-implicit-tiles.js.map +1 -0
- package/dist/es5/lib/parsers/helpers/parse-3d-tile-gltf-view.js +96 -0
- package/dist/es5/lib/parsers/helpers/parse-3d-tile-gltf-view.js.map +1 -0
- package/dist/es5/lib/parsers/helpers/parse-3d-tile-header.js +22 -0
- package/dist/es5/lib/parsers/helpers/parse-3d-tile-header.js.map +1 -0
- package/dist/es5/lib/parsers/helpers/parse-3d-tile-subtree.js +145 -0
- package/dist/es5/lib/parsers/helpers/parse-3d-tile-subtree.js.map +1 -0
- package/dist/es5/lib/parsers/helpers/parse-3d-tile-tables.js +85 -0
- package/dist/es5/lib/parsers/helpers/parse-3d-tile-tables.js.map +1 -0
- package/dist/es5/lib/parsers/helpers/parse-utils.js +28 -0
- package/dist/es5/lib/parsers/helpers/parse-utils.js.map +1 -0
- package/dist/es5/lib/parsers/parse-3d-tile-batched-model.js +51 -0
- package/dist/es5/lib/parsers/parse-3d-tile-batched-model.js.map +1 -0
- package/dist/es5/lib/parsers/parse-3d-tile-composite.js +48 -0
- package/dist/es5/lib/parsers/parse-3d-tile-composite.js.map +1 -0
- package/dist/es5/lib/parsers/parse-3d-tile-gltf.js +35 -0
- package/dist/es5/lib/parsers/parse-3d-tile-gltf.js.map +1 -0
- package/dist/es5/lib/parsers/parse-3d-tile-header.js +271 -0
- package/dist/es5/lib/parsers/parse-3d-tile-header.js.map +1 -0
- package/dist/es5/lib/parsers/parse-3d-tile-instanced-model.js +172 -0
- package/dist/es5/lib/parsers/parse-3d-tile-instanced-model.js.map +1 -0
- package/dist/es5/lib/parsers/parse-3d-tile-point-cloud.js +271 -0
- package/dist/es5/lib/parsers/parse-3d-tile-point-cloud.js.map +1 -0
- package/dist/es5/lib/parsers/parse-3d-tile.js +74 -0
- package/dist/es5/lib/parsers/parse-3d-tile.js.map +1 -0
- package/dist/es5/lib/utils/obb/s2-corners-to-obb.js +30 -0
- package/dist/es5/lib/utils/obb/s2-corners-to-obb.js.map +1 -0
- package/dist/es5/lib/utils/s2/converters/s2-to-boundary.js +44 -0
- package/dist/es5/lib/utils/s2/converters/s2-to-boundary.js.map +1 -0
- package/dist/es5/lib/utils/s2/converters/s2-to-obb-points.js +30 -0
- package/dist/es5/lib/utils/s2/converters/s2-to-obb-points.js.map +1 -0
- package/dist/es5/lib/utils/s2/converters/s2-to-region.js +52 -0
- package/dist/es5/lib/utils/s2/converters/s2-to-region.js.map +1 -0
- package/dist/es5/lib/utils/s2/index.js +90 -0
- package/dist/es5/lib/utils/s2/index.js.map +1 -0
- package/dist/es5/lib/utils/s2/s2-geometry-functions.js +19 -0
- package/dist/es5/lib/utils/s2/s2-geometry-functions.js.map +1 -0
- package/dist/es5/lib/utils/s2/s2-token-functions.js +41 -0
- package/dist/es5/lib/utils/s2/s2-token-functions.js.map +1 -0
- package/dist/es5/lib/utils/s2/s2geometry/s2-cell-utils.js +22 -0
- package/dist/es5/lib/utils/s2/s2geometry/s2-cell-utils.js.map +1 -0
- package/dist/es5/lib/utils/s2/s2geometry/s2-geometry.js +207 -0
- package/dist/es5/lib/utils/s2/s2geometry/s2-geometry.js.map +1 -0
- package/dist/es5/lib/utils/version.js +9 -0
- package/dist/es5/lib/utils/version.js.map +1 -0
- package/dist/es5/tile-3d-subtree-loader.js +22 -0
- package/dist/es5/tile-3d-subtree-loader.js.map +1 -0
- package/dist/es5/tile-3d-writer.js +26 -0
- package/dist/es5/tile-3d-writer.js.map +1 -0
- package/dist/es5/tiles-3d-loader.js +134 -0
- package/dist/es5/tiles-3d-loader.js.map +1 -0
- package/dist/es5/types.js +2 -0
- package/dist/es5/types.js.map +1 -0
- package/dist/esm/bundle.js +4 -0
- package/dist/esm/bundle.js.map +1 -0
- package/dist/esm/cesium-ion-loader.js +36 -0
- package/dist/esm/cesium-ion-loader.js.map +1 -0
- package/dist/esm/index.js +9 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lib/classes/helpers/tile-3d-accessor-utils.js +96 -0
- package/dist/esm/lib/classes/helpers/tile-3d-accessor-utils.js.map +1 -0
- package/dist/esm/lib/classes/tile-3d-batch-table-hierarchy.js +171 -0
- package/dist/esm/lib/classes/tile-3d-batch-table-hierarchy.js.map +1 -0
- package/dist/esm/lib/classes/tile-3d-batch-table.js +231 -0
- package/dist/esm/lib/classes/tile-3d-batch-table.js.map +1 -0
- package/dist/esm/lib/classes/tile-3d-feature-table.js +70 -0
- package/dist/esm/lib/classes/tile-3d-feature-table.js.map +1 -0
- package/dist/esm/lib/constants.js +22 -0
- package/dist/esm/lib/constants.js.map +1 -0
- package/dist/esm/lib/encoders/encode-3d-tile-batched-model.js +40 -0
- package/dist/esm/lib/encoders/encode-3d-tile-batched-model.js.map +1 -0
- package/dist/esm/lib/encoders/encode-3d-tile-composite.js +21 -0
- package/dist/esm/lib/encoders/encode-3d-tile-composite.js.map +1 -0
- package/dist/esm/lib/encoders/encode-3d-tile-instanced-model.js +36 -0
- package/dist/esm/lib/encoders/encode-3d-tile-instanced-model.js.map +1 -0
- package/dist/esm/lib/encoders/encode-3d-tile-point-cloud.js +39 -0
- package/dist/esm/lib/encoders/encode-3d-tile-point-cloud.js.map +1 -0
- package/dist/esm/lib/encoders/encode-3d-tile.js +29 -0
- package/dist/esm/lib/encoders/encode-3d-tile.js.map +1 -0
- package/dist/esm/lib/encoders/helpers/encode-3d-tile-header.js +28 -0
- package/dist/esm/lib/encoders/helpers/encode-3d-tile-header.js.map +1 -0
- package/dist/esm/lib/ion/ion.js +70 -0
- package/dist/esm/lib/ion/ion.js.map +1 -0
- package/dist/esm/lib/parsers/helpers/normalize-3d-tile-colors.js +58 -0
- package/dist/esm/lib/parsers/helpers/normalize-3d-tile-colors.js.map +1 -0
- package/dist/esm/lib/parsers/helpers/normalize-3d-tile-normals.js +26 -0
- package/dist/esm/lib/parsers/helpers/normalize-3d-tile-normals.js.map +1 -0
- package/dist/esm/lib/parsers/helpers/normalize-3d-tile-positions.js +26 -0
- package/dist/esm/lib/parsers/helpers/normalize-3d-tile-positions.js.map +1 -0
- package/dist/esm/lib/parsers/helpers/parse-3d-implicit-tiles.js +241 -0
- package/dist/esm/lib/parsers/helpers/parse-3d-implicit-tiles.js.map +1 -0
- package/dist/esm/lib/parsers/helpers/parse-3d-tile-gltf-view.js +59 -0
- package/dist/esm/lib/parsers/helpers/parse-3d-tile-gltf-view.js.map +1 -0
- package/dist/esm/lib/parsers/helpers/parse-3d-tile-header.js +16 -0
- package/dist/esm/lib/parsers/helpers/parse-3d-tile-header.js.map +1 -0
- package/dist/esm/lib/parsers/helpers/parse-3d-tile-subtree.js +67 -0
- package/dist/esm/lib/parsers/helpers/parse-3d-tile-subtree.js.map +1 -0
- package/dist/esm/lib/parsers/helpers/parse-3d-tile-tables.js +80 -0
- package/dist/esm/lib/parsers/helpers/parse-3d-tile-tables.js.map +1 -0
- package/dist/esm/lib/parsers/helpers/parse-utils.js +20 -0
- package/dist/esm/lib/parsers/helpers/parse-utils.js.map +1 -0
- package/dist/esm/lib/parsers/parse-3d-tile-batched-model.js +25 -0
- package/dist/esm/lib/parsers/parse-3d-tile-batched-model.js.map +1 -0
- package/dist/esm/lib/parsers/parse-3d-tile-composite.js +15 -0
- package/dist/esm/lib/parsers/parse-3d-tile-composite.js.map +1 -0
- package/dist/esm/lib/parsers/parse-3d-tile-gltf.js +10 -0
- package/dist/esm/lib/parsers/parse-3d-tile-gltf.js.map +1 -0
- package/dist/esm/lib/parsers/parse-3d-tile-header.js +164 -0
- package/dist/esm/lib/parsers/parse-3d-tile-header.js.map +1 -0
- package/dist/esm/lib/parsers/parse-3d-tile-instanced-model.js +147 -0
- package/dist/{lib → esm/lib}/parsers/parse-3d-tile-instanced-model.js.map +1 -1
- package/dist/esm/lib/parsers/parse-3d-tile-point-cloud.js +211 -0
- package/dist/esm/lib/parsers/parse-3d-tile-point-cloud.js.map +1 -0
- package/dist/esm/lib/parsers/parse-3d-tile.js +30 -0
- package/dist/esm/lib/parsers/parse-3d-tile.js.map +1 -0
- package/dist/esm/lib/utils/obb/s2-corners-to-obb.js +23 -0
- package/dist/esm/lib/utils/obb/s2-corners-to-obb.js.map +1 -0
- package/dist/esm/lib/utils/s2/converters/s2-to-boundary.js +40 -0
- package/dist/esm/lib/utils/s2/converters/s2-to-boundary.js.map +1 -0
- package/dist/esm/lib/utils/s2/converters/s2-to-obb-points.js +24 -0
- package/dist/esm/lib/utils/s2/converters/s2-to-obb-points.js.map +1 -0
- package/dist/esm/lib/utils/s2/converters/s2-to-region.js +42 -0
- package/dist/esm/lib/utils/s2/converters/s2-to-region.js.map +1 -0
- package/dist/esm/lib/utils/s2/index.js +7 -0
- package/dist/esm/lib/utils/s2/index.js.map +1 -0
- package/dist/esm/lib/utils/s2/s2-geometry-functions.js +12 -0
- package/dist/esm/lib/utils/s2/s2-geometry-functions.js.map +1 -0
- package/dist/esm/lib/utils/s2/s2-token-functions.js +32 -0
- package/dist/esm/lib/utils/s2/s2-token-functions.js.map +1 -0
- package/dist/esm/lib/utils/s2/s2geometry/s2-cell-utils.js +15 -0
- package/dist/esm/lib/utils/s2/s2geometry/s2-cell-utils.js.map +1 -0
- package/dist/esm/lib/utils/s2/s2geometry/s2-geometry.js +186 -0
- package/dist/esm/lib/utils/s2/s2geometry/s2-geometry.js.map +1 -0
- package/dist/esm/lib/utils/version.js +2 -0
- package/dist/esm/lib/utils/version.js.map +1 -0
- package/dist/esm/tile-3d-subtree-loader.js +14 -0
- package/dist/esm/tile-3d-subtree-loader.js.map +1 -0
- package/dist/esm/tile-3d-writer.js +19 -0
- package/dist/esm/tile-3d-writer.js.map +1 -0
- package/dist/esm/tiles-3d-loader.js +64 -0
- package/dist/esm/tiles-3d-loader.js.map +1 -0
- package/dist/esm/types.js +2 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +26 -9
- package/dist/lib/classes/helpers/tile-3d-accessor-utils.d.ts +1 -1
- package/dist/lib/classes/helpers/tile-3d-accessor-utils.js +106 -89
- package/dist/lib/classes/tile-3d-batch-table-hierarchy.js +184 -202
- package/dist/lib/classes/tile-3d-batch-table.d.ts +1 -1
- package/dist/lib/classes/tile-3d-batch-table.js +223 -282
- package/dist/lib/classes/tile-3d-feature-table.js +64 -86
- package/dist/lib/constants.js +23 -19
- package/dist/lib/encoders/encode-3d-tile-batched-model.js +45 -45
- package/dist/lib/encoders/encode-3d-tile-composite.js +23 -24
- package/dist/lib/encoders/encode-3d-tile-instanced-model.js +37 -37
- package/dist/lib/encoders/encode-3d-tile-point-cloud.js +36 -38
- package/dist/lib/encoders/encode-3d-tile.js +30 -32
- package/dist/lib/encoders/helpers/encode-3d-tile-header.js +28 -29
- package/dist/lib/ion/ion.js +60 -69
- package/dist/lib/parsers/helpers/normalize-3d-tile-colors.js +60 -62
- package/dist/lib/parsers/helpers/normalize-3d-tile-normals.js +26 -26
- package/dist/lib/parsers/helpers/normalize-3d-tile-positions.js +39 -28
- package/dist/lib/parsers/helpers/parse-3d-implicit-tiles.d.ts +11 -0
- package/dist/lib/parsers/helpers/parse-3d-implicit-tiles.d.ts.map +1 -1
- package/dist/lib/parsers/helpers/parse-3d-implicit-tiles.js +247 -203
- package/dist/lib/parsers/helpers/parse-3d-tile-gltf-view.js +82 -63
- package/dist/lib/parsers/helpers/parse-3d-tile-header.js +26 -15
- package/dist/lib/parsers/helpers/parse-3d-tile-subtree.d.ts +2 -1
- package/dist/lib/parsers/helpers/parse-3d-tile-subtree.d.ts.map +1 -1
- package/dist/lib/parsers/helpers/parse-3d-tile-subtree.js +98 -58
- package/dist/lib/parsers/helpers/parse-3d-tile-tables.js +84 -80
- package/dist/lib/parsers/helpers/parse-utils.js +29 -16
- package/dist/lib/parsers/parse-3d-tile-batched-model.js +30 -26
- package/dist/lib/parsers/parse-3d-tile-composite.js +25 -16
- package/dist/lib/parsers/parse-3d-tile-gltf.d.ts +1 -1
- package/dist/lib/parsers/parse-3d-tile-gltf.d.ts.map +1 -1
- package/dist/lib/parsers/parse-3d-tile-gltf.js +17 -9
- package/dist/lib/parsers/parse-3d-tile-header.d.ts +5 -4
- package/dist/lib/parsers/parse-3d-tile-header.d.ts.map +1 -1
- package/dist/lib/parsers/parse-3d-tile-header.js +166 -138
- package/dist/lib/parsers/parse-3d-tile-instanced-model.js +179 -170
- package/dist/lib/parsers/parse-3d-tile-point-cloud.js +350 -184
- package/dist/lib/parsers/parse-3d-tile.js +36 -31
- package/dist/lib/utils/obb/s2-corners-to-obb.d.ts +15 -0
- package/dist/lib/utils/obb/s2-corners-to-obb.d.ts.map +1 -0
- package/dist/lib/utils/obb/s2-corners-to-obb.js +37 -0
- package/dist/lib/utils/s2/converters/s2-to-boundary.d.ts +9 -0
- package/dist/lib/utils/s2/converters/s2-to-boundary.d.ts.map +1 -0
- package/dist/lib/utils/s2/converters/s2-to-boundary.js +61 -0
- package/dist/lib/utils/s2/converters/s2-to-obb-points.d.ts +15 -0
- package/dist/lib/utils/s2/converters/s2-to-obb-points.d.ts.map +1 -0
- package/dist/lib/utils/s2/converters/s2-to-obb-points.js +36 -0
- package/dist/lib/utils/s2/converters/s2-to-region.d.ts +13 -0
- package/dist/lib/utils/s2/converters/s2-to-region.d.ts.map +1 -0
- package/dist/lib/utils/s2/converters/s2-to-region.js +59 -0
- package/dist/lib/utils/s2/index.d.ts +8 -0
- package/dist/lib/utils/s2/index.d.ts.map +1 -0
- package/dist/lib/utils/s2/index.js +23 -0
- package/dist/lib/utils/s2/s2-geometry-functions.d.ts +14 -0
- package/dist/lib/utils/s2/s2-geometry-functions.d.ts.map +1 -0
- package/dist/lib/utils/s2/s2-geometry-functions.js +29 -0
- package/dist/lib/utils/s2/s2-token-functions.d.ts +23 -0
- package/dist/lib/utils/s2/s2-token-functions.d.ts.map +1 -0
- package/dist/lib/utils/s2/s2-token-functions.js +68 -0
- package/dist/lib/utils/s2/s2geometry/s2-cell-utils.d.ts +14 -0
- package/dist/lib/utils/s2/s2geometry/s2-cell-utils.d.ts.map +1 -0
- package/dist/lib/utils/s2/s2geometry/s2-cell-utils.js +32 -0
- package/dist/lib/utils/s2/s2geometry/s2-geometry.d.ts +52 -0
- package/dist/lib/utils/s2/s2geometry/s2-geometry.d.ts.map +1 -0
- package/dist/lib/utils/s2/s2geometry/s2-geometry.js +260 -0
- package/dist/lib/utils/version.js +7 -2
- package/dist/tile-3d-subtree-loader.js +22 -13
- package/dist/tile-3d-writer.js +24 -17
- package/dist/tiles-3d-loader.d.ts.map +1 -1
- package/dist/tiles-3d-loader.js +63 -69
- package/dist/types.d.ts +28 -15
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -2
- package/package.json +12 -11
- package/src/cesium-ion-loader.ts +1 -0
- package/src/index.ts +1 -1
- package/src/lib/parsers/helpers/parse-3d-implicit-tiles.ts +104 -27
- package/src/lib/parsers/helpers/parse-3d-tile-subtree.ts +50 -7
- package/src/lib/parsers/parse-3d-tile-header.ts +91 -23
- package/src/lib/utils/obb/s2-corners-to-obb.ts +51 -0
- package/src/lib/utils/s2/converters/s2-to-boundary.ts +67 -0
- package/src/lib/utils/s2/converters/s2-to-obb-points.ts +46 -0
- package/src/lib/utils/s2/converters/s2-to-region.ts +69 -0
- package/src/lib/utils/s2/index.ts +17 -0
- package/src/lib/utils/s2/s2-geometry-functions.ts +28 -0
- package/src/lib/utils/s2/s2-token-functions.ts +67 -0
- package/src/lib/utils/s2/s2geometry/s2-cell-utils.ts +33 -0
- package/src/lib/utils/s2/s2geometry/s2-geometry.ts +296 -0
- package/src/tiles-3d-loader.ts +2 -16
- package/src/types.ts +20 -5
- package/dist/bundle.js.map +0 -1
- package/dist/cesium-ion-loader.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/lib/classes/helpers/tile-3d-accessor-utils.js.map +0 -1
- package/dist/lib/classes/tile-3d-batch-table-hierarchy.js.map +0 -1
- package/dist/lib/classes/tile-3d-batch-table.js.map +0 -1
- package/dist/lib/classes/tile-3d-feature-table.js.map +0 -1
- package/dist/lib/constants.js.map +0 -1
- package/dist/lib/encoders/encode-3d-tile-batched-model.js.map +0 -1
- package/dist/lib/encoders/encode-3d-tile-composite.js.map +0 -1
- package/dist/lib/encoders/encode-3d-tile-instanced-model.js.map +0 -1
- package/dist/lib/encoders/encode-3d-tile-point-cloud.js.map +0 -1
- package/dist/lib/encoders/encode-3d-tile.js.map +0 -1
- package/dist/lib/encoders/helpers/encode-3d-tile-header.js.map +0 -1
- package/dist/lib/ion/ion.js.map +0 -1
- package/dist/lib/parsers/helpers/normalize-3d-tile-colors.js.map +0 -1
- package/dist/lib/parsers/helpers/normalize-3d-tile-normals.js.map +0 -1
- package/dist/lib/parsers/helpers/normalize-3d-tile-positions.js.map +0 -1
- package/dist/lib/parsers/helpers/parse-3d-implicit-tiles.js.map +0 -1
- package/dist/lib/parsers/helpers/parse-3d-tile-gltf-view.js.map +0 -1
- package/dist/lib/parsers/helpers/parse-3d-tile-header.js.map +0 -1
- package/dist/lib/parsers/helpers/parse-3d-tile-subtree.js.map +0 -1
- package/dist/lib/parsers/helpers/parse-3d-tile-tables.js.map +0 -1
- package/dist/lib/parsers/helpers/parse-utils.js.map +0 -1
- package/dist/lib/parsers/parse-3d-tile-batched-model.js.map +0 -1
- package/dist/lib/parsers/parse-3d-tile-composite.js.map +0 -1
- package/dist/lib/parsers/parse-3d-tile-gltf.js.map +0 -1
- package/dist/lib/parsers/parse-3d-tile-header.js.map +0 -1
- package/dist/lib/parsers/parse-3d-tile-point-cloud.js.map +0 -1
- package/dist/lib/parsers/parse-3d-tile.js.map +0 -1
- package/dist/lib/utils/version.js.map +0 -1
- package/dist/tile-3d-subtree-loader.js.map +0 -1
- package/dist/tile-3d-writer.js.map +0 -1
- package/dist/tiles-3d-loader.js.map +0 -1
- package/dist/types.js.map +0 -1
- /package/src/lib/parsers/{parse-3d-tile-gltf.js → parse-3d-tile-gltf.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.
|
|
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": {
|
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
"pointcloud"
|
|
22
22
|
],
|
|
23
23
|
"types": "dist/index.d.ts",
|
|
24
|
-
"main": "dist/index.js",
|
|
25
|
-
"module": "dist/index.js",
|
|
24
|
+
"main": "dist/es5/index.js",
|
|
25
|
+
"module": "dist/esm/index.js",
|
|
26
26
|
"sideEffects": false,
|
|
27
27
|
"files": [
|
|
28
28
|
"src",
|
|
@@ -34,16 +34,17 @@
|
|
|
34
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.
|
|
38
|
-
"@loaders.gl/gltf": "4.0.0-alpha.
|
|
39
|
-
"@loaders.gl/loader-utils": "4.0.0-alpha.
|
|
40
|
-
"@loaders.gl/math": "4.0.0-alpha.
|
|
41
|
-
"@loaders.gl/tiles": "4.0.0-alpha.
|
|
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": "4.0.0-alpha.
|
|
47
|
+
"@loaders.gl/core": "4.0.0-alpha.5"
|
|
47
48
|
},
|
|
48
|
-
"gitHead": "
|
|
49
|
+
"gitHead": "acc1985050dfaa0f1f0c066f8da5bce7454a046c"
|
|
49
50
|
}
|
package/src/cesium-ion-loader.ts
CHANGED
package/src/index.ts
CHANGED
|
@@ -13,4 +13,4 @@ export {default as Tile3DBatchTable} from './lib/classes/tile-3d-batch-table';
|
|
|
13
13
|
// EXPERIMENTAL
|
|
14
14
|
export {TILE3D_TYPE} from './lib/constants';
|
|
15
15
|
export {getIonTilesetMetadata as _getIonTilesetMetadata} from './lib/ion/ion';
|
|
16
|
-
export type {
|
|
16
|
+
export type {FeatureTableJson, B3DMContent, Node3D, ImplicitTilingExtension} from './types';
|
|
@@ -2,6 +2,11 @@ import type {Availability, BoundingVolume, Subtree} from '../../../types';
|
|
|
2
2
|
import {Tile3DSubtreeLoader} from '../../../tile-3d-subtree-loader';
|
|
3
3
|
import {load} from '@loaders.gl/core';
|
|
4
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
|
+
|
|
5
10
|
const QUADTREE_DEVISION_COUNT = 4;
|
|
6
11
|
const OCTREE_DEVISION_COUNT = 8;
|
|
7
12
|
|
|
@@ -10,6 +15,59 @@ const SUBDIVISION_COUNT_MAP = {
|
|
|
10
15
|
OCTREE: OCTREE_DEVISION_COUNT
|
|
11
16
|
};
|
|
12
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
|
+
|
|
13
71
|
/**
|
|
14
72
|
* Recursively parse implicit tiles tree
|
|
15
73
|
* Spec - https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_implicit_tiling
|
|
@@ -30,6 +88,7 @@ export async function parseImplicitTiles(params: {
|
|
|
30
88
|
childIndex?: number;
|
|
31
89
|
level?: number;
|
|
32
90
|
globalData?: {level: number; mortonIndex: number; x: number; y: number; z: number};
|
|
91
|
+
s2VolumeBox?: S2VolumeBox;
|
|
33
92
|
}) {
|
|
34
93
|
const {
|
|
35
94
|
options,
|
|
@@ -46,7 +105,8 @@ export async function parseImplicitTiles(params: {
|
|
|
46
105
|
x: 0,
|
|
47
106
|
y: 0,
|
|
48
107
|
z: 0
|
|
49
|
-
}
|
|
108
|
+
},
|
|
109
|
+
s2VolumeBox
|
|
50
110
|
} = params;
|
|
51
111
|
let {subtree, level = 0} = params;
|
|
52
112
|
const {
|
|
@@ -75,15 +135,6 @@ export async function parseImplicitTiles(params: {
|
|
|
75
135
|
let childTileY = concatBits(parentData.y, childY);
|
|
76
136
|
let childTileZ = concatBits(parentData.z, childZ);
|
|
77
137
|
|
|
78
|
-
// TODO Remove after real implicit tileset will be tested.
|
|
79
|
-
// Degug data
|
|
80
|
-
// tile.level = level + globalData.level;
|
|
81
|
-
// tile.x = concatBits(globalData.x, childTileX);
|
|
82
|
-
// tile.y = concatBits(globalData.y, childTileY);
|
|
83
|
-
// tile.z = concatBits(globalData.z, childTileZ);
|
|
84
|
-
// tile.mortonIndex = childTileMortonIndex;
|
|
85
|
-
// End of debug data
|
|
86
|
-
|
|
87
138
|
let isChildSubtreeAvailable = false;
|
|
88
139
|
|
|
89
140
|
if (level + 1 > subtreeLevels) {
|
|
@@ -138,19 +189,33 @@ export async function parseImplicitTiles(params: {
|
|
|
138
189
|
const pData = {mortonIndex: childTileMortonIndex, x: childTileX, y: childTileY, z: childTileZ};
|
|
139
190
|
|
|
140
191
|
for (let index = 0; index < childrenPerTile; index++) {
|
|
141
|
-
const
|
|
192
|
+
const childS2VolumeBox: S2VolumeBox | undefined = getChildS2VolumeBox(
|
|
193
|
+
s2VolumeBox,
|
|
194
|
+
index,
|
|
195
|
+
subdivisionScheme
|
|
196
|
+
);
|
|
197
|
+
|
|
198
|
+
// Recursive calling...
|
|
199
|
+
const childTileParsed = await parseImplicitTiles({
|
|
142
200
|
subtree,
|
|
143
201
|
options,
|
|
144
202
|
parentData: pData,
|
|
145
203
|
childIndex: index,
|
|
146
204
|
level: childTileLevel,
|
|
147
|
-
globalData
|
|
205
|
+
globalData,
|
|
206
|
+
s2VolumeBox: childS2VolumeBox
|
|
148
207
|
});
|
|
149
208
|
|
|
150
|
-
if (
|
|
209
|
+
if (childTileParsed.contentUrl || childTileParsed.children.length) {
|
|
151
210
|
const globalLevel = lev + 1;
|
|
152
211
|
const childCoordinates = {childTileX, childTileY, childTileZ};
|
|
153
|
-
const formattedTile = formatTileData(
|
|
212
|
+
const formattedTile = formatTileData(
|
|
213
|
+
childTileParsed,
|
|
214
|
+
globalLevel,
|
|
215
|
+
childCoordinates,
|
|
216
|
+
options,
|
|
217
|
+
s2VolumeBox
|
|
218
|
+
);
|
|
154
219
|
// @ts-ignore
|
|
155
220
|
tile.children.push(formattedTile);
|
|
156
221
|
}
|
|
@@ -183,7 +248,8 @@ function formatTileData(
|
|
|
183
248
|
tile,
|
|
184
249
|
level: number,
|
|
185
250
|
childCoordinates: {childTileX: number; childTileY: number; childTileZ: number},
|
|
186
|
-
options: any
|
|
251
|
+
options: any,
|
|
252
|
+
s2VolumeBox?: S2VolumeBox
|
|
187
253
|
) {
|
|
188
254
|
const {
|
|
189
255
|
basePath,
|
|
@@ -196,9 +262,14 @@ function formatTileData(
|
|
|
196
262
|
} = options;
|
|
197
263
|
const uri = tile.contentUrl && tile.contentUrl.replace(`${basePath}/`, '');
|
|
198
264
|
const lodMetricValue = rootLodMetricValue / 2 ** level;
|
|
199
|
-
|
|
265
|
+
|
|
266
|
+
const boundingVolume: BoundingVolume = s2VolumeBox?.box
|
|
267
|
+
? {box: s2VolumeBox.box}
|
|
268
|
+
: rootBoundingVolume;
|
|
269
|
+
|
|
270
|
+
const boundingVolumeForChildTile = calculateBoundingVolumeForChildTile(
|
|
200
271
|
level,
|
|
201
|
-
|
|
272
|
+
boundingVolume,
|
|
202
273
|
childCoordinates
|
|
203
274
|
);
|
|
204
275
|
|
|
@@ -211,12 +282,9 @@ function formatTileData(
|
|
|
211
282
|
type: getTileType(tile),
|
|
212
283
|
lodMetricType,
|
|
213
284
|
lodMetricValue,
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
// y: tile.y,
|
|
218
|
-
// z: tile.z,
|
|
219
|
-
// level: tile.level
|
|
285
|
+
geometricError: lodMetricValue,
|
|
286
|
+
transform: tile.transform,
|
|
287
|
+
boundingVolume: boundingVolumeForChildTile
|
|
220
288
|
};
|
|
221
289
|
}
|
|
222
290
|
|
|
@@ -231,7 +299,7 @@ function calculateBoundingVolumeForChildTile(
|
|
|
231
299
|
level: number,
|
|
232
300
|
rootBoundingVolume: BoundingVolume,
|
|
233
301
|
childCoordinates: {childTileX: number; childTileY: number; childTileZ: number}
|
|
234
|
-
): BoundingVolume
|
|
302
|
+
): BoundingVolume {
|
|
235
303
|
if (rootBoundingVolume.region) {
|
|
236
304
|
const {childTileX, childTileY, childTileZ} = childCoordinates;
|
|
237
305
|
const [west, south, east, north, minimumHeight, maximumHeight] = rootBoundingVolume.region;
|
|
@@ -239,6 +307,13 @@ function calculateBoundingVolumeForChildTile(
|
|
|
239
307
|
|
|
240
308
|
const sizeX = (east - west) / boundingVolumesCount;
|
|
241
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
|
+
|
|
242
317
|
const sizeZ = (maximumHeight - minimumHeight) / boundingVolumesCount;
|
|
243
318
|
|
|
244
319
|
const [childWest, childEast] = [west + sizeX * childTileX, west + sizeX * (childTileX + 1)];
|
|
@@ -253,9 +328,11 @@ function calculateBoundingVolumeForChildTile(
|
|
|
253
328
|
};
|
|
254
329
|
}
|
|
255
330
|
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
331
|
+
if (rootBoundingVolume.box) {
|
|
332
|
+
return rootBoundingVolume;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
throw new Error(`Unsupported bounding volume type ${rootBoundingVolume}`);
|
|
259
336
|
}
|
|
260
337
|
|
|
261
338
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type {Subtree, ExplicitBitstream} from '../../../types';
|
|
2
|
-
import {
|
|
2
|
+
import type {LoaderContext, LoaderOptions} from '@loaders.gl/loader-utils';
|
|
3
3
|
|
|
4
4
|
const SUBTREE_FILE_MAGIC = 0x74627573;
|
|
5
5
|
const SUBTREE_FILE_VERSION = 1;
|
|
@@ -11,7 +11,11 @@ const SUBTREE_FILE_VERSION = 1;
|
|
|
11
11
|
* @returns
|
|
12
12
|
*/
|
|
13
13
|
// eslint-disable-next-line max-statements
|
|
14
|
-
export default async function parse3DTilesSubtree(
|
|
14
|
+
export default async function parse3DTilesSubtree(
|
|
15
|
+
data: ArrayBuffer,
|
|
16
|
+
options: LoaderOptions | undefined,
|
|
17
|
+
context: LoaderContext | undefined
|
|
18
|
+
): Promise<Subtree> {
|
|
15
19
|
const magic = new Uint32Array(data.slice(0, 4));
|
|
16
20
|
|
|
17
21
|
if (magic[0] !== SUBTREE_FILE_MAGIC) {
|
|
@@ -42,7 +46,8 @@ export default async function parse3DTilesSubtree(data: ArrayBuffer): Promise<Su
|
|
|
42
46
|
subtree.tileAvailability.explicitBitstream = await getExplicitBitstream(
|
|
43
47
|
subtree,
|
|
44
48
|
'tileAvailability',
|
|
45
|
-
internalBinaryBuffer
|
|
49
|
+
internalBinaryBuffer,
|
|
50
|
+
context
|
|
46
51
|
);
|
|
47
52
|
}
|
|
48
53
|
|
|
@@ -50,7 +55,8 @@ export default async function parse3DTilesSubtree(data: ArrayBuffer): Promise<Su
|
|
|
50
55
|
subtree.contentAvailability.explicitBitstream = await getExplicitBitstream(
|
|
51
56
|
subtree,
|
|
52
57
|
'contentAvailability',
|
|
53
|
-
internalBinaryBuffer
|
|
58
|
+
internalBinaryBuffer,
|
|
59
|
+
context
|
|
54
60
|
);
|
|
55
61
|
}
|
|
56
62
|
|
|
@@ -58,13 +64,40 @@ export default async function parse3DTilesSubtree(data: ArrayBuffer): Promise<Su
|
|
|
58
64
|
subtree.childSubtreeAvailability.explicitBitstream = await getExplicitBitstream(
|
|
59
65
|
subtree,
|
|
60
66
|
'childSubtreeAvailability',
|
|
61
|
-
internalBinaryBuffer
|
|
67
|
+
internalBinaryBuffer,
|
|
68
|
+
context
|
|
62
69
|
);
|
|
63
70
|
}
|
|
64
71
|
|
|
65
72
|
return subtree;
|
|
66
73
|
}
|
|
67
74
|
|
|
75
|
+
/**
|
|
76
|
+
* Get url for bitstream downloading
|
|
77
|
+
* @param bitstreamRelativeUri
|
|
78
|
+
* @param baseUri
|
|
79
|
+
* @returns
|
|
80
|
+
*/
|
|
81
|
+
function resolveBufferUri(bitstreamRelativeUri: string, basePath: string): string {
|
|
82
|
+
const hasProtocol = basePath.startsWith('http');
|
|
83
|
+
|
|
84
|
+
if (hasProtocol) {
|
|
85
|
+
const resolvedUri = new URL(bitstreamRelativeUri, basePath);
|
|
86
|
+
return decodeURI(resolvedUri.toString());
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Adding http protocol only for new URL constructor usage.
|
|
91
|
+
* It allows to resolve relative paths like ../../example with basePath.
|
|
92
|
+
*/
|
|
93
|
+
const basePathWithProtocol = `http://${basePath}`;
|
|
94
|
+
const resolvedUri = new URL(bitstreamRelativeUri, basePathWithProtocol);
|
|
95
|
+
/**
|
|
96
|
+
* Drop protocol and use just relative path.
|
|
97
|
+
*/
|
|
98
|
+
return `/${resolvedUri.host}${resolvedUri.pathname}`;
|
|
99
|
+
}
|
|
100
|
+
|
|
68
101
|
/**
|
|
69
102
|
* Get explicit bitstream for subtree availability data.
|
|
70
103
|
* @param subtree
|
|
@@ -74,15 +107,25 @@ export default async function parse3DTilesSubtree(data: ArrayBuffer): Promise<Su
|
|
|
74
107
|
async function getExplicitBitstream(
|
|
75
108
|
subtree: Subtree,
|
|
76
109
|
name: string,
|
|
77
|
-
internalBinaryBuffer: ArrayBuffer
|
|
110
|
+
internalBinaryBuffer: ArrayBuffer,
|
|
111
|
+
context: LoaderContext | undefined
|
|
78
112
|
): Promise<ExplicitBitstream> {
|
|
79
113
|
const bufferViewIndex = subtree[name].bufferView;
|
|
80
114
|
const bufferView = subtree.bufferViews[bufferViewIndex];
|
|
81
115
|
const buffer = subtree.buffers[bufferView.buffer];
|
|
82
116
|
|
|
117
|
+
if (!context?.url || !context.fetch) {
|
|
118
|
+
throw new Error('Url is not provided');
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
if (!context.fetch) {
|
|
122
|
+
throw new Error('fetch is not provided');
|
|
123
|
+
}
|
|
124
|
+
|
|
83
125
|
// External bitstream loading
|
|
84
126
|
if (buffer.uri) {
|
|
85
|
-
const
|
|
127
|
+
const bufferUri = resolveBufferUri(buffer.uri, context?.url);
|
|
128
|
+
const response = await context.fetch(bufferUri);
|
|
86
129
|
const data = await response.arrayBuffer();
|
|
87
130
|
// Return view of bitstream.
|
|
88
131
|
return new Uint8Array(data, bufferView.byteOffset, bufferView.byteLength);
|
|
@@ -1,8 +1,12 @@
|
|
|
1
|
+
import type {LoaderOptions} from '@loaders.gl/loader-utils';
|
|
1
2
|
import {Tile3DSubtreeLoader} from '../../tile-3d-subtree-loader';
|
|
2
3
|
import {load} from '@loaders.gl/core';
|
|
3
|
-
import {Tileset3D, LOD_METRIC_TYPE, TILE_REFINEMENT, TILE_TYPE} from '@loaders.gl/tiles';
|
|
4
|
-
import {Subtree} from '../../types';
|
|
4
|
+
import {Tileset3D, LOD_METRIC_TYPE, TILE_REFINEMENT, TILE_TYPE, Tile3D} from '@loaders.gl/tiles';
|
|
5
|
+
import {ImplicitTilingExtension, Subtree} from '../../types';
|
|
6
|
+
import type {S2VolumeBox} from './helpers/parse-3d-implicit-tiles';
|
|
5
7
|
import {parseImplicitTiles, replaceContentUrlTemplate} from './helpers/parse-3d-implicit-tiles';
|
|
8
|
+
import type {S2VolumeInfo} from '../utils/obb/s2-corners-to-obb';
|
|
9
|
+
import {convertS2BoundingVolumetoOBB} from '../utils/obb/s2-corners-to-obb';
|
|
6
10
|
|
|
7
11
|
function getTileType(tile) {
|
|
8
12
|
if (!tile.contentUrl) {
|
|
@@ -37,13 +41,27 @@ function getRefine(refine) {
|
|
|
37
41
|
}
|
|
38
42
|
}
|
|
39
43
|
|
|
44
|
+
function resolveUri(uri, basePath) {
|
|
45
|
+
// url scheme per RFC3986
|
|
46
|
+
const urlSchemeRegex = /^[a-z][0-9a-z+.-]*:/i;
|
|
47
|
+
|
|
48
|
+
if (urlSchemeRegex.test(basePath)) {
|
|
49
|
+
const url = new URL(uri, `${basePath}/`);
|
|
50
|
+
return decodeURI(url.toString());
|
|
51
|
+
} else if (uri.startsWith('/')) {
|
|
52
|
+
return uri;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return `${basePath}/${uri}`;
|
|
56
|
+
}
|
|
57
|
+
|
|
40
58
|
export function normalizeTileData(tile, options) {
|
|
41
59
|
if (!tile) {
|
|
42
60
|
return null;
|
|
43
61
|
}
|
|
44
62
|
if (tile.content) {
|
|
45
63
|
const contentUri = tile.content.uri || tile.content.url;
|
|
46
|
-
tile.contentUrl =
|
|
64
|
+
tile.contentUrl = resolveUri(contentUri, options.basePath);
|
|
47
65
|
}
|
|
48
66
|
tile.id = tile.contentUrl;
|
|
49
67
|
tile.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;
|
|
@@ -56,9 +74,24 @@ export function normalizeTileData(tile, options) {
|
|
|
56
74
|
}
|
|
57
75
|
|
|
58
76
|
// normalize tile headers
|
|
59
|
-
export function normalizeTileHeaders(
|
|
77
|
+
export async function normalizeTileHeaders(
|
|
78
|
+
tileset: Tileset3D,
|
|
79
|
+
options: LoaderOptions
|
|
80
|
+
): Promise<Tileset3D> {
|
|
60
81
|
const basePath = tileset.basePath;
|
|
61
|
-
|
|
82
|
+
let root: Tileset3D;
|
|
83
|
+
|
|
84
|
+
const rootImplicitTilingExtension = getImplicitTilingExtensionData(tileset?.root);
|
|
85
|
+
if (rootImplicitTilingExtension && tileset.root) {
|
|
86
|
+
root = await normalizeImplicitTileHeaders(
|
|
87
|
+
tileset.root,
|
|
88
|
+
tileset,
|
|
89
|
+
rootImplicitTilingExtension,
|
|
90
|
+
options
|
|
91
|
+
);
|
|
92
|
+
} else {
|
|
93
|
+
root = normalizeTileData(tileset.root, tileset);
|
|
94
|
+
}
|
|
62
95
|
|
|
63
96
|
const stack: any[] = [];
|
|
64
97
|
stack.push(root);
|
|
@@ -66,8 +99,19 @@ export function normalizeTileHeaders(tileset) {
|
|
|
66
99
|
while (stack.length > 0) {
|
|
67
100
|
const tile = stack.pop() || {};
|
|
68
101
|
const children = tile.children || [];
|
|
69
|
-
for (
|
|
70
|
-
|
|
102
|
+
for (let childHeader of children) {
|
|
103
|
+
const childImplicitTilingExtension = getImplicitTilingExtensionData(childHeader);
|
|
104
|
+
if (childImplicitTilingExtension) {
|
|
105
|
+
childHeader = await normalizeImplicitTileHeaders(
|
|
106
|
+
childHeader,
|
|
107
|
+
tileset,
|
|
108
|
+
childImplicitTilingExtension,
|
|
109
|
+
options
|
|
110
|
+
);
|
|
111
|
+
} else {
|
|
112
|
+
normalizeTileData(childHeader, {basePath});
|
|
113
|
+
}
|
|
114
|
+
|
|
71
115
|
stack.push(childHeader);
|
|
72
116
|
}
|
|
73
117
|
}
|
|
@@ -80,29 +124,38 @@ export function normalizeTileHeaders(tileset) {
|
|
|
80
124
|
* TODO Check if Tile3D class can be a return type here.
|
|
81
125
|
* @param tileset
|
|
82
126
|
*/
|
|
83
|
-
export async function normalizeImplicitTileHeaders(
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
127
|
+
export async function normalizeImplicitTileHeaders(
|
|
128
|
+
tile: Tile3D,
|
|
129
|
+
tileset: Tileset3D,
|
|
130
|
+
implicitTilingExtension: ImplicitTilingExtension,
|
|
131
|
+
options: LoaderOptions
|
|
132
|
+
) {
|
|
88
133
|
const basePath = tileset.basePath;
|
|
89
|
-
const implicitTilingExtension = tileset.root.extensions['3DTILES_implicit_tiling'];
|
|
90
134
|
const {
|
|
91
135
|
subdivisionScheme,
|
|
92
136
|
maximumLevel,
|
|
93
137
|
subtreeLevels,
|
|
94
138
|
subtrees: {uri: subtreesUriTemplate}
|
|
95
139
|
} = implicitTilingExtension;
|
|
96
|
-
const
|
|
97
|
-
const
|
|
98
|
-
const
|
|
99
|
-
const contentUrlTemplate =
|
|
100
|
-
const refine = tileset
|
|
140
|
+
const replacedUrlTemplate = replaceContentUrlTemplate(subtreesUriTemplate, 0, 0, 0, 0);
|
|
141
|
+
const subtreeUrl = resolveUri(replacedUrlTemplate, basePath);
|
|
142
|
+
const subtree = await load(subtreeUrl, Tile3DSubtreeLoader, options);
|
|
143
|
+
const contentUrlTemplate = resolveUri(tile.content.uri, basePath);
|
|
144
|
+
const refine = tileset?.root?.refine;
|
|
101
145
|
// @ts-ignore
|
|
102
|
-
const rootLodMetricValue =
|
|
103
|
-
|
|
146
|
+
const rootLodMetricValue = tile.geometricError;
|
|
147
|
+
|
|
148
|
+
// Replace tile.boundingVolume with the the bounding volume specified by the extensions['3DTILES_bounding_volume_S2']
|
|
149
|
+
const s2VolumeInfo: S2VolumeInfo = tile.boundingVolume.extensions?.['3DTILES_bounding_volume_S2'];
|
|
150
|
+
if (s2VolumeInfo) {
|
|
151
|
+
const box = convertS2BoundingVolumetoOBB(s2VolumeInfo);
|
|
152
|
+
const s2VolumeBox: S2VolumeBox = {box, s2VolumeInfo};
|
|
153
|
+
tile.boundingVolume = s2VolumeBox;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
const rootBoundingVolume = tile.boundingVolume;
|
|
104
157
|
|
|
105
|
-
const
|
|
158
|
+
const implicitOptions = {
|
|
106
159
|
contentUrlTemplate,
|
|
107
160
|
subtreesUriTemplate,
|
|
108
161
|
subdivisionScheme,
|
|
@@ -117,7 +170,7 @@ export async function normalizeImplicitTileHeaders(tileset: Tileset3D) {
|
|
|
117
170
|
getRefine
|
|
118
171
|
};
|
|
119
172
|
|
|
120
|
-
return await normalizeImplicitTileData(
|
|
173
|
+
return await normalizeImplicitTileData(tile, subtree, implicitOptions);
|
|
121
174
|
}
|
|
122
175
|
|
|
123
176
|
/**
|
|
@@ -136,7 +189,11 @@ export async function normalizeImplicitTileData(tile, rootSubtree: Subtree, opti
|
|
|
136
189
|
tile.lodMetricValue = tile.geometricError;
|
|
137
190
|
tile.transformMatrix = tile.transform;
|
|
138
191
|
|
|
139
|
-
const {children, contentUrl} = await parseImplicitTiles({
|
|
192
|
+
const {children, contentUrl} = await parseImplicitTiles({
|
|
193
|
+
subtree: rootSubtree,
|
|
194
|
+
options,
|
|
195
|
+
s2VolumeBox: tile
|
|
196
|
+
});
|
|
140
197
|
|
|
141
198
|
if (contentUrl) {
|
|
142
199
|
tile.contentUrl = contentUrl;
|
|
@@ -150,3 +207,14 @@ export async function normalizeImplicitTileData(tile, rootSubtree: Subtree, opti
|
|
|
150
207
|
|
|
151
208
|
return tile;
|
|
152
209
|
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Implicit Tiling data can be in 3DTILES_implicit_tiling for 3DTiles v.Next or directly in implicitTiling object for 3DTiles v1.1.
|
|
213
|
+
* Spec 3DTiles v.Next - https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_implicit_tiling
|
|
214
|
+
* Spec 3DTiles v.1.1 - https://github.com/CesiumGS/3d-tiles/tree/draft-1.1/specification/ImplicitTiling
|
|
215
|
+
* @param tile
|
|
216
|
+
* @returns
|
|
217
|
+
*/
|
|
218
|
+
function getImplicitTilingExtensionData(tile: Tile3D | null): ImplicitTilingExtension {
|
|
219
|
+
return tile?.extensions?.['3DTILES_implicit_tiling'] || tile?.implicitTiling;
|
|
220
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import {Vector3} from '@math.gl/core';
|
|
2
|
+
import {OrientedBoundingBox, makeOrientedBoundingBoxFromPoints} from '@math.gl/culling';
|
|
3
|
+
|
|
4
|
+
import type {S2HeightInfo} from '../../utils/s2/index';
|
|
5
|
+
import {getS2OrientedBoundingBoxCornerPoints} from '../../utils/s2/index';
|
|
6
|
+
|
|
7
|
+
import {getS2LngLat} from '../../utils/s2/index';
|
|
8
|
+
import {Ellipsoid} from '@math.gl/geospatial';
|
|
9
|
+
|
|
10
|
+
export type S2VolumeInfo = {
|
|
11
|
+
/** S2 key or token */
|
|
12
|
+
token: string;
|
|
13
|
+
/** minimum height in meters */
|
|
14
|
+
minimumHeight: number;
|
|
15
|
+
/** maximum height in meters */
|
|
16
|
+
maximumHeight: number;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Converts S2VolumeInfo to OrientedBoundingBox
|
|
21
|
+
* @param {S2VolumeInfo} s2VolumeInfo - s2 volume to convert
|
|
22
|
+
* @returns Oriented Bounding Box of type Box
|
|
23
|
+
*/
|
|
24
|
+
export function convertS2BoundingVolumetoOBB(s2VolumeInfo: S2VolumeInfo): number[] {
|
|
25
|
+
const token: string = s2VolumeInfo.token;
|
|
26
|
+
const heightInfo: S2HeightInfo = {
|
|
27
|
+
minimumHeight: s2VolumeInfo.minimumHeight,
|
|
28
|
+
maximumHeight: s2VolumeInfo.maximumHeight
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const corners: Vector3[] = getS2OrientedBoundingBoxCornerPoints(token, heightInfo);
|
|
32
|
+
|
|
33
|
+
// Add a point that doesn't allow the box dive under the Earth
|
|
34
|
+
|
|
35
|
+
const center = getS2LngLat(token);
|
|
36
|
+
const centerLng: number = center[0];
|
|
37
|
+
const centerLat: number = center[1];
|
|
38
|
+
const point = Ellipsoid.WGS84.cartographicToCartesian([
|
|
39
|
+
centerLng,
|
|
40
|
+
centerLat,
|
|
41
|
+
heightInfo.maximumHeight
|
|
42
|
+
]);
|
|
43
|
+
const centerPointAdditional = new Vector3(point[0], point[1], point[2]);
|
|
44
|
+
corners.push(centerPointAdditional);
|
|
45
|
+
|
|
46
|
+
// corners should be an array of Vector3 (XYZ)
|
|
47
|
+
const obb: OrientedBoundingBox = makeOrientedBoundingBoxFromPoints(corners);
|
|
48
|
+
const box: number[] = [...obb.center, ...obb.halfAxes];
|
|
49
|
+
|
|
50
|
+
return box;
|
|
51
|
+
}
|