UNPKG

@eliorar/angular-cesium

Version:

Angular library for working with Cesium.

63 lines 10.2 kB
import { Injectable } from '@angular/core'; import { Material, PolylineCollection } from 'cesium'; import { PrimitivesDrawerService } from '../primitives-drawer/primitives-drawer.service'; import { GeoUtilsService } from '../../geo-utils/geo-utils.service'; import * as i0 from "@angular/core"; import * as i1 from "../../cesium/cesium.service"; /** + This drawer is responsible for drawing an arc over the Cesium map. + This implementation uses simple PolylineGeometry and Primitive parameters. + This doesn't allow us to change the position, color, etc.. of the arc but setShow only. */ export class ArcDrawerService extends PrimitivesDrawerService { constructor(cesiumService) { super(PolylineCollection, cesiumService); } _calculateArcPositions(cesiumProps) { const quality = cesiumProps.quality || 18; const delta = (cesiumProps.delta) / quality; const pointsArray = []; for (let i = 0; i < quality + 1; ++i) { const point = GeoUtilsService.pointByLocationDistanceAndAzimuth(cesiumProps.center, cesiumProps.radius, cesiumProps.angle + delta * i, true); pointsArray.push(point); } return pointsArray; } _calculateTriangle(cesiumProps) { return [ cesiumProps.center, GeoUtilsService.pointByLocationDistanceAndAzimuth(cesiumProps.center, cesiumProps.radius, cesiumProps.angle, true) ]; } _calculateArc(cesiumProps) { const arcPoints = this._calculateArcPositions(cesiumProps); return cesiumProps.drawEdges ? arcPoints.concat(this._calculateTriangle(cesiumProps)) : arcPoints; } add(cesiumProps) { cesiumProps.positions = this._calculateArc(cesiumProps); if (cesiumProps.color) { const material = Material.fromType('Color'); material.uniforms.color = cesiumProps.color; cesiumProps.material = material; } return this._cesiumCollection.add(cesiumProps); } update(primitive, cesiumProps) { if (!cesiumProps.constantColor && cesiumProps.color && !primitive.material.uniforms.color.equals(cesiumProps.color)) { primitive.material.uniforms.color = cesiumProps.color; } primitive.width = cesiumProps.width !== undefined ? cesiumProps.width : primitive.width; primitive.show = cesiumProps.show !== undefined ? cesiumProps.show : primitive.show; primitive.distanceDisplayCondition = cesiumProps.distanceDisplayCondition !== undefined ? cesiumProps.distanceDisplayCondition : primitive.distanceDisplayCondition; primitive.positions = this._calculateArc(cesiumProps); return primitive; } } ArcDrawerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ArcDrawerService, deps: [{ token: i1.CesiumService }], target: i0.ɵɵFactoryTarget.Injectable }); ArcDrawerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ArcDrawerService }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ArcDrawerService, decorators: [{ type: Injectable }], ctorParameters: function () { return [{ type: i1.CesiumService }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJjLWRyYXdlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jZXNpdW0vc3JjL2xpYi9hbmd1bGFyLWNlc2l1bS9zZXJ2aWNlcy9kcmF3ZXJzL2FyYy1kcmF3ZXIvYXJjLWRyYXdlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLFFBQVEsRUFBRSxrQkFBa0IsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUVwRCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQztBQUN2RixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7OztBQUVsRTs7OztHQUlHO0FBR0gsTUFBTSxPQUFPLGdCQUFpQixTQUFRLHVCQUF1QjtJQUMzRCxZQUFZLGFBQTRCO1FBQ3RDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsc0JBQXNCLENBQUMsV0FBZ0I7UUFDckMsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDMUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDO1FBQzVDLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN2QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtZQUNwQyxNQUFNLEtBQUssR0FDVCxlQUFlLENBQUMsaUNBQWlDLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNqSSxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3pCO1FBRUQsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELGtCQUFrQixDQUFDLFdBQWdCO1FBQ2pDLE9BQU87WUFDTCxXQUFXLENBQUMsTUFBTTtZQUNsQixlQUFlLENBQUMsaUNBQWlDLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDO1NBQ25ILENBQUM7SUFDSixDQUFDO0lBRUQsYUFBYSxDQUFDLFdBQWdCO1FBQzVCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzRCxPQUFPLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNwRyxDQUFDO0lBRUQsR0FBRyxDQUFDLFdBQWdCO1FBQ2xCLFdBQVcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4RCxJQUFJLFdBQVcsQ0FBQyxLQUFLLEVBQUU7WUFDckIsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM1QyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQzVDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1NBQ2pDO1FBRUQsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxNQUFNLENBQUMsU0FBYyxFQUFFLFdBQWdCO1FBQ3JDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxJQUFJLFdBQVcsQ0FBQyxLQUFLO1lBQ2pELENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDOUQsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUM7U0FDdkQ7UUFDRCxTQUFTLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO1FBQ3hGLFNBQVMsQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDcEYsU0FBUyxDQUFDLHdCQUF3QixHQUFHLFdBQVcsQ0FBQyx3QkFBd0IsS0FBSyxTQUFTLENBQUMsQ0FBQztZQUN2RixXQUFXLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQztRQUM1RSxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFdEQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQzs7NkdBckRVLGdCQUFnQjtpSEFBaEIsZ0JBQWdCOzJGQUFoQixnQkFBZ0I7a0JBRDVCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtNYXRlcmlhbCwgUG9seWxpbmVDb2xsZWN0aW9ufSBmcm9tICdjZXNpdW0nO1xuaW1wb3J0IHtDZXNpdW1TZXJ2aWNlfSBmcm9tICcuLi8uLi9jZXNpdW0vY2VzaXVtLnNlcnZpY2UnO1xuaW1wb3J0IHtQcmltaXRpdmVzRHJhd2VyU2VydmljZX0gZnJvbSAnLi4vcHJpbWl0aXZlcy1kcmF3ZXIvcHJpbWl0aXZlcy1kcmF3ZXIuc2VydmljZSc7XG5pbXBvcnQge0dlb1V0aWxzU2VydmljZX0gZnJvbSAnLi4vLi4vZ2VvLXV0aWxzL2dlby11dGlscy5zZXJ2aWNlJztcblxuLyoqXG4gKyAgVGhpcyBkcmF3ZXIgaXMgcmVzcG9uc2libGUgZm9yIGRyYXdpbmcgYW4gYXJjIG92ZXIgdGhlIENlc2l1bSBtYXAuXG4gKyAgVGhpcyBpbXBsZW1lbnRhdGlvbiB1c2VzIHNpbXBsZSBQb2x5bGluZUdlb21ldHJ5IGFuZCBQcmltaXRpdmUgcGFyYW1ldGVycy5cbiArICBUaGlzIGRvZXNuJ3QgYWxsb3cgdXMgdG8gY2hhbmdlIHRoZSBwb3NpdGlvbiwgY29sb3IsIGV0Yy4uIG9mIHRoZSBhcmMgYnV0IHNldFNob3cgb25seS5cbiAqL1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQXJjRHJhd2VyU2VydmljZSBleHRlbmRzIFByaW1pdGl2ZXNEcmF3ZXJTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoY2VzaXVtU2VydmljZTogQ2VzaXVtU2VydmljZSkge1xuICAgIHN1cGVyKFBvbHlsaW5lQ29sbGVjdGlvbiwgY2VzaXVtU2VydmljZSk7XG4gIH1cblxuICBfY2FsY3VsYXRlQXJjUG9zaXRpb25zKGNlc2l1bVByb3BzOiBhbnkpIHtcbiAgICBjb25zdCBxdWFsaXR5ID0gY2VzaXVtUHJvcHMucXVhbGl0eSB8fCAxODtcbiAgICBjb25zdCBkZWx0YSA9IChjZXNpdW1Qcm9wcy5kZWx0YSkgLyBxdWFsaXR5O1xuICAgIGNvbnN0IHBvaW50c0FycmF5ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBxdWFsaXR5ICsgMTsgKytpKSB7XG4gICAgICBjb25zdCBwb2ludCA9XG4gICAgICAgIEdlb1V0aWxzU2VydmljZS5wb2ludEJ5TG9jYXRpb25EaXN0YW5jZUFuZEF6aW11dGgoY2VzaXVtUHJvcHMuY2VudGVyLCBjZXNpdW1Qcm9wcy5yYWRpdXMsIGNlc2l1bVByb3BzLmFuZ2xlICsgZGVsdGEgKiBpLCB0cnVlKTtcbiAgICAgIHBvaW50c0FycmF5LnB1c2gocG9pbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBwb2ludHNBcnJheTtcbiAgfVxuXG4gIF9jYWxjdWxhdGVUcmlhbmdsZShjZXNpdW1Qcm9wczogYW55KSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGNlc2l1bVByb3BzLmNlbnRlcixcbiAgICAgIEdlb1V0aWxzU2VydmljZS5wb2ludEJ5TG9jYXRpb25EaXN0YW5jZUFuZEF6aW11dGgoY2VzaXVtUHJvcHMuY2VudGVyLCBjZXNpdW1Qcm9wcy5yYWRpdXMsIGNlc2l1bVByb3BzLmFuZ2xlLCB0cnVlKVxuICAgIF07XG4gIH1cblxuICBfY2FsY3VsYXRlQXJjKGNlc2l1bVByb3BzOiBhbnkpIHtcbiAgICBjb25zdCBhcmNQb2ludHMgPSB0aGlzLl9jYWxjdWxhdGVBcmNQb3NpdGlvbnMoY2VzaXVtUHJvcHMpO1xuICAgIHJldHVybiBjZXNpdW1Qcm9wcy5kcmF3RWRnZXMgPyBhcmNQb2ludHMuY29uY2F0KHRoaXMuX2NhbGN1bGF0ZVRyaWFuZ2xlKGNlc2l1bVByb3BzKSkgOiBhcmNQb2ludHM7XG4gIH1cblxuICBhZGQoY2VzaXVtUHJvcHM6IGFueSk6IGFueSB7XG4gICAgY2VzaXVtUHJvcHMucG9zaXRpb25zID0gdGhpcy5fY2FsY3VsYXRlQXJjKGNlc2l1bVByb3BzKTtcbiAgICBpZiAoY2VzaXVtUHJvcHMuY29sb3IpIHtcbiAgICAgIGNvbnN0IG1hdGVyaWFsID0gTWF0ZXJpYWwuZnJvbVR5cGUoJ0NvbG9yJyk7XG4gICAgICBtYXRlcmlhbC51bmlmb3Jtcy5jb2xvciA9IGNlc2l1bVByb3BzLmNvbG9yO1xuICAgICAgY2VzaXVtUHJvcHMubWF0ZXJpYWwgPSBtYXRlcmlhbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY2VzaXVtQ29sbGVjdGlvbi5hZGQoY2VzaXVtUHJvcHMpO1xuICB9XG5cbiAgdXBkYXRlKHByaW1pdGl2ZTogYW55LCBjZXNpdW1Qcm9wczogYW55KSB7XG4gICAgaWYgKCFjZXNpdW1Qcm9wcy5jb25zdGFudENvbG9yICYmIGNlc2l1bVByb3BzLmNvbG9yICYmXG4gICAgICAhcHJpbWl0aXZlLm1hdGVyaWFsLnVuaWZvcm1zLmNvbG9yLmVxdWFscyhjZXNpdW1Qcm9wcy5jb2xvcikpIHtcbiAgICAgIHByaW1pdGl2ZS5tYXRlcmlhbC51bmlmb3Jtcy5jb2xvciA9IGNlc2l1bVByb3BzLmNvbG9yO1xuICAgIH1cbiAgICBwcmltaXRpdmUud2lkdGggPSBjZXNpdW1Qcm9wcy53aWR0aCAhPT0gdW5kZWZpbmVkID8gY2VzaXVtUHJvcHMud2lkdGggOiBwcmltaXRpdmUud2lkdGg7XG4gICAgcHJpbWl0aXZlLnNob3cgPSBjZXNpdW1Qcm9wcy5zaG93ICE9PSB1bmRlZmluZWQgPyBjZXNpdW1Qcm9wcy5zaG93IDogcHJpbWl0aXZlLnNob3c7XG4gICAgcHJpbWl0aXZlLmRpc3RhbmNlRGlzcGxheUNvbmRpdGlvbiA9IGNlc2l1bVByb3BzLmRpc3RhbmNlRGlzcGxheUNvbmRpdGlvbiAhPT0gdW5kZWZpbmVkID9cbiAgICAgIGNlc2l1bVByb3BzLmRpc3RhbmNlRGlzcGxheUNvbmRpdGlvbiA6IHByaW1pdGl2ZS5kaXN0YW5jZURpc3BsYXlDb25kaXRpb247XG4gICAgcHJpbWl0aXZlLnBvc2l0aW9ucyA9IHRoaXMuX2NhbGN1bGF0ZUFyYyhjZXNpdW1Qcm9wcyk7XG5cbiAgICByZXR1cm4gcHJpbWl0aXZlO1xuICB9XG59XG4iXX0=