import DeveloperError from "../Core/DeveloperError.js";
/**
* The content of a tile in a {@link Cesium3DTileset}.
*
* Derived classes of this interface provide access to individual features in the tile.
* Access derived objects through {@link Cesium3DTile#content}.
*
*
* This type describes an interface and is not intended to be instantiated directly.
*
*
* @alias Cesium3DTileContent
* @constructor
*/
function Cesium3DTileContent() {
/**
* Gets or sets if any feature's property changed. Used to
* optimized applying a style when a feature's property changed.
*
* This is used to implement the Cesium3DTileContent
interface, but is
* not part of the public Cesium API.
*
*
* @type {Boolean}
*
* @private
*/
this.featurePropertiesDirty = false;
}
Object.defineProperties(Cesium3DTileContent.prototype, {
/**
* Gets the number of features in the tile.
*
* @memberof Cesium3DTileContent.prototype
*
* @type {Number}
* @readonly
*/
featuresLength: {
// eslint-disable-next-line getter-return
get: function () {
DeveloperError.throwInstantiationError();
},
},
/**
* Gets the number of points in the tile.
*
* Only applicable for tiles with Point Cloud content. This is different than {@link Cesium3DTileContent#featuresLength} which
* equals the number of groups of points as distinguished by the BATCH_ID
feature table semantic.
*
*
* @see {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/TileFormats/PointCloud#batched-points}
*
* @memberof Cesium3DTileContent.prototype
*
* @type {Number}
* @readonly
*/
pointsLength: {
// eslint-disable-next-line getter-return
get: function () {
DeveloperError.throwInstantiationError();
},
},
/**
* Gets the number of triangles in the tile.
*
* @memberof Cesium3DTileContent.prototype
*
* @type {Number}
* @readonly
*/
trianglesLength: {
// eslint-disable-next-line getter-return
get: function () {
DeveloperError.throwInstantiationError();
},
},
/**
* Gets the tile's geometry memory in bytes.
*
* @memberof Cesium3DTileContent.prototype
*
* @type {Number}
* @readonly
*/
geometryByteLength: {
// eslint-disable-next-line getter-return
get: function () {
DeveloperError.throwInstantiationError();
},
},
/**
* Gets the tile's texture memory in bytes.
*
* @memberof Cesium3DTileContent.prototype
*
* @type {Number}
* @readonly
*/
texturesByteLength: {
// eslint-disable-next-line getter-return
get: function () {
DeveloperError.throwInstantiationError();
},
},
/**
* Gets the amount of memory used by the batch table textures, in bytes.
*
* @memberof Cesium3DTileContent.prototype
*
* @type {Number}
* @readonly
*/
batchTableByteLength: {
// eslint-disable-next-line getter-return
get: function () {
DeveloperError.throwInstantiationError();
},
},
/**
* Gets the array of {@link Cesium3DTileContent} objects for contents that contain other contents, such as composite tiles. The inner contents may in turn have inner contents, such as a composite tile that contains a composite tile.
*
* @see {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/TileFormats/Composite|Composite specification}
*
* @memberof Cesium3DTileContent.prototype
*
* @type {Array}
* @readonly
*/
innerContents: {
// eslint-disable-next-line getter-return
get: function () {
DeveloperError.throwInstantiationError();
},
},
/**
* Gets the promise that will be resolved when the tile's content is ready to render.
*
* @memberof Cesium3DTileContent.prototype
*
* @type {Promise.}
* @readonly
*/
readyPromise: {
// eslint-disable-next-line getter-return
get: function () {
DeveloperError.throwInstantiationError();
},
},
/**
* Gets the tileset for this tile.
*
* @memberof Cesium3DTileContent.prototype
*
* @type {Cesium3DTileset}
* @readonly
*/
tileset: {
// eslint-disable-next-line getter-return
get: function () {
DeveloperError.throwInstantiationError();
},
},
/**
* Gets the tile containing this content.
*
* @memberof Cesium3DTileContent.prototype
*
* @type {Cesium3DTile}
* @readonly
*/
tile: {
// eslint-disable-next-line getter-return
get: function () {
DeveloperError.throwInstantiationError();
},
},
/**
* Gets the url of the tile's content.
* @memberof Cesium3DTileContent.prototype
*
* @type {String}
* @readonly
*/
url: {
// eslint-disable-next-line getter-return
get: function () {
DeveloperError.throwInstantiationError();
},
},
/**
* Gets the batch table for this content.
*
* This is used to implement the Cesium3DTileContent
interface, but is
* not part of the public Cesium API.
*
*
* @type {Cesium3DTileBatchTable}
* @readonly
*
* @private
*/
batchTable: {
// eslint-disable-next-line getter-return
get: function () {
DeveloperError.throwInstantiationError();
},
},
/**
* Gets the metadata for this content, whether it is available explicitly or via
* implicit tiling. If there is no metadata, this property should be undefined.
*
* This is used to implement the Cesium3DTileContent
interface, but is
* not part of the public Cesium API.
*
*
* @type {ImplicitMetadataView|undefined}
*
* @private
* @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.
*/
metadata: {
// eslint-disable-next-line getter-return
get: function () {
DeveloperError.throwInstantiationError();
},
set: function (value) {
DeveloperError.throwInstantiationError();
},
},
/**
* Gets the group for this content if the content has metadata (3D Tiles 1.1) or
* if it uses the 3DTILES_metadata
extension. If neither are present,
* this property should be undefined.
*
* This is used to implement the Cesium3DTileContent
interface, but is
* not part of the public Cesium API.
*
*
* @type {Cesium3DTileContentGroup|undefined}
*
* @private
* @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.
*/
group: {
// eslint-disable-next-line getter-return
get: function () {
DeveloperError.throwInstantiationError();
},
set: function (value) {
DeveloperError.throwInstantiationError();
},
},
});
/**
* Returns whether the feature has this property.
*
* @param {Number} batchId The batchId for the feature.
* @param {String} name The case-sensitive name of the property.
* @returns {Boolean} true
if the feature has this property; otherwise, false
.
*/
Cesium3DTileContent.prototype.hasProperty = function (batchId, name) {
DeveloperError.throwInstantiationError();
};
/**
* Returns the {@link Cesium3DTileFeature} object for the feature with the
* given batchId
. This object is used to get and modify the
* feature's properties.
*
* Features in a tile are ordered by batchId
, an index used to retrieve their metadata from the batch table.
*
*
* @see {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/TileFormats/BatchTable}.
*
* @param {Number} batchId The batchId for the feature.
* @returns {Cesium3DTileFeature} The corresponding {@link Cesium3DTileFeature} object.
*
* @exception {DeveloperError} batchId must be between zero and {@link Cesium3DTileContent#featuresLength} - 1.
*/
Cesium3DTileContent.prototype.getFeature = function (batchId) {
DeveloperError.throwInstantiationError();
};
/**
* Called when {@link Cesium3DTileset#debugColorizeTiles} changes.
*
* This is used to implement the Cesium3DTileContent
interface, but is
* not part of the public Cesium API.
*
*
* @param {Boolean} enabled Whether to enable or disable debug settings.
* @returns {Cesium3DTileFeature} The corresponding {@link Cesium3DTileFeature} object.
* @private
*/
Cesium3DTileContent.prototype.applyDebugSettings = function (enabled, color) {
DeveloperError.throwInstantiationError();
};
/**
* Apply a style to the content
*
* This is used to implement the Cesium3DTileContent
interface, but is
* not part of the public Cesium API.
*
*
* @param {Cesium3DTileStyle} style The style.
*
* @private
*/
Cesium3DTileContent.prototype.applyStyle = function (style) {
DeveloperError.throwInstantiationError();
};
/**
* Called by the tile during tileset traversal to get the draw commands needed to render this content.
* When the tile's content is in the PROCESSING state, this creates WebGL resources to ultimately
* move to the READY state.
*
* This is used to implement the Cesium3DTileContent
interface, but is
* not part of the public Cesium API.
*
*
* @param {Cesium3DTileset} tileset The tileset containing this tile.
* @param {FrameState} frameState The frame state.
*
* @private
*/
Cesium3DTileContent.prototype.update = function (tileset, frameState) {
DeveloperError.throwInstantiationError();
};
/**
* Returns true if this object was destroyed; otherwise, false.
*
* If this object was destroyed, it should not be used; calling any function other than
* isDestroyed
will result in a {@link DeveloperError} exception.
*
* This is used to implement the Cesium3DTileContent
interface, but is
* not part of the public Cesium API.
*
*
* @returns {Boolean} true
if this object was destroyed; otherwise, false
.
*
* @see Cesium3DTileContent#destroy
*
* @private
*/
Cesium3DTileContent.prototype.isDestroyed = function () {
DeveloperError.throwInstantiationError();
};
/**
* Destroys the WebGL resources held by this object. Destroying an object allows for deterministic
* release of WebGL resources, instead of relying on the garbage collector to destroy this object.
*
* Once an object is destroyed, it should not be used; calling any function other than
* isDestroyed
will result in a {@link DeveloperError} exception. Therefore,
* assign the return value (undefined
) to the object as done in the example.
*
* This is used to implement the Cesium3DTileContent
interface, but is
* not part of the public Cesium API.
*
*
* @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.
*
* @example
* content = content && content.destroy();
*
* @see Cesium3DTileContent#isDestroyed
*
* @private
*/
Cesium3DTileContent.prototype.destroy = function () {
DeveloperError.throwInstantiationError();
};
export default Cesium3DTileContent;