@loaders.gl/3d-tiles 4.0.0-alpha.4 → 4.0.0-alpha.5
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.d.ts +2 -0
- package/dist/bundle.d.ts.map +1 -0
- package/dist/cesium-ion-loader.d.ts +6 -0
- package/dist/cesium-ion-loader.d.ts.map +1 -0
- package/dist/dist.min.js +12227 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/classes/helpers/tile-3d-accessor-utils.d.ts +8 -0
- package/dist/lib/classes/helpers/tile-3d-accessor-utils.d.ts.map +1 -0
- package/dist/lib/classes/helpers/tile-3d-accessor-utils.js.map +1 -1
- package/dist/lib/classes/tile-3d-batch-table-hierarchy.d.ts +10 -0
- package/dist/lib/classes/tile-3d-batch-table-hierarchy.d.ts.map +1 -0
- package/dist/lib/classes/tile-3d-batch-table-hierarchy.js.map +1 -1
- package/dist/lib/classes/tile-3d-batch-table.d.ts +34 -0
- package/dist/lib/classes/tile-3d-batch-table.d.ts.map +1 -0
- package/dist/lib/classes/tile-3d-batch-table.js +16 -1
- package/dist/lib/classes/tile-3d-batch-table.js.map +1 -1
- package/dist/lib/classes/tile-3d-feature-table.d.ts +15 -0
- package/dist/lib/classes/tile-3d-feature-table.d.ts.map +1 -0
- package/dist/lib/classes/tile-3d-feature-table.js +9 -2
- package/dist/lib/classes/tile-3d-feature-table.js.map +1 -1
- package/dist/lib/constants.d.ts +22 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +2 -1
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/encoders/encode-3d-tile-batched-model.d.ts +2 -0
- package/dist/lib/encoders/encode-3d-tile-batched-model.d.ts.map +1 -0
- package/dist/lib/encoders/encode-3d-tile-batched-model.js.map +1 -1
- package/dist/lib/encoders/encode-3d-tile-composite.d.ts +2 -0
- package/dist/lib/encoders/encode-3d-tile-composite.d.ts.map +1 -0
- package/dist/lib/encoders/encode-3d-tile-composite.js.map +1 -1
- package/dist/lib/encoders/encode-3d-tile-instanced-model.d.ts +2 -0
- package/dist/lib/encoders/encode-3d-tile-instanced-model.d.ts.map +1 -0
- package/dist/lib/encoders/encode-3d-tile-instanced-model.js.map +1 -1
- package/dist/lib/encoders/encode-3d-tile-point-cloud.d.ts +2 -0
- package/dist/lib/encoders/encode-3d-tile-point-cloud.d.ts.map +1 -0
- package/dist/lib/encoders/encode-3d-tile-point-cloud.js.map +1 -1
- package/dist/lib/encoders/encode-3d-tile.d.ts +2 -0
- package/dist/lib/encoders/encode-3d-tile.d.ts.map +1 -0
- package/dist/lib/encoders/encode-3d-tile.js.map +1 -1
- package/dist/lib/encoders/helpers/encode-3d-tile-header.d.ts +3 -0
- package/dist/lib/encoders/helpers/encode-3d-tile-header.d.ts.map +1 -0
- package/dist/lib/encoders/helpers/encode-3d-tile-header.js.map +1 -1
- package/dist/lib/ion/ion.d.ts +4 -0
- package/dist/lib/ion/ion.d.ts.map +1 -0
- package/dist/lib/ion/ion.js.map +1 -1
- package/dist/lib/parsers/helpers/normalize-3d-tile-colors.d.ts +7 -0
- package/dist/lib/parsers/helpers/normalize-3d-tile-colors.d.ts.map +1 -0
- package/dist/lib/parsers/helpers/normalize-3d-tile-colors.js.map +1 -1
- package/dist/lib/parsers/helpers/normalize-3d-tile-normals.d.ts +6 -0
- package/dist/lib/parsers/helpers/normalize-3d-tile-normals.d.ts.map +1 -0
- package/dist/lib/parsers/helpers/normalize-3d-tile-normals.js.map +1 -1
- package/dist/lib/parsers/helpers/normalize-3d-tile-positions.d.ts +2 -0
- package/dist/lib/parsers/helpers/normalize-3d-tile-positions.d.ts.map +1 -0
- package/dist/lib/parsers/helpers/normalize-3d-tile-positions.js.map +1 -1
- package/dist/lib/parsers/helpers/parse-3d-implicit-tiles.d.ts +46 -0
- package/dist/lib/parsers/helpers/parse-3d-implicit-tiles.d.ts.map +1 -0
- package/dist/lib/parsers/helpers/parse-3d-implicit-tiles.js +222 -0
- package/dist/lib/parsers/helpers/parse-3d-implicit-tiles.js.map +1 -0
- package/dist/lib/parsers/helpers/parse-3d-tile-gltf-view.d.ts +7 -0
- package/dist/lib/parsers/helpers/parse-3d-tile-gltf-view.d.ts.map +1 -0
- package/dist/lib/parsers/helpers/parse-3d-tile-gltf-view.js +1 -1
- package/dist/lib/parsers/helpers/parse-3d-tile-gltf-view.js.map +1 -1
- package/dist/lib/parsers/helpers/parse-3d-tile-header.d.ts +2 -0
- package/dist/lib/parsers/helpers/parse-3d-tile-header.d.ts.map +1 -0
- package/dist/lib/parsers/helpers/parse-3d-tile-header.js.map +1 -1
- package/dist/lib/parsers/helpers/parse-3d-tile-subtree.d.ts +9 -0
- package/dist/lib/parsers/helpers/parse-3d-tile-subtree.d.ts.map +1 -0
- package/dist/lib/parsers/helpers/parse-3d-tile-subtree.js +64 -0
- package/dist/lib/parsers/helpers/parse-3d-tile-subtree.js.map +1 -0
- package/dist/lib/parsers/helpers/parse-3d-tile-tables.d.ts +3 -0
- package/dist/lib/parsers/helpers/parse-3d-tile-tables.d.ts.map +1 -0
- package/dist/lib/parsers/helpers/parse-3d-tile-tables.js +1 -1
- package/dist/lib/parsers/helpers/parse-3d-tile-tables.js.map +1 -1
- package/dist/lib/parsers/helpers/parse-utils.d.ts +4 -0
- package/dist/lib/parsers/helpers/parse-utils.d.ts.map +1 -0
- package/dist/lib/parsers/helpers/parse-utils.js.map +1 -1
- package/dist/lib/parsers/parse-3d-tile-batched-model.d.ts +2 -0
- package/dist/lib/parsers/parse-3d-tile-batched-model.d.ts.map +1 -0
- package/dist/lib/parsers/parse-3d-tile-batched-model.js.map +1 -1
- package/dist/lib/parsers/parse-3d-tile-composite.d.ts +2 -0
- package/dist/lib/parsers/parse-3d-tile-composite.d.ts.map +1 -0
- package/dist/lib/parsers/parse-3d-tile-composite.js.map +1 -1
- package/dist/lib/parsers/parse-3d-tile-gltf.d.ts +2 -0
- package/dist/lib/parsers/parse-3d-tile-gltf.d.ts.map +1 -0
- package/dist/lib/parsers/parse-3d-tile-gltf.js +10 -0
- package/dist/lib/parsers/parse-3d-tile-gltf.js.map +1 -0
- package/dist/lib/parsers/parse-3d-tile-header.d.ts +19 -0
- package/dist/lib/parsers/parse-3d-tile-header.d.ts.map +1 -0
- package/dist/lib/parsers/parse-3d-tile-header.js +72 -0
- package/dist/lib/parsers/parse-3d-tile-header.js.map +1 -1
- package/dist/lib/parsers/parse-3d-tile-instanced-model.d.ts +2 -0
- package/dist/lib/parsers/parse-3d-tile-instanced-model.d.ts.map +1 -0
- package/dist/lib/parsers/parse-3d-tile-instanced-model.js.map +1 -1
- package/dist/lib/parsers/parse-3d-tile-point-cloud.d.ts +3 -0
- package/dist/lib/parsers/parse-3d-tile-point-cloud.d.ts.map +1 -0
- package/dist/lib/parsers/parse-3d-tile-point-cloud.js +1 -1
- package/dist/lib/parsers/parse-3d-tile-point-cloud.js.map +1 -1
- package/dist/lib/parsers/parse-3d-tile.d.ts +2 -0
- package/dist/lib/parsers/parse-3d-tile.d.ts.map +1 -0
- package/dist/lib/parsers/parse-3d-tile.js +4 -0
- package/dist/lib/parsers/parse-3d-tile.js.map +1 -1
- package/dist/lib/utils/version.d.ts +2 -0
- package/dist/lib/utils/version.d.ts.map +1 -0
- package/dist/lib/utils/version.js +1 -1
- package/dist/lib/utils/version.js.map +1 -1
- package/dist/tile-3d-subtree-loader.d.ts +7 -0
- package/dist/tile-3d-subtree-loader.d.ts.map +1 -0
- package/dist/tile-3d-subtree-loader.js +14 -0
- package/dist/tile-3d-subtree-loader.js.map +1 -0
- package/dist/tile-3d-writer.d.ts +6 -0
- package/dist/tile-3d-writer.d.ts.map +1 -0
- package/dist/tiles-3d-loader.d.ts +6 -0
- package/dist/tiles-3d-loader.d.ts.map +1 -0
- package/dist/tiles-3d-loader.js +9 -2
- package/dist/tiles-3d-loader.js.map +1 -1
- package/dist/types.d.ts +80 -0
- package/dist/types.d.ts.map +1 -0
- package/package.json +10 -10
- package/src/index.ts +1 -0
- package/src/lib/classes/helpers/{tile-3d-accessor-utils.js → tile-3d-accessor-utils.ts} +0 -0
- package/src/lib/classes/{tile-3d-batch-table-hierarchy.js → tile-3d-batch-table-hierarchy.ts} +0 -0
- package/src/lib/classes/{tile-3d-batch-table.js → tile-3d-batch-table.ts} +14 -4
- package/src/lib/classes/{tile-3d-feature-table.js → tile-3d-feature-table.ts} +5 -2
- package/src/lib/{constants.js → constants.ts} +2 -1
- package/src/lib/encoders/{encode-3d-tile-batched-model.js → encode-3d-tile-batched-model.ts} +0 -0
- package/src/lib/encoders/{encode-3d-tile-composite.js → encode-3d-tile-composite.ts} +0 -0
- package/src/lib/encoders/{encode-3d-tile-instanced-model.js → encode-3d-tile-instanced-model.ts} +0 -0
- package/src/lib/encoders/{encode-3d-tile-point-cloud.js → encode-3d-tile-point-cloud.ts} +0 -0
- package/src/lib/encoders/{encode-3d-tile.js → encode-3d-tile.ts} +0 -0
- package/src/lib/encoders/helpers/{encode-3d-tile-header.js → encode-3d-tile-header.ts} +0 -0
- package/src/lib/ion/{ion.js → ion.ts} +0 -0
- package/src/lib/parsers/helpers/{normalize-3d-tile-colors.js → normalize-3d-tile-colors.ts} +1 -1
- package/src/lib/parsers/helpers/{normalize-3d-tile-normals.js → normalize-3d-tile-normals.ts} +0 -0
- package/src/lib/parsers/helpers/{normalize-3d-tile-positions.js → normalize-3d-tile-positions.ts} +0 -0
- package/src/lib/parsers/helpers/parse-3d-implicit-tiles.ts +319 -0
- package/src/lib/parsers/helpers/{parse-3d-tile-gltf-view.js → parse-3d-tile-gltf-view.ts} +1 -1
- package/src/lib/parsers/helpers/{parse-3d-tile-header.js → parse-3d-tile-header.ts} +0 -0
- package/src/lib/parsers/helpers/parse-3d-tile-subtree.ts +105 -0
- package/src/lib/parsers/helpers/{parse-3d-tile-tables.js → parse-3d-tile-tables.ts} +1 -1
- package/src/lib/parsers/helpers/{parse-utils.js → parse-utils.ts} +0 -0
- package/src/lib/parsers/{parse-3d-tile-batched-model.js → parse-3d-tile-batched-model.ts} +0 -0
- package/src/lib/parsers/{parse-3d-tile-composite.js → parse-3d-tile-composite.ts} +0 -0
- package/src/lib/parsers/parse-3d-tile-gltf.js +16 -0
- package/src/lib/parsers/parse-3d-tile-header.ts +152 -0
- package/src/lib/parsers/{parse-3d-tile-instanced-model.js → parse-3d-tile-instanced-model.ts} +6 -0
- package/src/lib/parsers/{parse-3d-tile-point-cloud.js → parse-3d-tile-point-cloud.ts} +2 -2
- package/src/lib/parsers/{parse-3d-tile.js → parse-3d-tile.ts} +8 -0
- package/src/lib/utils/{version.js → version.ts} +0 -0
- package/src/tile-3d-subtree-loader.ts +19 -0
- package/src/tiles-3d-loader.ts +17 -2
- package/src/types.ts +40 -1
- package/src/lib/parsers/parse-3d-tile-header.js +0 -69
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/parsers/parse-3d-tile-point-cloud.js"],"names":["DracoLoader","GL","Vector3","Tile3DFeatureTable","Tile3DBatchTable","parse3DTileHeaderSync","parse3DTileTablesHeaderSync","parse3DTileTablesSync","normalize3DTileColorAttribute","normalize3DTileNormalAttribute","normalize3DTilePositionAttribute","parsePointCloud3DTile","tile","arrayBuffer","byteOffset","options","context","initializeTile","featureTable","batchTable","parsePointCloudTables","parseDraco","parsePositions","parseColors","parseNormals","attributes","positions","colors","normals","batchIds","isQuantized","isTranslucent","isRGB565","isOctEncoded16P","featureTableJson","featureTableBinary","pointsLength","getGlobalProperty","Number","isFinite","Error","featuresLength","pointCount","rtcCenter","FLOAT","parseBatchIds","hasProperty","getPropertyArray","UNSIGNED_SHORT","quantizedRange","quantizedVolumeScale","quantizedVolumeOffset","UNSIGNED_BYTE","constantRGBA","batchFeatureLength","batchTableJson","batchTableBinary","dracoBuffer","dracoFeatureTableProperties","dracoBatchTableProperties","batchTableDraco","extensions","properties","featureTableDraco","getExtension","dracoByteOffset","dracoByteLength","byteLength","slice","hasPositions","POSITION","hasColors","RGB","RGBA","hasNormals","NORMAL","hasBatchIds","BATCH_ID","dracoData","buffer","featureTableProperties","batchTableProperties","dequantizeInShader","loadDraco","parse","dracoOptions","draco","extraAttributes","data","decodedPositions","value","decodedColors","COLOR_0","decodedNormals","decodedBatchIds","isQuantizedDraco","quantization","isOctEncodedDraco","range","minValues","quantizationBits","octEncodedRange","batchTableAttributes","attributeName","Object","keys","toLowerCase"],"mappings":"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","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 {DracoLoader} from '@loaders.gl/draco';\nimport {GL} from '@loaders.gl/math';\nimport {Vector3} from '@math.gl/core';\n\nimport Tile3DFeatureTable from '../classes/tile-3d-feature-table';\nimport Tile3DBatchTable from '../classes/tile-3d-batch-table';\nimport {parse3DTileHeaderSync} from './helpers/parse-3d-tile-header';\nimport {parse3DTileTablesHeaderSync, parse3DTileTablesSync} from './helpers/parse-3d-tile-tables';\nimport {normalize3DTileColorAttribute} from './helpers/normalize-3d-tile-colors';\nimport {normalize3DTileNormalAttribute} from './helpers/normalize-3d-tile-normals';\nimport {normalize3DTilePositionAttribute} from './helpers/normalize-3d-tile-positions';\n\nexport async function parsePointCloud3DTile(tile, arrayBuffer, byteOffset, options, context) {\n byteOffset = parse3DTileHeaderSync(tile, arrayBuffer, byteOffset);\n byteOffset = parse3DTileTablesHeaderSync(tile, arrayBuffer, byteOffset);\n byteOffset = parse3DTileTablesSync(tile, arrayBuffer, byteOffset, options);\n initializeTile(tile);\n\n const {featureTable, batchTable} = parsePointCloudTables(tile);\n\n await parseDraco(tile, featureTable, batchTable, options, context);\n\n parsePositions(tile, featureTable, options);\n parseColors(tile, featureTable, batchTable);\n parseNormals(tile, featureTable);\n\n return byteOffset;\n}\n\nfunction initializeTile(tile) {\n // Initialize point cloud tile defaults\n tile.attributes = {\n positions: null,\n colors: null,\n normals: null,\n batchIds: null\n };\n tile.isQuantized = false;\n tile.isTranslucent = false;\n tile.isRGB565 = false;\n tile.isOctEncoded16P = false;\n}\n\nfunction parsePointCloudTables(tile) {\n const featureTable = new Tile3DFeatureTable(tile.featureTableJson, tile.featureTableBinary);\n\n const pointsLength = featureTable.getGlobalProperty('POINTS_LENGTH');\n if (!Number.isFinite(pointsLength)) {\n throw new Error('POINTS_LENGTH must be defined');\n }\n featureTable.featuresLength = pointsLength;\n\n tile.featuresLength = pointsLength;\n tile.pointsLength = pointsLength;\n tile.pointCount = pointsLength;\n\n tile.rtcCenter = featureTable.getGlobalProperty('RTC_CENTER', GL.FLOAT, 3);\n\n const batchTable = parseBatchIds(tile, featureTable);\n\n return {featureTable, batchTable};\n}\n\nfunction parsePositions(tile, featureTable, options) {\n if (!tile.attributes.positions) {\n if (featureTable.hasProperty('POSITION')) {\n tile.attributes.positions = featureTable.getPropertyArray('POSITION', GL.FLOAT, 3);\n } else if (featureTable.hasProperty('POSITION_QUANTIZED')) {\n const positions = featureTable.getPropertyArray('POSITION_QUANTIZED', GL.UNSIGNED_SHORT, 3);\n\n tile.isQuantized = true;\n tile.quantizedRange = (1 << 16) - 1;\n\n tile.quantizedVolumeScale = featureTable.getGlobalProperty(\n 'QUANTIZED_VOLUME_SCALE',\n GL.FLOAT,\n 3\n );\n if (!tile.quantizedVolumeScale) {\n throw new Error('QUANTIZED_VOLUME_SCALE must be defined for quantized positions.');\n }\n\n tile.quantizedVolumeOffset = featureTable.getGlobalProperty(\n 'QUANTIZED_VOLUME_OFFSET',\n GL.FLOAT,\n 3\n );\n if (!tile.quantizedVolumeOffset) {\n throw new Error('QUANTIZED_VOLUME_OFFSET must be defined for quantized positions.');\n }\n\n tile.attributes.positions = normalize3DTilePositionAttribute(tile, positions, options);\n }\n }\n\n if (!tile.attributes.positions) {\n throw new Error('Either POSITION or POSITION_QUANTIZED must be defined.');\n }\n}\n\nfunction parseColors(tile, featureTable, batchTable) {\n if (!tile.attributes.colors) {\n let colors = null;\n if (featureTable.hasProperty('RGBA')) {\n colors = featureTable.getPropertyArray('RGBA', GL.UNSIGNED_BYTE, 4);\n tile.isTranslucent = true;\n } else if (featureTable.hasProperty('RGB')) {\n colors = featureTable.getPropertyArray('RGB', GL.UNSIGNED_BYTE, 3);\n } else if (featureTable.hasProperty('RGB565')) {\n colors = featureTable.getPropertyArray('RGB565', GL.UNSIGNED_SHORT, 1);\n tile.isRGB565 = true;\n }\n\n tile.attributes.colors = normalize3DTileColorAttribute(tile, colors, batchTable);\n }\n\n if (featureTable.hasProperty('CONSTANT_RGBA')) {\n tile.constantRGBA = featureTable.getGlobalProperty('CONSTANT_RGBA', GL.UNSIGNED_BYTE, 4);\n }\n}\n\nfunction parseNormals(tile, featureTable) {\n if (!tile.attributes.normals) {\n let normals = null;\n if (featureTable.hasProperty('NORMAL')) {\n normals = featureTable.getPropertyArray('NORMAL', GL.FLOAT, 3);\n } else if (featureTable.hasProperty('NORMAL_OCT16P')) {\n normals = featureTable.getPropertyArray('NORMAL_OCT16P', GL.UNSIGNED_BYTE, 2);\n tile.isOctEncoded16P = true;\n }\n\n tile.attributes.normals = normalize3DTileNormalAttribute(tile, normals);\n }\n}\n\nfunction parseBatchIds(tile, featureTable) {\n let batchTable = null;\n if (!tile.batchIds && featureTable.hasProperty('BATCH_ID')) {\n tile.batchIds = featureTable.getPropertyArray('BATCH_ID', GL.UNSIGNED_SHORT, 1);\n\n if (tile.batchIds) {\n const batchFeatureLength = featureTable.getGlobalProperty('BATCH_LENGTH');\n if (!batchFeatureLength) {\n throw new Error('Global property: BATCH_LENGTH must be defined when BATCH_ID is defined.');\n }\n const {batchTableJson, batchTableBinary} = tile;\n batchTable = new Tile3DBatchTable(batchTableJson, batchTableBinary, batchFeatureLength);\n }\n }\n return batchTable;\n}\n\n// eslint-disable-next-line complexity\nasync function parseDraco(tile, featureTable, batchTable, options, context) {\n let dracoBuffer;\n let dracoFeatureTableProperties;\n let dracoBatchTableProperties;\n const batchTableDraco =\n tile.batchTableJson &&\n tile.batchTableJson.extensions &&\n tile.batchTableJson.extensions['3DTILES_draco_point_compression'];\n if (batchTableDraco) {\n dracoBatchTableProperties = batchTableDraco.properties;\n }\n\n const featureTableDraco = featureTable.getExtension('3DTILES_draco_point_compression');\n if (featureTableDraco) {\n dracoFeatureTableProperties = featureTableDraco.properties;\n const dracoByteOffset = featureTableDraco.byteOffset;\n const dracoByteLength = featureTableDraco.byteLength;\n if (!dracoFeatureTableProperties || !Number.isFinite(dracoByteOffset) || !dracoByteLength) {\n throw new Error('Draco properties, byteOffset, and byteLength must be defined');\n }\n\n dracoBuffer = tile.featureTableBinary.slice(dracoByteOffset, dracoByteOffset + dracoByteLength);\n\n tile.hasPositions = Number.isFinite(dracoFeatureTableProperties.POSITION);\n tile.hasColors =\n Number.isFinite(dracoFeatureTableProperties.RGB) ||\n Number.isFinite(dracoFeatureTableProperties.RGBA);\n tile.hasNormals = Number.isFinite(dracoFeatureTableProperties.NORMAL);\n tile.hasBatchIds = Number.isFinite(dracoFeatureTableProperties.BATCH_ID);\n tile.isTranslucent = Number.isFinite(dracoFeatureTableProperties.RGBA);\n }\n\n if (!dracoBuffer) {\n return true;\n }\n\n const dracoData = {\n buffer: dracoBuffer,\n properties: {...dracoFeatureTableProperties, ...dracoBatchTableProperties},\n featureTableProperties: dracoFeatureTableProperties,\n batchTableProperties: dracoBatchTableProperties,\n dequantizeInShader: false\n };\n\n return await loadDraco(tile, dracoData, options, context);\n}\n\n// eslint-disable-next-line complexity, max-statements\nexport async function loadDraco(tile, dracoData, options, context) {\n const {parse} = context;\n const dracoOptions = {\n ...options,\n draco: {\n ...options.draco,\n extraAttributes: dracoData.batchTableProperties || {}\n }\n };\n\n // The entire tileset might be included, too expensive to serialize\n delete dracoOptions['3d-tiles'];\n\n const data = await parse(dracoData.buffer, DracoLoader, dracoOptions);\n\n const decodedPositions = data.attributes.POSITION && data.attributes.POSITION.value;\n const decodedColors = data.attributes.COLOR_0 && data.attributes.COLOR_0.value;\n const decodedNormals = data.attributes.NORMAL && data.attributes.NORMAL.value;\n const decodedBatchIds = data.attributes.BATCH_ID && data.attributes.BATCH_ID.value;\n const isQuantizedDraco = decodedPositions && data.attributes.POSITION.value.quantization;\n const isOctEncodedDraco = decodedNormals && data.attributes.NORMAL.value.quantization;\n if (isQuantizedDraco) {\n // Draco quantization range == quantized volume scale - size in meters of the quantized volume\n // Internal quantized range is the range of values of the quantized data, e.g. 255 for 8-bit, 1023 for 10-bit, etc\n const quantization = data.POSITION.data.quantization;\n const range = quantization.range;\n tile.quantizedVolumeScale = new Vector3(range, range, range);\n tile.quantizedVolumeOffset = new Vector3(quantization.minValues);\n tile.quantizedRange = (1 << quantization.quantizationBits) - 1.0;\n tile.isQuantizedDraco = true;\n }\n if (isOctEncodedDraco) {\n tile.octEncodedRange = (1 << data.NORMAL.data.quantization.quantizationBits) - 1.0;\n tile.isOctEncodedDraco = true;\n }\n\n // Extra batch table attributes\n const batchTableAttributes = {};\n if (dracoData.batchTableProperties) {\n for (const attributeName of Object.keys(dracoData.batchTableProperties)) {\n if (data.attributes[attributeName] && data.attributes[attributeName].value) {\n batchTableAttributes[attributeName.toLowerCase()] = data.attributes[attributeName].value;\n }\n }\n }\n\n tile.attributes = {\n positions: decodedPositions,\n colors: normalize3DTileColorAttribute(tile, decodedColors),\n normals: decodedNormals,\n batchIds: decodedBatchIds,\n ...batchTableAttributes\n };\n}\n\n// TODO - this is the remaining code from Cesium's parser\n/*\n const batchTable = new Tile3DBatchTable(tile);\n\n // parseDracoBuffer(tile, featureTable, batchTable);\n\n if (!tile.attributes.positions) {\n throw new Error('Either POSITION or POSITION_QUANTIZED must be defined.');\n }\n}\n/*\n\n if (!tile.attributes.positions) {\n if (featureTable.hasProperty('POSITION')) {\n tile.attributes.positions = featureTable.getPropertyArray('POSITION', GL.FLOAT, 3);\n } else if (featureTable.hasProperty('POSITION_QUANTIZED')) {\n tile.attributes.positions = featureTable.getPropertyArray('POSITION_QUANTIZED', GL.UNSIGNED_SHORT, 3);\n\n\n if (!tile.colors) {\n if (featureTable.hasProperty('RGBA')) {\n tile.colors = featureTable.getPropertyArray('RGBA', GL.UNSIGNED_BYTE, 4);\n tile.isTranslucent = true;\n } else if (featureTable.hasProperty('RGB')) {\n tile.colors = featureTable.getPropertyArray('RGB', GL.UNSIGNED_BYTE, 3);\n } else if (featureTable.hasPropertry('RGB565')) {\n tile.colors = featureTable.getPropertyArray('RGB565', GL.UNSIGNED_SHORT, 1);\n tile.isRGB565 = true;\n }\n }\n\n if (!tile.attributes.normals) {\n if (featureTable.getPropertry('NORMAL')) {\n tile.attributes.normals = featureTable.getPropertyArray('NORMAL', GL.FLOAT, 3);\n } else if (featureTable.getProperty('NORMAL_OCT16P')) {\n tile.attributes.normals = featureTable.getPropertyArray('NORMAL_OCT16P', GL.UNSIGNED_BYTE, 2);\n tile.isOctEncoded16P = true;\n }\n }\n\n if (!tile.batchIds) {\n if (featureTable.hasProperty('BATCH_ID')) {\n tile.batchIds = featureTable.getPropertyArray('BATCH_ID', GL.UNSIGNED_SHORT, 1);\n }\n }\n\n if (!tile.attributes.positions) {\n throw new Error('Either POSITION or POSITION_QUANTIZED must be defined.');\n }\n\n if (featureTable.getPropertry('CONSTANT_RGBA')) {\n tile.constantRGBA = featureTable.getGlobalProperty('CONSTANT_RGBA', GL.UNSIGNED_BYTE, 4);\n }\n\n if (tile.batchIds) {\n const batchLength = featureTable.getGlobalProperty('BATCH_LENGTH');\n if (!defined(batchLength)) {\n throw new Error('Global property: BATCH_LENGTH must be defined when BATCH_ID is defined.');\n }\n\n if (defined(batchTableBinary)) {\n // Copy the batchTableBinary section and let the underlying ArrayBuffer be freed\n batchTableBinary = new Uint8Array(batchTableBinary);\n }\n\n if (defined(pointCloud._batchTableLoaded)) {\n pointCloud._batchTableLoaded(batchLength, batchTableJson, batchTableBinary);\n }\n }\n\n // If points are not batched and there are per-point properties, use these properties for styling purposes\n var styleableProperties;\n if (!hasBatchIds && defined(batchTableBinary)) {\n tile.styleableProperties = Cesium3DTileBatchTable.getBinaryProperties(\n pointsLength,\n batchTableJson,\n batchTableBinary\n );\n }\n\n tile.draco = draco;\n}\n\n// Separate parsing and decoding of Draco\nexport function parseDracoBuffer(tile, featureTable, batchTable) {\n let dracoBuffer;\n let dracoFeatureTableProperties;\n let dracoBatchTableProperties;\n\n const batchTableDraco = batchTable.getExtension('3DTILES_draco_point_compression');\n if (batchTableDraco) {\n dracoBatchTableProperties = batchTableDraco.properties;\n }\n\n const featureTableDraco = featureTable.getExtension('3DTILES_draco_point_compression');\n if (featureTableDraco) {\n dracoFeatureTableProperties = featureTableDraco.properties;\n const dracoByteOffset = featureTableDraco.byteOffset;\n const dracoByteLength = featureTableDraco.byteLength;\n if (!dracoFeatureTableProperties || !dracoByteOffset || !dracoByteLength) {\n throw new Error('Draco properties, byteOffset, and byteLength must be defined');\n }\n\n dracoBuffer = arraySlice(\n featureTableBinary,\n dracoByteOffset,\n dracoByteOffset + dracoByteLength\n );\n tile.hasPositions = dracoFeatureTableProperties.POSITION;\n tile.hasColors = dracoFeatureTableProperties.RGB || dracoFeatureTableProperties.RGBA;\n tile.hasNormals = dracoFeatureTableProperties.NORMAL;\n tile.hasBatchIds = dracoFeatureTableProperties.BATCH_ID;\n tile.isTranslucent = dracoFeatureTableProperties.RGBA;\n }\n\n if (dracoBuffer) {\n tile.draco = {\n buffer: dracoBuffer,\n properties: {...dracoFeatureTableProperties, ...dracoBatchTableProperties},\n featureTableProperties: dracoFeatureTableProperties,\n batchTableProperties: dracoBatchTableProperties,\n dequantizeInShader: false\n };\n\n tile.decodingState = DECODING_STATE.NEEDS_DECODE;\n }\n}\n\n/*\nfunction decodeDraco(tile, context) {\n if (tile.decodingState === DECODING_STATE.READY) {\n return false;\n }\n if (tile.decodingState === DECODING_STATE.NEEDS_DECODE) {\n var parsedContent = tile._parsedContent;\n var draco = parsedContent.draco;\n var decodePromise = DracoLoader.decodePointCloud(draco, context);\n if (defined(decodePromise)) {\n tile.decodingState = DECODING_STATE.DECODING;\n decodePromise.then(function(result) {\n tile.decodingState = DECODING_STATE.READY;\n var decodedPositions = defined(result.POSITION) ? result.POSITION.array : undefined;\n var decodedRgb = defined(result.RGB) ? result.RGB.array : undefined;\n var decodedRgba = defined(result.RGBA) ? result.RGBA.array : undefined;\n var decodedNormals = defined(result.NORMAL) ? result.NORMAL.array : undefined;\n var decodedBatchIds = defined(result.BATCH_ID) ? result.BATCH_ID.array : undefined;\n var isQuantizedDraco = defined(decodedPositions) && defined(result.POSITION.data.quantization);\n var isOctEncodedDraco = defined(decodedNormals) && defined(result.NORMAL.data.quantization);\n if (isQuantizedDraco) {\n // Draco quantization range == quantized volume scale - size in meters of the quantized volume\n // Internal quantized range is the range of values of the quantized data, e.g. 255 for 8-bit, 1023 for 10-bit, etc\n var quantization = result.POSITION.data.quantization;\n var range = quantization.range;\n tile._quantizedVolumeScale = Cartesian3.fromElements(range, range, range);\n tile._quantizedVolumeOffset = Cartesian3.unpack(quantization.minValues);\n tile._quantizedRange = (1 << quantization.quantizationBits) - 1.0;\n tile._isQuantizedDraco = true;\n }\n if (isOctEncodedDraco) {\n tile._octEncodedRange = (1 << result.NORMAL.data.quantization.quantizationBits) - 1.0;\n tile._isOctEncodedDraco = true;\n }\n var styleableProperties = parsedContent.styleableProperties;\n var batchTableProperties = draco.batchTableProperties;\n for (var name in batchTableProperties) {\n if (batchTableProperties.hasOwnProperty(name)) {\n var property = result[name];\n if (!defined(styleableProperties)) {\n styleableProperties = {};\n }\n styleableProperties[name] = {\n typedArray : property.array,\n componentCount : property.data.componentsPerAttribute\n };\n }\n }\n parsedContent.positions = defaultValue(decodedPositions, parsedContent.positions);\n parsedContent.colors = defaultValue(defaultValue(decodedRgba, decodedRgb), parsedContent.colors);\n parsedContent.normals = defaultValue(decodedNormals, parsedContent.normals);\n parsedContent.batchIds = defaultValue(decodedBatchIds, parsedContent.batchIds);\n parsedContent.styleableProperties = styleableProperties;\n }).otherwise(function(error) {\n tile.decodingState = DECODING_STATE.FAILED;\n tile._readyPromise.reject(error);\n });\n }\n }\n return true;\n}\n*/\n"],"file":"parse-3d-tile-point-cloud.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/parsers/parse-3d-tile-point-cloud.ts"],"names":["DracoLoader","GL","Vector3","Tile3DFeatureTable","Tile3DBatchTable","parse3DTileHeaderSync","parse3DTileTablesHeaderSync","parse3DTileTablesSync","normalize3DTileColorAttribute","normalize3DTileNormalAttribute","normalize3DTilePositionAttribute","parsePointCloud3DTile","tile","arrayBuffer","byteOffset","options","context","initializeTile","featureTable","batchTable","parsePointCloudTables","parseDraco","parsePositions","parseColors","parseNormals","attributes","positions","colors","normals","batchIds","isQuantized","isTranslucent","isRGB565","isOctEncoded16P","featureTableJson","featureTableBinary","pointsLength","getGlobalProperty","Number","isFinite","Error","featuresLength","pointCount","rtcCenter","FLOAT","parseBatchIds","hasProperty","getPropertyArray","UNSIGNED_SHORT","quantizedRange","quantizedVolumeScale","quantizedVolumeOffset","UNSIGNED_BYTE","constantRGBA","batchFeatureLength","batchTableJson","batchTableBinary","dracoBuffer","dracoFeatureTableProperties","dracoBatchTableProperties","batchTableDraco","extensions","properties","featureTableDraco","getExtension","dracoByteOffset","dracoByteLength","byteLength","slice","hasPositions","POSITION","hasColors","RGB","RGBA","hasNormals","NORMAL","hasBatchIds","BATCH_ID","dracoData","buffer","featureTableProperties","batchTableProperties","dequantizeInShader","loadDraco","parse","dracoOptions","draco","extraAttributes","data","decodedPositions","value","decodedColors","COLOR_0","decodedNormals","decodedBatchIds","isQuantizedDraco","quantization","isOctEncodedDraco","range","minValues","quantizationBits","octEncodedRange","batchTableAttributes","attributeName","Object","keys","toLowerCase","undefined"],"mappings":"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","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 {DracoLoader} from '@loaders.gl/draco';\nimport {GL} from '@loaders.gl/math';\nimport {Vector3} from '@math.gl/core';\n\nimport Tile3DFeatureTable from '../classes/tile-3d-feature-table';\nimport Tile3DBatchTable from '../classes/tile-3d-batch-table';\nimport {parse3DTileHeaderSync} from './helpers/parse-3d-tile-header';\nimport {parse3DTileTablesHeaderSync, parse3DTileTablesSync} from './helpers/parse-3d-tile-tables';\nimport {normalize3DTileColorAttribute} from './helpers/normalize-3d-tile-colors';\nimport {normalize3DTileNormalAttribute} from './helpers/normalize-3d-tile-normals';\nimport {normalize3DTilePositionAttribute} from './helpers/normalize-3d-tile-positions';\n\nexport async function parsePointCloud3DTile(tile, arrayBuffer, byteOffset, options, context) {\n byteOffset = parse3DTileHeaderSync(tile, arrayBuffer, byteOffset);\n byteOffset = parse3DTileTablesHeaderSync(tile, arrayBuffer, byteOffset);\n byteOffset = parse3DTileTablesSync(tile, arrayBuffer, byteOffset, options);\n initializeTile(tile);\n\n const {featureTable, batchTable} = parsePointCloudTables(tile);\n\n await parseDraco(tile, featureTable, batchTable, options, context);\n\n parsePositions(tile, featureTable, options);\n parseColors(tile, featureTable, batchTable);\n parseNormals(tile, featureTable);\n\n return byteOffset;\n}\n\nfunction initializeTile(tile) {\n // Initialize point cloud tile defaults\n tile.attributes = {\n positions: null,\n colors: null,\n normals: null,\n batchIds: null\n };\n tile.isQuantized = false;\n tile.isTranslucent = false;\n tile.isRGB565 = false;\n tile.isOctEncoded16P = false;\n}\n\nfunction parsePointCloudTables(tile) {\n const featureTable = new Tile3DFeatureTable(tile.featureTableJson, tile.featureTableBinary);\n\n const pointsLength = featureTable.getGlobalProperty('POINTS_LENGTH');\n if (!Number.isFinite(pointsLength)) {\n throw new Error('POINTS_LENGTH must be defined');\n }\n featureTable.featuresLength = pointsLength;\n\n tile.featuresLength = pointsLength;\n tile.pointsLength = pointsLength;\n tile.pointCount = pointsLength;\n\n tile.rtcCenter = featureTable.getGlobalProperty('RTC_CENTER', GL.FLOAT, 3);\n\n const batchTable = parseBatchIds(tile, featureTable);\n\n return {featureTable, batchTable};\n}\n\nfunction parsePositions(tile, featureTable, options) {\n if (!tile.attributes.positions) {\n if (featureTable.hasProperty('POSITION')) {\n tile.attributes.positions = featureTable.getPropertyArray('POSITION', GL.FLOAT, 3);\n } else if (featureTable.hasProperty('POSITION_QUANTIZED')) {\n const positions = featureTable.getPropertyArray('POSITION_QUANTIZED', GL.UNSIGNED_SHORT, 3);\n\n tile.isQuantized = true;\n tile.quantizedRange = (1 << 16) - 1;\n\n tile.quantizedVolumeScale = featureTable.getGlobalProperty(\n 'QUANTIZED_VOLUME_SCALE',\n GL.FLOAT,\n 3\n );\n if (!tile.quantizedVolumeScale) {\n throw new Error('QUANTIZED_VOLUME_SCALE must be defined for quantized positions.');\n }\n\n tile.quantizedVolumeOffset = featureTable.getGlobalProperty(\n 'QUANTIZED_VOLUME_OFFSET',\n GL.FLOAT,\n 3\n );\n if (!tile.quantizedVolumeOffset) {\n throw new Error('QUANTIZED_VOLUME_OFFSET must be defined for quantized positions.');\n }\n\n tile.attributes.positions = normalize3DTilePositionAttribute(tile, positions, options);\n }\n }\n\n if (!tile.attributes.positions) {\n throw new Error('Either POSITION or POSITION_QUANTIZED must be defined.');\n }\n}\n\nfunction parseColors(tile, featureTable, batchTable) {\n if (!tile.attributes.colors) {\n let colors = null;\n if (featureTable.hasProperty('RGBA')) {\n colors = featureTable.getPropertyArray('RGBA', GL.UNSIGNED_BYTE, 4);\n tile.isTranslucent = true;\n } else if (featureTable.hasProperty('RGB')) {\n colors = featureTable.getPropertyArray('RGB', GL.UNSIGNED_BYTE, 3);\n } else if (featureTable.hasProperty('RGB565')) {\n colors = featureTable.getPropertyArray('RGB565', GL.UNSIGNED_SHORT, 1);\n tile.isRGB565 = true;\n }\n\n tile.attributes.colors = normalize3DTileColorAttribute(tile, colors, batchTable);\n }\n\n if (featureTable.hasProperty('CONSTANT_RGBA')) {\n tile.constantRGBA = featureTable.getGlobalProperty('CONSTANT_RGBA', GL.UNSIGNED_BYTE, 4);\n }\n}\n\nfunction parseNormals(tile, featureTable) {\n if (!tile.attributes.normals) {\n let normals = null;\n if (featureTable.hasProperty('NORMAL')) {\n normals = featureTable.getPropertyArray('NORMAL', GL.FLOAT, 3);\n } else if (featureTable.hasProperty('NORMAL_OCT16P')) {\n normals = featureTable.getPropertyArray('NORMAL_OCT16P', GL.UNSIGNED_BYTE, 2);\n tile.isOctEncoded16P = true;\n }\n\n tile.attributes.normals = normalize3DTileNormalAttribute(tile, normals);\n }\n}\n\nfunction parseBatchIds(tile, featureTable) {\n let batchTable: Tile3DBatchTable | null = null;\n if (!tile.batchIds && featureTable.hasProperty('BATCH_ID')) {\n tile.batchIds = featureTable.getPropertyArray('BATCH_ID', GL.UNSIGNED_SHORT, 1);\n\n if (tile.batchIds) {\n const batchFeatureLength = featureTable.getGlobalProperty('BATCH_LENGTH');\n if (!batchFeatureLength) {\n throw new Error('Global property: BATCH_LENGTH must be defined when BATCH_ID is defined.');\n }\n const {batchTableJson, batchTableBinary} = tile;\n batchTable = new Tile3DBatchTable(batchTableJson, batchTableBinary, batchFeatureLength);\n }\n }\n return batchTable;\n}\n\n// eslint-disable-next-line complexity\nasync function parseDraco(tile, featureTable, batchTable, options, context) {\n let dracoBuffer;\n let dracoFeatureTableProperties;\n let dracoBatchTableProperties;\n const batchTableDraco =\n tile.batchTableJson &&\n tile.batchTableJson.extensions &&\n tile.batchTableJson.extensions['3DTILES_draco_point_compression'];\n if (batchTableDraco) {\n dracoBatchTableProperties = batchTableDraco.properties;\n }\n\n const featureTableDraco = featureTable.getExtension('3DTILES_draco_point_compression');\n if (featureTableDraco) {\n dracoFeatureTableProperties = featureTableDraco.properties;\n const dracoByteOffset = featureTableDraco.byteOffset;\n const dracoByteLength = featureTableDraco.byteLength;\n if (!dracoFeatureTableProperties || !Number.isFinite(dracoByteOffset) || !dracoByteLength) {\n throw new Error('Draco properties, byteOffset, and byteLength must be defined');\n }\n\n dracoBuffer = tile.featureTableBinary.slice(dracoByteOffset, dracoByteOffset + dracoByteLength);\n\n tile.hasPositions = Number.isFinite(dracoFeatureTableProperties.POSITION);\n tile.hasColors =\n Number.isFinite(dracoFeatureTableProperties.RGB) ||\n Number.isFinite(dracoFeatureTableProperties.RGBA);\n tile.hasNormals = Number.isFinite(dracoFeatureTableProperties.NORMAL);\n tile.hasBatchIds = Number.isFinite(dracoFeatureTableProperties.BATCH_ID);\n tile.isTranslucent = Number.isFinite(dracoFeatureTableProperties.RGBA);\n }\n\n if (!dracoBuffer) {\n return true;\n }\n\n const dracoData = {\n buffer: dracoBuffer,\n properties: {...dracoFeatureTableProperties, ...dracoBatchTableProperties},\n featureTableProperties: dracoFeatureTableProperties,\n batchTableProperties: dracoBatchTableProperties,\n dequantizeInShader: false\n };\n\n return await loadDraco(tile, dracoData, options, context);\n}\n\n// eslint-disable-next-line complexity, max-statements\nexport async function loadDraco(tile, dracoData, options, context) {\n const {parse} = context;\n const dracoOptions = {\n ...options,\n draco: {\n ...options.draco,\n extraAttributes: dracoData.batchTableProperties || {}\n }\n };\n\n // The entire tileset might be included, too expensive to serialize\n delete dracoOptions['3d-tiles'];\n\n const data = await parse(dracoData.buffer, DracoLoader, dracoOptions);\n\n const decodedPositions = data.attributes.POSITION && data.attributes.POSITION.value;\n const decodedColors = data.attributes.COLOR_0 && data.attributes.COLOR_0.value;\n const decodedNormals = data.attributes.NORMAL && data.attributes.NORMAL.value;\n const decodedBatchIds = data.attributes.BATCH_ID && data.attributes.BATCH_ID.value;\n const isQuantizedDraco = decodedPositions && data.attributes.POSITION.value.quantization;\n const isOctEncodedDraco = decodedNormals && data.attributes.NORMAL.value.quantization;\n if (isQuantizedDraco) {\n // Draco quantization range == quantized volume scale - size in meters of the quantized volume\n // Internal quantized range is the range of values of the quantized data, e.g. 255 for 8-bit, 1023 for 10-bit, etc\n const quantization = data.POSITION.data.quantization;\n const range = quantization.range;\n tile.quantizedVolumeScale = new Vector3(range, range, range);\n tile.quantizedVolumeOffset = new Vector3(quantization.minValues);\n tile.quantizedRange = (1 << quantization.quantizationBits) - 1.0;\n tile.isQuantizedDraco = true;\n }\n if (isOctEncodedDraco) {\n tile.octEncodedRange = (1 << data.NORMAL.data.quantization.quantizationBits) - 1.0;\n tile.isOctEncodedDraco = true;\n }\n\n // Extra batch table attributes\n const batchTableAttributes = {};\n if (dracoData.batchTableProperties) {\n for (const attributeName of Object.keys(dracoData.batchTableProperties)) {\n if (data.attributes[attributeName] && data.attributes[attributeName].value) {\n batchTableAttributes[attributeName.toLowerCase()] = data.attributes[attributeName].value;\n }\n }\n }\n\n tile.attributes = {\n positions: decodedPositions,\n colors: normalize3DTileColorAttribute(tile, decodedColors, undefined),\n normals: decodedNormals,\n batchIds: decodedBatchIds,\n ...batchTableAttributes\n };\n}\n\n// TODO - this is the remaining code from Cesium's parser\n/*\n const batchTable = new Tile3DBatchTable(tile);\n\n // parseDracoBuffer(tile, featureTable, batchTable);\n\n if (!tile.attributes.positions) {\n throw new Error('Either POSITION or POSITION_QUANTIZED must be defined.');\n }\n}\n/*\n\n if (!tile.attributes.positions) {\n if (featureTable.hasProperty('POSITION')) {\n tile.attributes.positions = featureTable.getPropertyArray('POSITION', GL.FLOAT, 3);\n } else if (featureTable.hasProperty('POSITION_QUANTIZED')) {\n tile.attributes.positions = featureTable.getPropertyArray('POSITION_QUANTIZED', GL.UNSIGNED_SHORT, 3);\n\n\n if (!tile.colors) {\n if (featureTable.hasProperty('RGBA')) {\n tile.colors = featureTable.getPropertyArray('RGBA', GL.UNSIGNED_BYTE, 4);\n tile.isTranslucent = true;\n } else if (featureTable.hasProperty('RGB')) {\n tile.colors = featureTable.getPropertyArray('RGB', GL.UNSIGNED_BYTE, 3);\n } else if (featureTable.hasPropertry('RGB565')) {\n tile.colors = featureTable.getPropertyArray('RGB565', GL.UNSIGNED_SHORT, 1);\n tile.isRGB565 = true;\n }\n }\n\n if (!tile.attributes.normals) {\n if (featureTable.getPropertry('NORMAL')) {\n tile.attributes.normals = featureTable.getPropertyArray('NORMAL', GL.FLOAT, 3);\n } else if (featureTable.getProperty('NORMAL_OCT16P')) {\n tile.attributes.normals = featureTable.getPropertyArray('NORMAL_OCT16P', GL.UNSIGNED_BYTE, 2);\n tile.isOctEncoded16P = true;\n }\n }\n\n if (!tile.batchIds) {\n if (featureTable.hasProperty('BATCH_ID')) {\n tile.batchIds = featureTable.getPropertyArray('BATCH_ID', GL.UNSIGNED_SHORT, 1);\n }\n }\n\n if (!tile.attributes.positions) {\n throw new Error('Either POSITION or POSITION_QUANTIZED must be defined.');\n }\n\n if (featureTable.getPropertry('CONSTANT_RGBA')) {\n tile.constantRGBA = featureTable.getGlobalProperty('CONSTANT_RGBA', GL.UNSIGNED_BYTE, 4);\n }\n\n if (tile.batchIds) {\n const batchLength = featureTable.getGlobalProperty('BATCH_LENGTH');\n if (!defined(batchLength)) {\n throw new Error('Global property: BATCH_LENGTH must be defined when BATCH_ID is defined.');\n }\n\n if (defined(batchTableBinary)) {\n // Copy the batchTableBinary section and let the underlying ArrayBuffer be freed\n batchTableBinary = new Uint8Array(batchTableBinary);\n }\n\n if (defined(pointCloud._batchTableLoaded)) {\n pointCloud._batchTableLoaded(batchLength, batchTableJson, batchTableBinary);\n }\n }\n\n // If points are not batched and there are per-point properties, use these properties for styling purposes\n var styleableProperties;\n if (!hasBatchIds && defined(batchTableBinary)) {\n tile.styleableProperties = Cesium3DTileBatchTable.getBinaryProperties(\n pointsLength,\n batchTableJson,\n batchTableBinary\n );\n }\n\n tile.draco = draco;\n}\n\n// Separate parsing and decoding of Draco\nexport function parseDracoBuffer(tile, featureTable, batchTable) {\n let dracoBuffer;\n let dracoFeatureTableProperties;\n let dracoBatchTableProperties;\n\n const batchTableDraco = batchTable.getExtension('3DTILES_draco_point_compression');\n if (batchTableDraco) {\n dracoBatchTableProperties = batchTableDraco.properties;\n }\n\n const featureTableDraco = featureTable.getExtension('3DTILES_draco_point_compression');\n if (featureTableDraco) {\n dracoFeatureTableProperties = featureTableDraco.properties;\n const dracoByteOffset = featureTableDraco.byteOffset;\n const dracoByteLength = featureTableDraco.byteLength;\n if (!dracoFeatureTableProperties || !dracoByteOffset || !dracoByteLength) {\n throw new Error('Draco properties, byteOffset, and byteLength must be defined');\n }\n\n dracoBuffer = arraySlice(\n featureTableBinary,\n dracoByteOffset,\n dracoByteOffset + dracoByteLength\n );\n tile.hasPositions = dracoFeatureTableProperties.POSITION;\n tile.hasColors = dracoFeatureTableProperties.RGB || dracoFeatureTableProperties.RGBA;\n tile.hasNormals = dracoFeatureTableProperties.NORMAL;\n tile.hasBatchIds = dracoFeatureTableProperties.BATCH_ID;\n tile.isTranslucent = dracoFeatureTableProperties.RGBA;\n }\n\n if (dracoBuffer) {\n tile.draco = {\n buffer: dracoBuffer,\n properties: {...dracoFeatureTableProperties, ...dracoBatchTableProperties},\n featureTableProperties: dracoFeatureTableProperties,\n batchTableProperties: dracoBatchTableProperties,\n dequantizeInShader: false\n };\n\n tile.decodingState = DECODING_STATE.NEEDS_DECODE;\n }\n}\n\n/*\nfunction decodeDraco(tile, context) {\n if (tile.decodingState === DECODING_STATE.READY) {\n return false;\n }\n if (tile.decodingState === DECODING_STATE.NEEDS_DECODE) {\n var parsedContent = tile._parsedContent;\n var draco = parsedContent.draco;\n var decodePromise = DracoLoader.decodePointCloud(draco, context);\n if (defined(decodePromise)) {\n tile.decodingState = DECODING_STATE.DECODING;\n decodePromise.then(function(result) {\n tile.decodingState = DECODING_STATE.READY;\n var decodedPositions = defined(result.POSITION) ? result.POSITION.array : undefined;\n var decodedRgb = defined(result.RGB) ? result.RGB.array : undefined;\n var decodedRgba = defined(result.RGBA) ? result.RGBA.array : undefined;\n var decodedNormals = defined(result.NORMAL) ? result.NORMAL.array : undefined;\n var decodedBatchIds = defined(result.BATCH_ID) ? result.BATCH_ID.array : undefined;\n var isQuantizedDraco = defined(decodedPositions) && defined(result.POSITION.data.quantization);\n var isOctEncodedDraco = defined(decodedNormals) && defined(result.NORMAL.data.quantization);\n if (isQuantizedDraco) {\n // Draco quantization range == quantized volume scale - size in meters of the quantized volume\n // Internal quantized range is the range of values of the quantized data, e.g. 255 for 8-bit, 1023 for 10-bit, etc\n var quantization = result.POSITION.data.quantization;\n var range = quantization.range;\n tile._quantizedVolumeScale = Cartesian3.fromElements(range, range, range);\n tile._quantizedVolumeOffset = Cartesian3.unpack(quantization.minValues);\n tile._quantizedRange = (1 << quantization.quantizationBits) - 1.0;\n tile._isQuantizedDraco = true;\n }\n if (isOctEncodedDraco) {\n tile._octEncodedRange = (1 << result.NORMAL.data.quantization.quantizationBits) - 1.0;\n tile._isOctEncodedDraco = true;\n }\n var styleableProperties = parsedContent.styleableProperties;\n var batchTableProperties = draco.batchTableProperties;\n for (var name in batchTableProperties) {\n if (batchTableProperties.hasOwnProperty(name)) {\n var property = result[name];\n if (!defined(styleableProperties)) {\n styleableProperties = {};\n }\n styleableProperties[name] = {\n typedArray : property.array,\n componentCount : property.data.componentsPerAttribute\n };\n }\n }\n parsedContent.positions = defaultValue(decodedPositions, parsedContent.positions);\n parsedContent.colors = defaultValue(defaultValue(decodedRgba, decodedRgb), parsedContent.colors);\n parsedContent.normals = defaultValue(decodedNormals, parsedContent.normals);\n parsedContent.batchIds = defaultValue(decodedBatchIds, parsedContent.batchIds);\n parsedContent.styleableProperties = styleableProperties;\n }).otherwise(function(error) {\n tile.decodingState = DECODING_STATE.FAILED;\n tile._readyPromise.reject(error);\n });\n }\n }\n return true;\n}\n*/\n"],"file":"parse-3d-tile-point-cloud.js"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-3d-tile.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/parse-3d-tile.ts"],"names":[],"mappings":"AAaA,wBAAsB,WAAW,CAAC,WAAW,KAAA,EAAE,UAAU,oBAAI,EAAE,OAAO,KAAA,EAAE,OAAO,KAAA,EAAE,IAAI,KAAK,gBAmCzF"}
|
|
@@ -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.
|
|
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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/version.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,OAAO,KAA8D,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const VERSION = typeof "4.0.0-alpha.
|
|
1
|
+
export const VERSION = typeof "4.0.0-alpha.5" !== 'undefined' ? "4.0.0-alpha.5" : 'latest';
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/utils/version.
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/utils/version.ts"],"names":["VERSION"],"mappings":"AAGA,OAAO,MAAMA,OAAO,GAAG,2BAAuB,WAAvB,qBAAmD,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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tile-3d-subtree-loader.d.ts","sourceRoot":"","sources":["../src/tile-3d-subtree-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,0BAA0B,CAAC;AAI/D;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,gBAUjC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import parse3DTilesSubtree from './lib/parsers/helpers/parse-3d-tile-subtree';
|
|
2
|
+
import { VERSION } from './lib/utils/version';
|
|
3
|
+
export const Tile3DSubtreeLoader = {
|
|
4
|
+
id: '3d-tiles-subtree',
|
|
5
|
+
name: '3D Tiles Subtree',
|
|
6
|
+
module: '3d-tiles',
|
|
7
|
+
version: VERSION,
|
|
8
|
+
extensions: ['subtree'],
|
|
9
|
+
mimeTypes: ['application/octet-stream'],
|
|
10
|
+
tests: ['subtree'],
|
|
11
|
+
parse: parse3DTilesSubtree,
|
|
12
|
+
options: {}
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=tile-3d-subtree-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tile-3d-subtree-loader.ts"],"names":["parse3DTilesSubtree","VERSION","Tile3DSubtreeLoader","id","name","module","version","extensions","mimeTypes","tests","parse","options"],"mappings":"AACA,OAAOA,mBAAP,MAAgC,6CAAhC;AACA,SAAQC,OAAR,QAAsB,qBAAtB;AAMA,OAAO,MAAMC,mBAAqC,GAAG;AACnDC,EAAAA,EAAE,EAAE,kBAD+C;AAEnDC,EAAAA,IAAI,EAAE,kBAF6C;AAGnDC,EAAAA,MAAM,EAAE,UAH2C;AAInDC,EAAAA,OAAO,EAAEL,OAJ0C;AAKnDM,EAAAA,UAAU,EAAE,CAAC,SAAD,CALuC;AAMnDC,EAAAA,SAAS,EAAE,CAAC,0BAAD,CANwC;AAOnDC,EAAAA,KAAK,EAAE,CAAC,SAAD,CAP4C;AAQnDC,EAAAA,KAAK,EAAEV,mBAR4C;AASnDW,EAAAA,OAAO,EAAE;AAT0C,CAA9C","sourcesContent":["import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport parse3DTilesSubtree from './lib/parsers/helpers/parse-3d-tile-subtree';\nimport {VERSION} from './lib/utils/version';\n\n/**\n * Loader for 3D Tiles Subtree\n *\n */\nexport const Tile3DSubtreeLoader: LoaderWithParser = {\n id: '3d-tiles-subtree',\n name: '3D Tiles Subtree',\n module: '3d-tiles',\n version: VERSION,\n extensions: ['subtree'],\n mimeTypes: ['application/octet-stream'],\n tests: ['subtree'],\n parse: parse3DTilesSubtree,\n options: {}\n};\n"],"file":"tile-3d-subtree-loader.js"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tile-3d-writer.d.ts","sourceRoot":"","sources":["../src/tile-3d-writer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,0BAA0B,CAAC;AAIrD;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,MAY1B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tiles-3d-loader.d.ts","sourceRoot":"","sources":["../src/tiles-3d-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,0BAA0B,CAAC;AAY/D;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,gBAiB3B,CAAC"}
|
package/dist/tiles-3d-loader.js
CHANGED
|
@@ -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":"AACA,SAAQA,IAAR,QAAmB,0BAAnB;AACA,SAAQC,YAAR,EAAsBC,eAAtB,QAA4C,mBAA5C;AACA,SAAQC,OAAR,QAAsB,qBAAtB;AACA,SAAQC,WAAR,QAA0B,6BAA1B;AACA,
|
|
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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type { GLTFObject } from '@loaders.gl/gltf';
|
|
2
|
+
import { Matrix4, Vector3 } from '@math.gl/core';
|
|
3
|
+
export declare type BatchTableJson = {
|
|
4
|
+
[key: string]: any[];
|
|
5
|
+
};
|
|
6
|
+
export declare type B3DMContent = {
|
|
7
|
+
batchTableJson?: BatchTableJson;
|
|
8
|
+
byteLength: number;
|
|
9
|
+
byteOffset: number;
|
|
10
|
+
cartesianModelMatrix: Matrix4;
|
|
11
|
+
cartesianOrigin: Vector3;
|
|
12
|
+
cartographicModelMatrix: Matrix4;
|
|
13
|
+
cartographicOrigin: Vector3;
|
|
14
|
+
featureIds?: number[] | null;
|
|
15
|
+
featureTableBinary?: Uint8Array;
|
|
16
|
+
featureTableJson?: BatchTableJson;
|
|
17
|
+
gltf?: GLTFObject;
|
|
18
|
+
gltfUpAxis: string;
|
|
19
|
+
header: GLTFHeader;
|
|
20
|
+
magic: number;
|
|
21
|
+
modelMatrix: Matrix4;
|
|
22
|
+
rotateYtoZ: boolean;
|
|
23
|
+
rtcCenter: [number, number, number];
|
|
24
|
+
type: string;
|
|
25
|
+
version: number;
|
|
26
|
+
};
|
|
27
|
+
export declare type GLTFHeader = {
|
|
28
|
+
batchLength?: number;
|
|
29
|
+
batchTableBinaryByteLength: number;
|
|
30
|
+
batchTableJsonByteLength: number;
|
|
31
|
+
featureTableBinaryByteLength: number;
|
|
32
|
+
featureTableJsonByteLength: number;
|
|
33
|
+
};
|
|
34
|
+
export declare type Node3D = {
|
|
35
|
+
boundingVolume: BoundingVolume;
|
|
36
|
+
children: any;
|
|
37
|
+
geometricError: number;
|
|
38
|
+
content?: {
|
|
39
|
+
uri: string;
|
|
40
|
+
boundingVolume: BoundingVolume;
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
export declare type BoundingVolume = {
|
|
44
|
+
box?: number[];
|
|
45
|
+
sphere?: number[];
|
|
46
|
+
region?: number[];
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* 3DTILES_implicit_tiling types
|
|
50
|
+
* Spec - https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_implicit_tiling#subtree-file-format
|
|
51
|
+
*/
|
|
52
|
+
export declare type Subtree = {
|
|
53
|
+
buffers: Buffer[];
|
|
54
|
+
bufferViews: BufferView[];
|
|
55
|
+
tileAvailability: Availability;
|
|
56
|
+
contentAvailability: Availability;
|
|
57
|
+
childSubtreeAvailability: Availability;
|
|
58
|
+
};
|
|
59
|
+
export declare type Availability = {
|
|
60
|
+
constant?: 0 | 1;
|
|
61
|
+
bufferView?: number;
|
|
62
|
+
explicitBitstream?: ExplicitBitstream;
|
|
63
|
+
};
|
|
64
|
+
export declare type ExplicitBitstream = Uint8Array;
|
|
65
|
+
/**
|
|
66
|
+
* Spec - https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_implicit_tiling#subdivision-scheme
|
|
67
|
+
*/
|
|
68
|
+
export declare type SubdivisionScheme = 'QUADTREE' | 'OCTREE';
|
|
69
|
+
declare type Buffer = {
|
|
70
|
+
name: string;
|
|
71
|
+
uri?: string;
|
|
72
|
+
byteLength: number;
|
|
73
|
+
};
|
|
74
|
+
declare type BufferView = {
|
|
75
|
+
buffer: number;
|
|
76
|
+
byteOffset: number;
|
|
77
|
+
byteLength: number;
|
|
78
|
+
};
|
|
79
|
+
export {};
|
|
80
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAC,OAAO,EAAE,OAAO,EAAC,MAAM,eAAe,CAAC;AAE/C,oBAAY,cAAc,GAAG;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,CAAC;CACtB,CAAC;AAEF,oBAAY,WAAW,GAAG;IACxB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,eAAe,EAAE,OAAO,CAAC;IACzB,uBAAuB,EAAE,OAAO,CAAC;IACjC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC7B,kBAAkB,CAAC,EAAE,UAAU,CAAC;IAChC,gBAAgB,CAAC,EAAE,cAAc,CAAC;IAClC,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,oBAAY,UAAU,GAAG;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0BAA0B,EAAE,MAAM,CAAC;IACnC,wBAAwB,EAAE,MAAM,CAAC;IACjC,4BAA4B,EAAE,MAAM,CAAC;IACrC,0BAA0B,EAAE,MAAM,CAAC;CACpC,CAAC;AAEF,oBAAY,MAAM,GAAG;IACnB,cAAc,EAAE,cAAc,CAAC;IAC/B,QAAQ,EAAE,GAAG,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE;QACR,GAAG,EAAE,MAAM,CAAC;QACZ,cAAc,EAAE,cAAc,CAAC;KAChC,CAAC;CACH,CAAC;AAEF,oBAAY,cAAc,GAAG;IAC3B,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF;;;GAGG;AACH,oBAAY,OAAO,GAAG;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,gBAAgB,EAAE,YAAY,CAAC;IAC/B,mBAAmB,EAAE,YAAY,CAAC;IAClC,wBAAwB,EAAE,YAAY,CAAC;CACxC,CAAC;AAEF,oBAAY,YAAY,GAAG;IACzB,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC,CAAC;AAEF,oBAAY,iBAAiB,GAAG,UAAU,CAAC;AAE3C;;GAEG;AACH,oBAAY,iBAAiB,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEtD,aAAK,MAAM,GAAG;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,aAAK,UAAU,GAAG;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC"}
|
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.5",
|
|
4
4
|
"description": "3D Tiles, an open standard for streaming massive heterogeneous 3D geospatial datasets.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"point cloud",
|
|
21
21
|
"pointcloud"
|
|
22
22
|
],
|
|
23
|
-
"types": "
|
|
23
|
+
"types": "dist/index.d.ts",
|
|
24
24
|
"main": "dist/index.js",
|
|
25
25
|
"module": "dist/index.js",
|
|
26
26
|
"sideEffects": false,
|
|
@@ -31,19 +31,19 @@
|
|
|
31
31
|
],
|
|
32
32
|
"scripts": {
|
|
33
33
|
"pre-build": "npm run build-bundle",
|
|
34
|
-
"build-bundle": "esbuild src/bundle.ts --bundle --outfile=dist/
|
|
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.5",
|
|
38
|
+
"@loaders.gl/gltf": "4.0.0-alpha.5",
|
|
39
|
+
"@loaders.gl/loader-utils": "4.0.0-alpha.5",
|
|
40
|
+
"@loaders.gl/math": "4.0.0-alpha.5",
|
|
41
|
+
"@loaders.gl/tiles": "4.0.0-alpha.5",
|
|
42
42
|
"@math.gl/core": "^3.5.1",
|
|
43
43
|
"@math.gl/geospatial": "^3.5.1"
|
|
44
44
|
},
|
|
45
45
|
"peerDependencies": {
|
|
46
|
-
"@loaders.gl/core": "
|
|
46
|
+
"@loaders.gl/core": "4.0.0-alpha.4"
|
|
47
47
|
},
|
|
48
|
-
"gitHead": "
|
|
48
|
+
"gitHead": "7a71a54bdf1ddf985cc3af3db90b82e7fa97d025"
|
|
49
49
|
}
|
package/src/index.ts
CHANGED
|
File without changes
|
package/src/lib/classes/{tile-3d-batch-table-hierarchy.js → tile-3d-batch-table-hierarchy.ts}
RENAMED
|
File without changes
|
|
@@ -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(
|
|
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) {
|
package/src/lib/encoders/{encode-3d-tile-batched-model.js → encode-3d-tile-batched-model.ts}
RENAMED
|
File without changes
|
|
File without changes
|
package/src/lib/encoders/{encode-3d-tile-instanced-model.js → encode-3d-tile-instanced-model.ts}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -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;
|
package/src/lib/parsers/helpers/{normalize-3d-tile-normals.js → normalize-3d-tile-normals.ts}
RENAMED
|
File without changes
|
package/src/lib/parsers/helpers/{normalize-3d-tile-positions.js → normalize-3d-tile-positions.ts}
RENAMED
|
File without changes
|