UNPKG

@loaders.gl/3d-tiles

Version:

3D Tiles, an open standard for streaming massive heterogeneous 3D geospatial datasets.

39 lines 2.26 kB
// loaders.gl // SPDX-License-Identifier: MIT AND Apache-2.0 // Copyright vis.gl contributors // This file is derived from the Cesium code base under Apache 2 license // See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md import { MAGIC_ARRAY } from "../constants.js"; import { encode3DTileHeader, encode3DTileByteLength } from "./helpers/encode-3d-tile-header.js"; import { padStringToByteAlignment, copyStringToDataView, copyBinaryToDataView } from '@loaders.gl/loader-utils'; const DEFAULT_FEATURE_TABLE_JSON = { POINTS_LENGTH: 1, POSITIONS: { byteOffset: 0 } }; export function encodePointCloud3DTile(tile, dataView, byteOffset, options) { const { featureTableJson = DEFAULT_FEATURE_TABLE_JSON } = tile; let featureTableJsonString = JSON.stringify(featureTableJson); featureTableJsonString = padStringToByteAlignment(featureTableJsonString, 4); const { featureTableJsonByteLength = featureTableJsonString.length } = tile; const featureTableBinary = new ArrayBuffer(12); // Enough space to hold 3 floats const featureTableBinaryByteLength = featureTableBinary.byteLength; // Add default magic for this tile type tile = { magic: MAGIC_ARRAY.POINT_CLOUD, ...tile }; const byteOffsetStart = byteOffset; byteOffset += encode3DTileHeader(tile, dataView, 0); if (dataView) { dataView.setUint32(byteOffset + 0, featureTableJsonByteLength, true); // featureTableJsonByteLength dataView.setUint32(byteOffset + 4, featureTableBinaryByteLength, true); // featureTableBinaryByteLength dataView.setUint32(byteOffset + 8, 0, true); // batchTableJsonByteLength dataView.setUint32(byteOffset + 12, 0, true); // batchTableBinaryByteLength } byteOffset += 16; byteOffset += copyStringToDataView(dataView, byteOffset, featureTableJsonString, featureTableJsonByteLength); byteOffset += copyBinaryToDataView(dataView, byteOffset, featureTableBinary, featureTableBinaryByteLength); // Go "back" and rewrite the tile's `byteLength` now that we know the value encode3DTileByteLength(dataView, byteOffsetStart, byteOffset - byteOffsetStart); return byteOffset; } //# sourceMappingURL=encode-3d-tile-point-cloud.js.map