Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 | 1783x 1783x 1783x 1783x 1783x 1783x 1454x 1454x 1454x 410x 1783x 1783x 1783x 1783x 1783x 1783x 1783x 1x 1785x 1785x 1785x 1785x 1784x 1783x 1783x 1454x 1454x 1454x 1783x 1x 2822x 7782x 80x 2x 2x 2x 2x 1x | import Check from "../Core/Check.js";
import clone from "../Core/clone.js";
import Frozen from "../Core/Frozen.js";
import defined from "../Core/defined.js";
import MetadataClassProperty from "./MetadataClassProperty.js";
/**
* A metadata class.
*
* <p>
* See the {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/Metadata|3D Metadata Specification} for 3D Tiles
* </p>
*
* @param {object} options Object with the following properties:
* @param {string} options.id The ID of the class.
* @param {string} [options.name] The name of the class.
* @param {string} [options.description] The description of the class.
* @param {Object<string, MetadataClassProperty>} [options.properties] The class properties, where each key is the property ID.
* @param {*} [options.extras] Extra user-defined properties.
* @param {object} [options.extensions] An object containing extensions.
*
* @alias MetadataClass
* @constructor
* @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.
*/
function MetadataClass(options) {
options = options ?? Frozen.EMPTY_OBJECT;
const id = options.id;
//>>includeStart('debug', pragmas.debug);
Check.typeOf.string("options.id", id);
//>>includeEnd('debug');
const properties = options.properties ?? {};
const propertiesBySemantic = {};
for (const propertyId in properties) {
Eif (properties.hasOwnProperty(propertyId)) {
const property = properties[propertyId];
if (defined(property.semantic)) {
propertiesBySemantic[property.semantic] = property;
}
}
}
this._id = id;
this._name = options.name;
this._description = options.description;
this._properties = properties;
this._propertiesBySemantic = propertiesBySemantic;
this._extras = clone(options.extras, true);
this._extensions = clone(options.extensions, true);
}
/**
* Creates a {@link MetadataClass} from either 3D Tiles 1.1, 3DTILES_metadata, EXT_structural_metadata, or EXT_feature_metadata.
*
* @param {object} options Object with the following properties:
* @param {string} options.id The ID of the class.
* @param {object} options.class The class JSON object.
* @param {Object<string, MetadataEnum>} [options.enums] A dictionary of enums.
*
* @returns {MetadataClass} The newly created metadata class.
*
* @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.
*/
MetadataClass.fromJson = function (options) {
options = options ?? Frozen.EMPTY_OBJECT;
const id = options.id;
const classDefinition = options.class;
//>>includeStart('debug', pragmas.debug);
Check.typeOf.string("options.id", id);
Check.typeOf.object("options.class", classDefinition);
//>>includeEnd('debug');
const properties = {};
for (const propertyId in classDefinition.properties) {
Eif (classDefinition.properties.hasOwnProperty(propertyId)) {
const property = MetadataClassProperty.fromJson({
id: propertyId,
property: classDefinition.properties[propertyId],
enums: options.enums,
});
properties[propertyId] = property;
}
}
return new MetadataClass({
id: id,
name: classDefinition.name,
description: classDefinition.description,
properties: properties,
extras: classDefinition.extras,
extensions: classDefinition.extensions,
});
};
Object.defineProperties(MetadataClass.prototype, {
/**
* The class properties.
*
* @memberof MetadataClass.prototype
* @type {Object<string, MetadataClassProperty>}
* @readonly
*/
properties: {
get: function () {
return this._properties;
},
},
/**
* A dictionary mapping semantics to class properties.
*
* @memberof MetadataClass.prototype
* @type {Object<string, MetadataClassProperty>}
* @readonly
*
* @private
*/
propertiesBySemantic: {
get: function () {
return this._propertiesBySemantic;
},
},
/**
* The ID of the class.
*
* @memberof MetadataClass.prototype
* @type {string}
* @readonly
*/
id: {
get: function () {
return this._id;
},
},
/**
* The name of the class.
*
* @memberof MetadataClass.prototype
* @type {string}
* @readonly
*/
name: {
get: function () {
return this._name;
},
},
/**
* The description of the class.
*
* @memberof MetadataClass.prototype
* @type {string}
* @readonly
*/
description: {
get: function () {
return this._description;
},
},
/**
* Extra user-defined properties.
*
* @memberof MetadataClass.prototype
* @type {*}
* @readonly
*/
extras: {
get: function () {
return this._extras;
},
},
/**
* An object containing extensions.
*
* @memberof MetadataClass.prototype
* @type {object}
* @readonly
*/
extensions: {
get: function () {
return this._extensions;
},
},
});
/**
* The class name given to the metadata class when a batch
* table is loaded from 3D Tiles 1.0 formats.
*
* @private
*/
MetadataClass.BATCH_TABLE_CLASS_NAME = "_batchTable";
export default MetadataClass;
|