@itwin/core-common
Version:
iTwin.js components common to frontend and backend
113 lines • 4.46 kB
JavaScript
/*---------------------------------------------------------------------------------------------
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
* See LICENSE.md in the project root for license terms and full copyright notice.
*--------------------------------------------------------------------------------------------*/
/** @packageDocumentation
* @module Tile
*/
import { BentleyError } from "@itwin/core-bentley";
import { Point3d } from "@itwin/core-geometry";
/** Type codes for various tile formats. Often these are embedded as 32-bit 'magic numbers' in a binary stream to indicate the format.
* @internal
*/
export var TileFormat;
(function (TileFormat) {
TileFormat[TileFormat["Unknown"] = 0] = "Unknown";
TileFormat[TileFormat["B3dm"] = 1835283298] = "B3dm";
TileFormat[TileFormat["Gltf"] = 1179937895] = "Gltf";
TileFormat[TileFormat["Pnts"] = 1937010288] = "Pnts";
TileFormat[TileFormat["IModel"] = 1818512745] = "IModel";
TileFormat[TileFormat["Cmpt"] = 1953525091] = "Cmpt";
TileFormat[TileFormat["I3dm"] = 1835283305] = "I3dm";
TileFormat[TileFormat["A3x"] = 5780289] = "A3x";
})(TileFormat || (TileFormat = {}));
/** Given a magic number, return whether it identifies a known tile format.
* @internal
*/
export function isKnownTileFormat(format) {
switch (format) {
case TileFormat.Unknown:
case TileFormat.B3dm:
case TileFormat.Gltf:
case TileFormat.IModel:
case TileFormat.Pnts:
case TileFormat.Cmpt:
case TileFormat.I3dm:
case TileFormat.A3x:
return true;
default:
return false;
}
}
/** Given a magic number, attempt to convert it to a known TileFormat.
* @internal
*/
export function tileFormatFromNumber(formatNumber) {
const format = formatNumber;
return isKnownTileFormat(format) ? format : TileFormat.Unknown;
}
/** Status codes for tile reading operations
* @internal
*/
export var TileReadStatus;
(function (TileReadStatus) {
TileReadStatus[TileReadStatus["Success"] = 0] = "Success";
TileReadStatus[TileReadStatus["InvalidTileData"] = 1] = "InvalidTileData";
TileReadStatus[TileReadStatus["InvalidHeader"] = 2] = "InvalidHeader";
TileReadStatus[TileReadStatus["InvalidBatchTable"] = 3] = "InvalidBatchTable";
TileReadStatus[TileReadStatus["InvalidScene"] = 4] = "InvalidScene";
TileReadStatus[TileReadStatus["InvalidFeatureTable"] = 5] = "InvalidFeatureTable";
TileReadStatus[TileReadStatus["NewerMajorVersion"] = 6] = "NewerMajorVersion";
TileReadStatus[TileReadStatus["Canceled"] = 7] = "Canceled";
})(TileReadStatus || (TileReadStatus = {}));
const readStatusMessages = [
"Success",
"Invalid tile data",
"Invalid tile header",
"Invalid batch table",
"Invalid scene",
"Invalid feature table",
"Major version too new",
"Canceled",
];
/** Exception thrown by functions that deserialize tiles.
* @internal
*/
export class TileReadError extends BentleyError {
constructor(status, message) {
if (undefined === message)
message = readStatusMessages[status];
super(status, message);
}
get wasCanceled() { return TileReadStatus.Canceled === this.errorNumber; }
}
/** The base header preceding tile data of most formats, identifying the tile format and version of that format.
* Specific tile formats may define their own headers as sub-types of this Header, appending
* additional format-specific data.
* @internal
*/
export class TileHeader {
_format;
version;
/** Construct a Header from the binary data at the supplied stream's current read position */
constructor(stream) {
this._format = tileFormatFromNumber(stream.readUint32());
this.version = stream.readUint32();
}
get format() { return this._format; }
/** Mark the header as representing invalid data */
invalidate() {
this._format = TileFormat.Unknown;
}
}
/** Read 3 64-bit floating point numbers at the byte stream's current read position, advance by 24 bytes, and return a Point3d constructed from the 3 numbers.
* @internal
*/
export function nextPoint3d64FromByteStream(stream, result) {
const x = stream.readFloat64(), y = stream.readFloat64(), z = stream.readFloat64();
if (undefined === result)
return new Point3d(x, y, z);
result.set(x, y, z);
return result;
}
//# sourceMappingURL=TileIO.js.map