UNPKG

@cesium/engine

Version:

CesiumJS is a JavaScript library for creating 3D globes and 2D maps in a web browser without a plugin.

115 lines (105 loc) 3.43 kB
import destroyObject from "../Core/destroyObject.js"; import Event from "../Core/Event.js"; import EventHelper from "../Core/EventHelper.js"; import BoxGeometryUpdater from "./BoxGeometryUpdater.js"; import CorridorGeometryUpdater from "./CorridorGeometryUpdater.js"; import CylinderGeometryUpdater from "./CylinderGeometryUpdater.js"; import EllipseGeometryUpdater from "./EllipseGeometryUpdater.js"; import EllipsoidGeometryUpdater from "./EllipsoidGeometryUpdater.js"; import PlaneGeometryUpdater from "./PlaneGeometryUpdater.js"; import PolygonGeometryUpdater from "./PolygonGeometryUpdater.js"; import PolylineVolumeGeometryUpdater from "./PolylineVolumeGeometryUpdater.js"; import RectangleGeometryUpdater from "./RectangleGeometryUpdater.js"; import WallGeometryUpdater from "./WallGeometryUpdater.js"; /** @type {GeometryUpdater[]} */ const geometryUpdaters = [ BoxGeometryUpdater, CylinderGeometryUpdater, CorridorGeometryUpdater, EllipseGeometryUpdater, EllipsoidGeometryUpdater, PlaneGeometryUpdater, PolygonGeometryUpdater, PolylineVolumeGeometryUpdater, RectangleGeometryUpdater, WallGeometryUpdater, ]; /** * Manages a set of "updater" classes for the {@link GeometryVisualizer} for each entity * * @private * @param {Entity} entity * @param {Scene} scene */ function GeometryUpdaterSet(entity, scene) { this.entity = entity; this.scene = scene; const updaters = new Array(geometryUpdaters.length); const geometryChanged = new Event(); const eventHelper = new EventHelper(); for (let i = 0; i < updaters.length; i++) { const updater = new geometryUpdaters[i](entity, scene); eventHelper.add(updater.geometryChanged, (geometry) => { geometryChanged.raiseEvent(geometry); }); updaters[i] = updater; } this.updaters = updaters; this.geometryChanged = geometryChanged; this.eventHelper = eventHelper; this._removeEntitySubscription = entity.definitionChanged.addEventListener( GeometryUpdaterSet.prototype._onEntityPropertyChanged, this, ); } GeometryUpdaterSet.prototype._onEntityPropertyChanged = function ( entity, propertyName, newValue, oldValue, ) { const updaters = this.updaters; for (let i = 0; i < updaters.length; i++) { updaters[i]._onEntityPropertyChanged( entity, propertyName, newValue, oldValue, ); } }; GeometryUpdaterSet.prototype.forEach = function (callback) { const updaters = this.updaters; for (let i = 0; i < updaters.length; i++) { callback(updaters[i]); } }; GeometryUpdaterSet.prototype.destroy = function () { this.eventHelper.removeAll(); const updaters = this.updaters; for (let i = 0; i < updaters.length; i++) { updaters[i].destroy(); } this._removeEntitySubscription(); destroyObject(this); }; /** * Add the provided updater to the default list of updaters if not already included * @param {GeometryUpdater} updater */ GeometryUpdaterSet.registerUpdater = function (updater) { if (!geometryUpdaters.includes(updater)) { geometryUpdaters.push(updater); } }; /** * Remove the provided updater from the default list of updaters if included * @param {GeometryUpdater} updater */ GeometryUpdaterSet.unregisterUpdater = function (updater) { if (geometryUpdaters.includes(updater)) { const index = geometryUpdaters.indexOf(updater); geometryUpdaters.splice(index, 1); } }; export default GeometryUpdaterSet;