cesium
Version:
CesiumJS is a JavaScript library for creating 3D globes and 2D maps in a web browser without a plugin.
85 lines (70 loc) • 3.28 kB
JavaScript
import ComponentDatatype from '../Core/ComponentDatatype.js';
import defaultValue from '../Core/defaultValue.js';
import defined from '../Core/defined.js';
/**
* @private
*/
function Cesium3DTileFeatureTable(featureTableJson, featureTableBinary) {
this.json = featureTableJson;
this.buffer = featureTableBinary;
this._cachedTypedArrays = {};
this.featuresLength = 0;
}
function getTypedArrayFromBinary(featureTable, semantic, componentType, componentLength, count, byteOffset) {
var cachedTypedArrays = featureTable._cachedTypedArrays;
var typedArray = cachedTypedArrays[semantic];
if (!defined(typedArray)) {
typedArray = ComponentDatatype.createArrayBufferView(componentType, featureTable.buffer.buffer, featureTable.buffer.byteOffset + byteOffset, count * componentLength);
cachedTypedArrays[semantic] = typedArray;
}
return typedArray;
}
function getTypedArrayFromArray(featureTable, semantic, componentType, array) {
var cachedTypedArrays = featureTable._cachedTypedArrays;
var typedArray = cachedTypedArrays[semantic];
if (!defined(typedArray)) {
typedArray = ComponentDatatype.createTypedArray(componentType, array);
cachedTypedArrays[semantic] = typedArray;
}
return typedArray;
}
Cesium3DTileFeatureTable.prototype.getGlobalProperty = function(semantic, componentType, componentLength) {
var jsonValue = this.json[semantic];
if (!defined(jsonValue)) {
return undefined;
}
if (defined(jsonValue.byteOffset)) {
componentType = defaultValue(componentType, ComponentDatatype.UNSIGNED_INT);
componentLength = defaultValue(componentLength, 1);
return getTypedArrayFromBinary(this, semantic, componentType, componentLength, 1, jsonValue.byteOffset);
}
return jsonValue;
};
Cesium3DTileFeatureTable.prototype.getPropertyArray = function(semantic, componentType, componentLength) {
var jsonValue = this.json[semantic];
if (!defined(jsonValue)) {
return undefined;
}
if (defined(jsonValue.byteOffset)) {
if (defined(jsonValue.componentType)) {
componentType = ComponentDatatype.fromName(jsonValue.componentType);
}
return getTypedArrayFromBinary(this, semantic, componentType, componentLength, this.featuresLength, jsonValue.byteOffset);
}
return getTypedArrayFromArray(this, semantic, componentType, jsonValue);
};
Cesium3DTileFeatureTable.prototype.getProperty = function(semantic, componentType, componentLength, featureId, result) {
var jsonValue = this.json[semantic];
if (!defined(jsonValue)) {
return undefined;
}
var typedArray = this.getPropertyArray(semantic, componentType, componentLength);
if (componentLength === 1) {
return typedArray[featureId];
}
for (var i = 0; i < componentLength; ++i) {
result[i] = typedArray[componentLength * featureId + i];
}
return result;
};
export default Cesium3DTileFeatureTable;