angular-cesium
Version:
Angular library for working with Cesium.
94 lines • 11.8 kB
JavaScript
import { Component, ContentChild, TemplateRef, ViewChild } from '@angular/core';
import { BasicDesc } from '../../services/basic-desc/basic-desc.service';
import { LayerService } from '../../services/layer-service/layer-service.service';
import { ComputationCache } from '../../services/computation-cache/computation-cache.service';
import { CesiumProperties } from '../../services/cesium-properties/cesium-properties.service';
import { HtmlDrawerService } from '../../services/drawers/html-drawer/html-drawer.service';
import { AcHtmlDirective } from '../../directives/ac-html/ac-html.directive';
import { AcHtmlManager } from '../../services/ac-html-manager/ac-html-manager.service';
/**
* This is an html implementation.
* The ac-html element must be a child of ac-layer element.
* <br>
* [props] accepts position(Cartesian3) and show(boolean).
*
* __Usage:__
* ```
* <ac-layer acFor="let html of htmls$" [context]="this">
<ac-html-desc props="{position: html.position, show: html.show}">
<ng-template let-html>
<div>
<h1>This is ac-html {{html.name}}</h1>
<button (click)="changeText(html, 'Test')">change text</button>
</div>
</ng-template>
</ac-html-desc>
* <ac-html [props]="{position: position, show: true}">;
* <p>html element</p>
* </ac-html>
* ```
*/
export class AcHtmlDescComponent extends BasicDesc {
constructor(htmlDrawer, layerService, computationCache, cesiumProperties) {
super(htmlDrawer, layerService, computationCache, cesiumProperties);
}
ngOnInit() {
super.ngOnInit();
if (!this.acHtmlCreator) {
throw new Error(`AcHtml desc ERROR: ac html directive not found.`);
}
if (!this.acHtmlTemplate) {
throw new Error(`AcHtml desc ERROR: html template not found.`);
}
}
draw(context, id) {
const cesiumProps = this._propsEvaluator(context);
if (!this._cesiumObjectsMap.has(id)) {
const primitive = this._drawer.add(cesiumProps);
this._cesiumObjectsMap.set(id, primitive);
this.acHtmlCreator.addOrUpdate(id, primitive);
}
else {
const primitive = this._cesiumObjectsMap.get(id);
this._drawer.update(primitive, cesiumProps);
this.acHtmlCreator.addOrUpdate(id, primitive);
}
}
remove(id) {
const primitive = this._cesiumObjectsMap.get(id);
this._drawer.remove(primitive);
this._cesiumObjectsMap.delete(id);
this.acHtmlCreator.remove(id, primitive);
}
removeAll() {
this._cesiumObjectsMap.forEach(((primitive, id) => {
this.acHtmlCreator.remove(id, primitive);
}));
this._cesiumObjectsMap.clear();
this._drawer.removeAll();
}
}
AcHtmlDescComponent.decorators = [
{ type: Component, args: [{
selector: 'ac-html-desc',
providers: [AcHtmlManager],
template: `
<div *acHtml="let acHtmlEntityId = id; let acHtmlContext = context">
<div [acHtmlContainer]="acHtmlEntityId">
<ng-template [ngTemplateOutlet]="acHtmlTemplate"
[ngTemplateOutletContext]="acHtmlContext"></ng-template>
</div>
</div>`
},] }
];
AcHtmlDescComponent.ctorParameters = () => [
{ type: HtmlDrawerService },
{ type: LayerService },
{ type: ComputationCache },
{ type: CesiumProperties }
];
AcHtmlDescComponent.propDecorators = {
acHtmlCreator: [{ type: ViewChild, args: [AcHtmlDirective, { static: true },] }],
acHtmlTemplate: [{ type: ContentChild, args: [TemplateRef, { static: true },] }]
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWMtaHRtbC1kZXNjLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY2VzaXVtL3NyYy9saWIvYW5ndWxhci1jZXNpdW0vY29tcG9uZW50cy9hYy1odG1sLWRlc2MvYWMtaHRtbC1kZXNjLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBVSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDbEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDOUYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDOUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDM0YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUV2Rjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBWUgsTUFBTSxPQUFPLG1CQUFvQixTQUFRLFNBQVM7SUFLaEQsWUFBWSxVQUE2QixFQUFFLFlBQTBCLEVBQ3pELGdCQUFrQyxFQUFFLGdCQUFrQztRQUNoRixLQUFLLENBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxRQUFRO1FBQ04sS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWpCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQztTQUNwRTtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztTQUNoRTtJQUNILENBQUM7SUFFRCxJQUFJLENBQUMsT0FBWSxFQUFFLEVBQU87UUFDeEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUNuQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7U0FDL0M7YUFBTTtZQUNMLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztTQUMvQztJQUNILENBQUM7SUFFRCxNQUFNLENBQUMsRUFBVTtRQUNmLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUU7WUFDaEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDSixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUMzQixDQUFDOzs7WUEzREYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxjQUFjO2dCQUN4QixTQUFTLEVBQUUsQ0FBQyxhQUFhLENBQUM7Z0JBQzFCLFFBQVEsRUFBRTs7Ozs7O2FBTUM7YUFDWjs7O1lBcENRLGlCQUFpQjtZQUhqQixZQUFZO1lBQ1osZ0JBQWdCO1lBQ2hCLGdCQUFnQjs7OzRCQXdDdEIsU0FBUyxTQUFDLGVBQWUsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7NkJBQ3pDLFlBQVksU0FBQyxXQUFXLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIE9uSW5pdCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCYXNpY0Rlc2MgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9iYXNpYy1kZXNjL2Jhc2ljLWRlc2Muc2VydmljZSc7XHJcbmltcG9ydCB7IExheWVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xheWVyLXNlcnZpY2UvbGF5ZXItc2VydmljZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcHV0YXRpb25DYWNoZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbXB1dGF0aW9uLWNhY2hlL2NvbXB1dGF0aW9uLWNhY2hlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDZXNpdW1Qcm9wZXJ0aWVzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2VzaXVtLXByb3BlcnRpZXMvY2VzaXVtLXByb3BlcnRpZXMuc2VydmljZSc7XHJcbmltcG9ydCB7IEh0bWxEcmF3ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZHJhd2Vycy9odG1sLWRyYXdlci9odG1sLWRyYXdlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWNIdG1sRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9hYy1odG1sL2FjLWh0bWwuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQWNIdG1sTWFuYWdlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FjLWh0bWwtbWFuYWdlci9hYy1odG1sLW1hbmFnZXIuc2VydmljZSc7XHJcblxyXG4vKipcclxuICogIFRoaXMgaXMgYW4gaHRtbCBpbXBsZW1lbnRhdGlvbi5cclxuICogIFRoZSBhYy1odG1sIGVsZW1lbnQgbXVzdCBiZSBhIGNoaWxkIG9mIGFjLWxheWVyIGVsZW1lbnQuXHJcbiAqICA8YnI+XHJcbiAqICBbcHJvcHNdIGFjY2VwdHMgcG9zaXRpb24oQ2FydGVzaWFuMykgYW5kIHNob3coYm9vbGVhbikuXHJcbiAqXHJcbiAqICBfX1VzYWdlOl9fXHJcbiAqICBgYGBcclxuICogIDxhYy1sYXllciBhY0Zvcj1cImxldCBodG1sIG9mIGh0bWxzJFwiIFtjb250ZXh0XT1cInRoaXNcIj5cclxuIDxhYy1odG1sLWRlc2MgcHJvcHM9XCJ7cG9zaXRpb246IGh0bWwucG9zaXRpb24sIHNob3c6IGh0bWwuc2hvd31cIj5cclxuIDxuZy10ZW1wbGF0ZSBsZXQtaHRtbD5cclxuIDxkaXY+XHJcbiA8aDE+VGhpcyBpcyBhYy1odG1sIHt7aHRtbC5uYW1lfX08L2gxPlxyXG4gPGJ1dHRvbiAoY2xpY2spPVwiY2hhbmdlVGV4dChodG1sLCAnVGVzdCcpXCI+Y2hhbmdlIHRleHQ8L2J1dHRvbj5cclxuIDwvZGl2PlxyXG4gPC9uZy10ZW1wbGF0ZT5cclxuIDwvYWMtaHRtbC1kZXNjPlxyXG4gKiAgPGFjLWh0bWwgW3Byb3BzXT1cIntwb3NpdGlvbjogcG9zaXRpb24sIHNob3c6IHRydWV9XCI+O1xyXG4gKiAgICA8cD5odG1sIGVsZW1lbnQ8L3A+XHJcbiAqICA8L2FjLWh0bWw+XHJcbiAqICBgYGBcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYWMtaHRtbC1kZXNjJyxcclxuICBwcm92aWRlcnM6IFtBY0h0bWxNYW5hZ2VyXSxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgICA8ZGl2ICphY0h0bWw9XCJsZXQgYWNIdG1sRW50aXR5SWQgPSBpZDsgbGV0IGFjSHRtbENvbnRleHQgPSBjb250ZXh0XCI+XHJcbiAgICAgICAgICA8ZGl2IFthY0h0bWxDb250YWluZXJdPVwiYWNIdG1sRW50aXR5SWRcIj5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiYWNIdG1sVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiYWNIdG1sQ29udGV4dFwiPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+YFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWNIdG1sRGVzY0NvbXBvbmVudCBleHRlbmRzIEJhc2ljRGVzYyBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBWaWV3Q2hpbGQoQWNIdG1sRGlyZWN0aXZlLCB7c3RhdGljOiB0cnVlfSkgYWNIdG1sQ3JlYXRvcjogQWNIdG1sRGlyZWN0aXZlO1xyXG4gIEBDb250ZW50Q2hpbGQoVGVtcGxhdGVSZWYsIHtzdGF0aWM6IHRydWV9KSBhY0h0bWxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgY29uc3RydWN0b3IoaHRtbERyYXdlcjogSHRtbERyYXdlclNlcnZpY2UsIGxheWVyU2VydmljZTogTGF5ZXJTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIGNvbXB1dGF0aW9uQ2FjaGU6IENvbXB1dGF0aW9uQ2FjaGUsIGNlc2l1bVByb3BlcnRpZXM6IENlc2l1bVByb3BlcnRpZXMpIHtcclxuICAgIHN1cGVyKGh0bWxEcmF3ZXIsIGxheWVyU2VydmljZSwgY29tcHV0YXRpb25DYWNoZSwgY2VzaXVtUHJvcGVydGllcyk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcblxyXG4gICAgaWYgKCF0aGlzLmFjSHRtbENyZWF0b3IpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBY0h0bWwgZGVzYyBFUlJPUjogYWMgaHRtbCBkaXJlY3RpdmUgbm90IGZvdW5kLmApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5hY0h0bWxUZW1wbGF0ZSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEFjSHRtbCBkZXNjIEVSUk9SOiBodG1sIHRlbXBsYXRlIG5vdCBmb3VuZC5gKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRyYXcoY29udGV4dDogYW55LCBpZDogYW55KTogYW55IHtcclxuICAgIGNvbnN0IGNlc2l1bVByb3BzID0gdGhpcy5fcHJvcHNFdmFsdWF0b3IoY29udGV4dCk7XHJcbiAgICBpZiAoIXRoaXMuX2Nlc2l1bU9iamVjdHNNYXAuaGFzKGlkKSkge1xyXG4gICAgICBjb25zdCBwcmltaXRpdmUgPSB0aGlzLl9kcmF3ZXIuYWRkKGNlc2l1bVByb3BzKTtcclxuICAgICAgdGhpcy5fY2VzaXVtT2JqZWN0c01hcC5zZXQoaWQsIHByaW1pdGl2ZSk7XHJcbiAgICAgIHRoaXMuYWNIdG1sQ3JlYXRvci5hZGRPclVwZGF0ZShpZCwgcHJpbWl0aXZlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHByaW1pdGl2ZSA9IHRoaXMuX2Nlc2l1bU9iamVjdHNNYXAuZ2V0KGlkKTtcclxuICAgICAgdGhpcy5fZHJhd2VyLnVwZGF0ZShwcmltaXRpdmUsIGNlc2l1bVByb3BzKTtcclxuICAgICAgdGhpcy5hY0h0bWxDcmVhdG9yLmFkZE9yVXBkYXRlKGlkLCBwcmltaXRpdmUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlKGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IHByaW1pdGl2ZSA9IHRoaXMuX2Nlc2l1bU9iamVjdHNNYXAuZ2V0KGlkKTtcclxuICAgIHRoaXMuX2RyYXdlci5yZW1vdmUocHJpbWl0aXZlKTtcclxuICAgIHRoaXMuX2Nlc2l1bU9iamVjdHNNYXAuZGVsZXRlKGlkKTtcclxuICAgIHRoaXMuYWNIdG1sQ3JlYXRvci5yZW1vdmUoaWQsIHByaW1pdGl2ZSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVBbGwoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jZXNpdW1PYmplY3RzTWFwLmZvckVhY2goKChwcmltaXRpdmUsIGlkKSA9PiB7XHJcbiAgICAgIHRoaXMuYWNIdG1sQ3JlYXRvci5yZW1vdmUoaWQsIHByaW1pdGl2ZSk7XHJcbiAgICB9KSk7XHJcbiAgICB0aGlzLl9jZXNpdW1PYmplY3RzTWFwLmNsZWFyKCk7XHJcbiAgICB0aGlzLl9kcmF3ZXIucmVtb3ZlQWxsKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==