@eliorar/angular-cesium
Version:
Angular library for working with Cesium.
115 lines • 17.9 kB
JavaScript
import { BasicDrawerService } from '../basic-drawer/basic-drawer.service';
import { CallbackProperty, CustomDataSource } from 'cesium';
import { GraphicsType } from './enums/graphics-type.enum';
import { OptimizedEntityCollection } from './optimized-entity-collection';
/**
* General primitives drawer responsible of drawing Cesium primitives.
* Drawers the handle Cesium primitives extend it.
*/
export class EntitiesDrawerService extends BasicDrawerService {
constructor(cesiumService, graphicsType, defaultOptions = {
collectionMaxSize: -1,
collectionSuspensionTime: -1,
collectionsNumber: 1,
}) {
super();
this.cesiumService = cesiumService;
this.graphicsType = graphicsType;
this.defaultOptions = defaultOptions;
this.entityCollections = new Map();
this.graphicsTypeName = 'Unknown';
// Fix bad enum compilation
for (const i in GraphicsType) {
if (GraphicsType[i] === this.graphicsType) {
this.graphicsTypeName = i;
}
}
}
getFreeEntitiesCollection() {
let freeEntityCollection = null;
if (this.entityCollections != null) {
this.entityCollections.forEach(entityCollection => {
if (entityCollection.isFree()) {
freeEntityCollection = entityCollection;
}
});
}
return freeEntityCollection;
}
init(options) {
const finalOptions = options || this.defaultOptions;
const dataSources = [];
for (let i = 0; i < finalOptions.collectionsNumber; i++) {
const dataSource = new CustomDataSource(this.graphicsTypeName);
dataSources.push(dataSource);
this.cesiumService.getViewer().dataSources.add(dataSource);
this.entityCollections.set(dataSource.entities, new OptimizedEntityCollection(dataSource.entities, finalOptions.collectionMaxSize, finalOptions.collectionSuspensionTime));
}
return dataSources;
}
add(cesiumProps) {
const optimizedEntityCollection = this.getFreeEntitiesCollection();
if (optimizedEntityCollection === null) {
throw new Error('No more free entity collections');
}
const entityObject = {
position: cesiumProps.position !== undefined ? cesiumProps.position : undefined,
description: cesiumProps.description !== undefined ? cesiumProps.description : undefined,
orientation: cesiumProps.orientation !== undefined ? cesiumProps.orientation : undefined,
viewFrom: cesiumProps.viewFrom !== undefined ? cesiumProps.viewFrom : undefined,
[this.graphicsTypeName]: cesiumProps,
};
if (cesiumProps.name !== undefined) {
entityObject.name = cesiumProps.name;
}
if (cesiumProps.availability !== undefined) {
entityObject.availability = cesiumProps.availability;
}
return optimizedEntityCollection.add(entityObject);
}
update(entity, cesiumProps) {
this.suspendEntityCollection(entity);
if (entity.position instanceof CallbackProperty) {
if (entity.position._isConstant) {
entity.position = cesiumProps.position;
}
}
entity.position = cesiumProps.position !== undefined ? cesiumProps.position : undefined;
entity.name = cesiumProps.name !== undefined ? cesiumProps.name : entity.name;
entity.description = cesiumProps.description !== undefined ? cesiumProps.description : entity.description;
entity.orientation = cesiumProps.orientation !== undefined ? cesiumProps.orientation : entity.orientation;
entity.viewFrom = cesiumProps.viewFrom !== undefined ? cesiumProps.viewFrom : entity.viewFrom;
entity.availability = cesiumProps.availability !== undefined ? cesiumProps.availability : cesiumProps.availability;
if (this._propsAssigner) {
this._propsAssigner(entity[this.graphicsTypeName], cesiumProps);
}
else {
Object.assign(entity[this.graphicsTypeName], cesiumProps);
}
}
remove(entity) {
const optimizedEntityCollection = this.entityCollections.get(entity.entityCollection);
if (optimizedEntityCollection != null) {
optimizedEntityCollection.remove(entity);
}
}
removeAll() {
this.entityCollections.forEach(entityCollection => {
entityCollection.removeAll();
});
}
setShow(showValue) {
this.entityCollections.forEach(entityCollection => {
entityCollection.setShow(showValue);
});
}
suspendEntityCollection(entity) {
const id = entity.entityCollection;
if (!this.entityCollections.has(id)) {
throw new Error('No EntityCollection for entity.entityCollection');
}
const entityCollection = this.entityCollections.get(id);
entityCollection.suspend();
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXRpZXMtZHJhd2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNlc2l1bS9zcmMvbGliL2FuZ3VsYXItY2VzaXVtL3NlcnZpY2VzL2RyYXdlcnMvZW50aXRpZXMtZHJhd2VyL2VudGl0aWVzLWRyYXdlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQ3hFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUUxRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFFeEQsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFFeEU7OztHQUdHO0FBRUgsTUFBTSxPQUFPLHFCQUFzQixTQUFRLGtCQUFrQjtJQUkzRCxZQUNVLGFBQTRCLEVBQzVCLFlBQTBCLEVBQzFCLGlCQUF3QztRQUM5QyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFDckIsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLGlCQUFpQixFQUFFLENBQUM7S0FDckI7UUFFRCxLQUFLLEVBQUUsQ0FBQztRQVJBLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLG1CQUFjLEdBQWQsY0FBYyxDQUlyQjtRQVZLLHNCQUFpQixHQUFHLElBQUksR0FBRyxFQUFrQyxDQUFDO1FBYXBFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUM7UUFFbEMsMkJBQTJCO1FBQzNCLEtBQUssTUFBTSxDQUFDLElBQUksWUFBWSxFQUFFO1lBQzVCLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBUSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ2hELElBQUksQ0FBQyxnQkFBZ0Is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IjpbImltcG9ydCB7QmFzaWNEcmF3ZXJTZXJ2aWNlfSBmcm9tICcuLi9iYXNpYy1kcmF3ZXIvYmFzaWMtZHJhd2VyLnNlcnZpY2UnO1xuaW1wb3J0IHtDYWxsYmFja1Byb3BlcnR5LCBDdXN0b21EYXRhU291cmNlfSBmcm9tICdjZXNpdW0nO1xuaW1wb3J0IHtDZXNpdW1TZXJ2aWNlfSBmcm9tICcuLi8uLi9jZXNpdW0vY2VzaXVtLnNlcnZpY2UnO1xuaW1wb3J0IHtHcmFwaGljc1R5cGV9IGZyb20gJy4vZW51bXMvZ3JhcGhpY3MtdHlwZS5lbnVtJztcbmltcG9ydCB7RW50aXRpZXNEcmF3ZXJPcHRpb25zfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZW50aXRpZXMtZHJhd2VyLW9wdGlvbnMnO1xuaW1wb3J0IHtPcHRpbWl6ZWRFbnRpdHlDb2xsZWN0aW9ufSBmcm9tICcuL29wdGltaXplZC1lbnRpdHktY29sbGVjdGlvbic7XG5cbi8qKlxuICogIEdlbmVyYWwgcHJpbWl0aXZlcyBkcmF3ZXIgcmVzcG9uc2libGUgb2YgZHJhd2luZyBDZXNpdW0gcHJpbWl0aXZlcy5cbiAqICBEcmF3ZXJzIHRoZSBoYW5kbGUgQ2VzaXVtIHByaW1pdGl2ZXMgZXh0ZW5kIGl0LlxuICovXG5cbmV4cG9ydCBjbGFzcyBFbnRpdGllc0RyYXdlclNlcnZpY2UgZXh0ZW5kcyBCYXNpY0RyYXdlclNlcnZpY2Uge1xuICBwcml2YXRlIGVudGl0eUNvbGxlY3Rpb25zID0gbmV3IE1hcDxhbnksIE9wdGltaXplZEVudGl0eUNvbGxlY3Rpb24+KCk7XG4gIHByaXZhdGUgZ3JhcGhpY3NUeXBlTmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2VzaXVtU2VydmljZTogQ2VzaXVtU2VydmljZSxcbiAgICBwcml2YXRlIGdyYXBoaWNzVHlwZTogR3JhcGhpY3NUeXBlLFxuICAgIHByaXZhdGUgZGVmYXVsdE9wdGlvbnM6IEVudGl0aWVzRHJhd2VyT3B0aW9ucyA9IHtcbiAgICAgIGNvbGxlY3Rpb25NYXhTaXplOiAtMSxcbiAgICAgIGNvbGxlY3Rpb25TdXNwZW5zaW9uVGltZTogLTEsXG4gICAgICBjb2xsZWN0aW9uc051bWJlcjogMSxcbiAgICB9LFxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuZ3JhcGhpY3NUeXBlTmFtZSA9ICdVbmtub3duJztcblxuICAgIC8vIEZpeCBiYWQgZW51bSBjb21waWxhdGlvblxuICAgIGZvciAoY29uc3QgaSBpbiBHcmFwaGljc1R5cGUpIHtcbiAgICAgIGlmIChHcmFwaGljc1R5cGVbaV0gYXMgYW55ID09PSB0aGlzLmdyYXBoaWNzVHlwZSkge1xuICAgICAgICB0aGlzLmdyYXBoaWNzVHlwZU5hbWUgPSBpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0RnJlZUVudGl0aWVzQ29sbGVjdGlvbigpOiBPcHRpbWl6ZWRFbnRpdHlDb2xsZWN0aW9uIHtcbiAgICBsZXQgZnJlZUVudGl0eUNvbGxlY3Rpb24gPSBudWxsO1xuICAgIGlmICh0aGlzLmVudGl0eUNvbGxlY3Rpb25zICE9IG51bGwpIHtcbiAgICAgIHRoaXMuZW50aXR5Q29sbGVjdGlvbnMuZm9yRWFjaChlbnRpdHlDb2xsZWN0aW9uID0+IHtcbiAgICAgICAgaWYgKGVudGl0eUNvbGxlY3Rpb24uaXNGcmVlKCkpIHtcbiAgICAgICAgICBmcmVlRW50aXR5Q29sbGVjdGlvbiA9IGVudGl0eUNvbGxlY3Rpb247XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBmcmVlRW50aXR5Q29sbGVjdGlvbjtcbiAgfVxuXG4gIGluaXQob3B0aW9ucz86IEVudGl0aWVzRHJhd2VyT3B0aW9ucykge1xuICAgIGNvbnN0IGZpbmFsT3B0aW9ucyA9IG9wdGlvbnMgfHwgdGhpcy5kZWZhdWx0T3B0aW9ucztcbiAgICBjb25zdCBkYXRhU291cmNlcyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmluYWxPcHRpb25zLmNvbGxlY3Rpb25zTnVtYmVyOyBpKyspIHtcbiAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBuZXcgQ3VzdG9tRGF0YVNvdXJjZSh0aGlzLmdyYXBoaWNzVHlwZU5hbWUpO1xuICAgICAgZGF0YVNvdXJjZXMucHVzaChkYXRhU291cmNlKTtcbiAgICAgIHRoaXMuY2VzaXVtU2VydmljZS5nZXRWaWV3ZXIoKS5kYXRhU291cmNlcy5hZGQoZGF0YVNvdXJjZSk7XG4gICAgICB0aGlzLmVudGl0eUNvbGxlY3Rpb25zLnNldChcbiAgICAgICAgZGF0YVNvdXJjZS5lbnRpdGllcyxcbiAgICAgICAgbmV3IE9wdGltaXplZEVudGl0eUNvbGxlY3Rpb24oZGF0YVNvdXJjZS5lbnRpdGllcywgZmluYWxPcHRpb25zLmNvbGxlY3Rpb25NYXhTaXplLCBmaW5hbE9wdGlvbnMuY29sbGVjdGlvblN1c3BlbnNpb25UaW1lKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGFTb3VyY2VzO1xuICB9XG5cbiAgYWRkKGNlc2l1bVByb3BzOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IG9wdGltaXplZEVudGl0eUNvbGxlY3Rpb24gPSB0aGlzLmdldEZyZWVFbnRpdGllc0NvbGxlY3Rpb24oKTtcbiAgICBpZiAob3B0aW1pemVkRW50aXR5Q29sbGVjdGlvbiA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBtb3JlIGZyZWUgZW50aXR5IGNvbGxlY3Rpb25zJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZW50aXR5T2JqZWN0ID0ge1xuICAgICAgcG9zaXRpb246IGNlc2l1bVByb3BzLnBvc2l0aW9uICE9PSB1bmRlZmluZWQgPyBjZXNpdW1Qcm9wcy5wb3NpdGlvbiA6IHVuZGVmaW5lZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBjZXNpdW1Qcm9wcy5kZXNjcmlwdGlvbiAhPT0gdW5kZWZpbmVkID8gY2VzaXVtUHJvcHMuZGVzY3JpcHRpb24gOiB1bmRlZmluZWQsXG4gICAgICBvcmllbnRhdGlvbjogY2VzaXVtUHJvcHMub3JpZW50YXRpb24gIT09IHVuZGVmaW5lZCA/IGNlc2l1bVByb3BzLm9yaWVudGF0aW9uIDogdW5kZWZpbmVkLFxuICAgICAgdmlld0Zyb206IGNlc2l1bVByb3BzLnZpZXdGcm9tICE9PSB1bmRlZmluZWQgPyBjZXNpdW1Qcm9wcy52aWV3RnJvbSA6IHVuZGVmaW5lZCxcbiAgICAgIFt0aGlzLmdyYXBoaWNzVHlwZU5hbWVdOiBjZXNpdW1Qcm9wcyxcbiAgICB9O1xuXG4gICAgaWYgKGNlc2l1bVByb3BzLm5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZW50aXR5T2JqZWN0Lm5hbWUgPSBjZXNpdW1Qcm9wcy5uYW1lO1xuICAgIH1cbiAgICBpZiAoY2VzaXVtUHJvcHMuYXZhaWxhYmlsaXR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGVudGl0eU9iamVjdC5hdmFpbGFiaWxpdHkgPSBjZXNpdW1Qcm9wcy5hdmFpbGFiaWxpdHk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdGltaXplZEVudGl0eUNvbGxlY3Rpb24uYWRkKGVudGl0eU9iamVjdCk7XG4gIH1cblxuICB1cGRhdGUoZW50aXR5OiBhbnksIGNlc2l1bVByb3BzOiBhbnkpIHtcbiAgICB0aGlzLnN1c3BlbmRFbnRpdHlDb2xsZWN0aW9uKGVudGl0eSk7XG5cbiAgICBpZiAoZW50aXR5LnBvc2l0aW9uIGluc3RhbmNlb2YgQ2FsbGJhY2tQcm9wZXJ0eSkge1xuICAgICAgaWYgKGVudGl0eS5wb3NpdGlvbi5faXNDb25zdGFudCkge1xuICAgICAgICBlbnRpdHkucG9zaXRpb24gPSBjZXNpdW1Qcm9wcy5wb3NpdGlvbjtcbiAgICAgIH1cbiAgICB9XG4gICAgZW50aXR5LnBvc2l0aW9uID0gY2VzaXVtUHJvcHMucG9zaXRpb24gIT09IHVuZGVmaW5lZCA/IGNlc2l1bVByb3BzLnBvc2l0aW9uIDogdW5kZWZpbmVkO1xuICAgIGVudGl0eS5uYW1lID0gY2VzaXVtUHJvcHMubmFtZSAhPT0gdW5kZWZpbmVkID8gY2VzaXVtUHJvcHMubmFtZSA6IGVudGl0eS5uYW1lO1xuICAgIGVudGl0eS5kZXNjcmlwdGlvbiA9IGNlc2l1bVByb3BzLmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQgPyBjZXNpdW1Qcm9wcy5kZXNjcmlwdGlvbiA6IGVudGl0eS5kZXNjcmlwdGlvbjtcbiAgICBlbnRpdHkub3JpZW50YXRpb24gPSBjZXNpdW1Qcm9wcy5vcmllbnRhdGlvbiAhPT0gdW5kZWZpbmVkID8gY2VzaXVtUHJvcHMub3JpZW50YXRpb24gOiBlbnRpdHkub3JpZW50YXRpb247XG4gICAgZW50aXR5LnZpZXdGcm9tID0gY2VzaXVtUHJvcHMudmlld0Zyb20gIT09IHVuZGVmaW5lZCA/IGNlc2l1bVByb3BzLnZpZXdGcm9tIDogZW50aXR5LnZpZXdGcm9tO1xuICAgIGVudGl0eS5hdmFpbGFiaWxpdHkgPSBjZXNpdW1Qcm9wcy5hdmFpbGFiaWxpdHkgIT09IHVuZGVmaW5lZCA/IGNlc2l1bVByb3BzLmF2YWlsYWJpbGl0eSA6IGNlc2l1bVByb3BzLmF2YWlsYWJpbGl0eTtcblxuICAgIGlmICh0aGlzLl9wcm9wc0Fzc2lnbmVyKSB7XG4gICAgICB0aGlzLl9wcm9wc0Fzc2lnbmVyKGVudGl0eVt0aGlzLmdyYXBoaWNzVHlwZU5hbWVdLCBjZXNpdW1Qcm9wcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oZW50aXR5W3RoaXMuZ3JhcGhpY3NUeXBlTmFtZV0sIGNlc2l1bVByb3BzKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmUoZW50aXR5OiBhbnkpIHtcbiAgICBjb25zdCBvcHRpbWl6ZWRFbnRpdHlDb2xsZWN0aW9uID0gdGhpcy5lbnRpdHlDb2xsZWN0aW9ucy5nZXQoZW50aXR5LmVudGl0eUNvbGxlY3Rpb24pO1xuICAgIGlmIChvcHRpbWl6ZWRFbnRpdHlDb2xsZWN0aW9uICE9IG51bGwpIHtcbiAgICAgIG9wdGltaXplZEVudGl0eUNvbGxlY3Rpb24ucmVtb3ZlKGVudGl0eSk7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlQWxsKCkge1xuICAgIHRoaXMuZW50aXR5Q29sbGVjdGlvbnMuZm9yRWFjaChlbnRpdHlDb2xsZWN0aW9uID0+IHtcbiAgICAgIGVudGl0eUNvbGxlY3Rpb24ucmVtb3ZlQWxsKCk7XG4gICAgfSk7XG4gIH1cblxuICBzZXRTaG93KHNob3dWYWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuZW50aXR5Q29sbGVjdGlvbnMuZm9yRWFjaChlbnRpdHlDb2xsZWN0aW9uID0+IHtcbiAgICAgIGVudGl0eUNvbGxlY3Rpb24uc2V0U2hvdyhzaG93VmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdXNwZW5kRW50aXR5Q29sbGVjdGlvbihlbnRpdHk6IGFueSkge1xuICAgIGNvbnN0IGlkID0gZW50aXR5LmVudGl0eUNvbGxlY3Rpb247XG4gICAgaWYgKCF0aGlzLmVudGl0eUNvbGxlY3Rpb25zLmhhcyhpZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gRW50aXR5Q29sbGVjdGlvbiBmb3IgZW50aXR5LmVudGl0eUNvbGxlY3Rpb24nKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbnRpdHlDb2xsZWN0aW9uID0gdGhpcy5lbnRpdHlDb2xsZWN0aW9ucy5nZXQoaWQpO1xuICAgIGVudGl0eUNvbGxlY3Rpb24uc3VzcGVuZCgpO1xuICB9XG59XG5cbiJdfQ==