@cesium/engine
Version:
CesiumJS is a JavaScript library for creating 3D globes and 2D maps in a web browser without a plugin.
180 lines (169 loc) • 5.56 kB
JavaScript
import defined from "../../../../Core/defined.js";
import Check from "../../../../Core/Check.js";
import RuntimeError from "../../../../Core/RuntimeError.js";
import StorageType from "./StorageType.js";
/**
* @typedef {object} GltfGpmLocal.ConstructorOptions
*
* Initialization options for the GltfGpmLocal constructor
*
* @property {string} storageType The storage type.
* This must be one of the `StorageType` constants, i.e. `Direct` or `Indirect`.
* @property {AnchorPointIndirect[]|undefined} [anchorPointsIndirect] The indirect anchor points.
* This must be present if and only if the storage type is `Indirect`.
* @property {CorrelationGroup[]|undefined} [intraTileCorrelationGroups] The intra-tile correlation groups.
* This must be present if and only if the storage type is `Indirect`.
* @property {AnchorPointDirect[]|undefined} [anchorPointsDirect] The direct anchor points.
* This must be present if and only if the storage type is `Direct`.
* @property {Matrix3|undefined} [covarianceDirect] The covariance of anchor point parameters.
* This must be present if and only if the storage type is `Direct`.
*/
/**
* The GPM metadata for a Ground-Space Indirect implementation stored
* locally (i.e. a tile and/or leaf node).
*
* This reflects the root extension object of the {@link https://nsgreg.nga.mil/csmwg.jsp|NGA_gpm_local}
* glTF extension. When a model that contains this extension was loaded,
* then an object of this type can be obtained by calling
* ```
* const gltfGpmLocal = model.getExtension("NGA_gpm_local");
* ```
*
* The storage type determines the presence of the optional properties:
* <ul>
* <li>
* When the storage type is `StorageType.Indirect`, then the
* `anchorPointsIndirect` and `intraTileCorrelationGroups`
* are present.
* </li>
* <li>
* When the storage type is `StorageType.Direct`, then the
* `anchorPointsDirect` and `covarianceDirect` are present.
* </li>
* </ul>
*
* @constructor
* @param {GltfGpmLocal.ConstructorOptions} options An object describing initialization options
*
* @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.
*/
function GltfGpmLocal(options) {
//>>includeStart('debug', pragmas.debug);
Check.typeOf.string("options.storageType", options.storageType);
//>>includeEnd('debug');
this._storageType = options.storageType;
this._anchorPointsIndirect = options.anchorPointsIndirect;
this._anchorPointsDirect = options.anchorPointsDirect;
this._intraTileCorrelationGroups = options.intraTileCorrelationGroups;
this._covarianceDirect = options.covarianceDirect;
//>>includeStart('debug', pragmas.debug);
if (this.storageType === StorageType.Indirect) {
if (!defined(this.anchorPointsIndirect)) {
throw new RuntimeError(
"The anchorPointsIndirect are required for 'Indirect' storage",
);
}
if (!defined(this.intraTileCorrelationGroups)) {
throw new RuntimeError(
"The intraTileCorrelationGroups are required for 'Indirect' storage",
);
}
if (defined(this.anchorPointsDirect)) {
throw new RuntimeError(
"The anchorPointsDirect must be omitted for 'Indirect' storage",
);
}
if (defined(this.covarianceDirect)) {
throw new RuntimeError(
"The covarianceDirect must be omitted for 'Indirect' storage",
);
}
} else {
// Direct storage
if (!defined(this.anchorPointsDirect)) {
throw new RuntimeError(
"The anchorPointsDirect are required for 'Direct' storage",
);
}
if (!defined(this.covarianceDirect)) {
throw new RuntimeError(
"The covarianceDirect is required for 'Direct' storage",
);
}
if (defined(this.anchorPointsIndirect)) {
throw new RuntimeError(
"The anchorPointsIndirect must be omitted for 'Direct' storage",
);
}
if (defined(this.intraTileCorrelationGroups)) {
throw new RuntimeError(
"The intraTileCorrelationGroups must be omitted for 'Direct' storage",
);
}
}
//>>includeEnd('debug');
}
Object.defineProperties(GltfGpmLocal.prototype, {
/**
* Specifies if covariance storage is indirect or direct.
*
* @memberof GltfGpmLocal.prototype
* @type {StorageType}
* @readonly
*/
storageType: {
get: function () {
return this._storageType;
},
},
/**
* Array of stored indirect anchor points
*
* @memberof GltfGpmLocal.prototype
* @type {AnchorPointIndirect[]|undefined}
* @readonly
*/
anchorPointsIndirect: {
get: function () {
return this._anchorPointsIndirect;
},
},
/**
* Array of stored direct anchor points
*
* @memberof GltfGpmLocal.prototype
* @type {AnchorPointDirect[]|undefined}
* @readonly
*/
anchorPointsDirect: {
get: function () {
return this._anchorPointsDirect;
},
},
/**
* Metadata identifying parameters using same correlation modeling and
* associated correlation parameters
*
* @memberof GltfGpmLocal.prototype
* @type {CorrelationGroup[]|undefined}
* @readonly
*/
intraTileCorrelationGroups: {
get: function () {
return this._intraTileCorrelationGroups;
},
},
/**
* The full covariance of anchor point parameters
*
* @memberof GltfGpmLocal.prototype
* @type {Matrix3|undefined}
* @readonly
*/
covarianceDirect: {
get: function () {
return this._covarianceDirect;
},
},
});
export default GltfGpmLocal;