import { Component, OnInit,Input,Host } from '@angular/core'; import { Interaction} from 'ol/interaction'; import { MapComponent } from 'ngx-openlayers'; import OLCesium from 'olcs/OLCesium'; import RasterSynchronizer from 'olcs/RasterSynchronizer'; import VectorSynchronizer from 'olcs/VectorSynchronizer'; @Component({ selector: 'fm-map3d-switch2d3d', templateUrl: './switch2d3d.component.html', styleUrls: ['./switch2d3d.component.scss'] }) export class Switch2D3DComponent { @Input() enable:boolean; public label: string = "3D"; private ol3d: OLCesium; private synchronizers:any[]; public loading:boolean = true; private interactions:Interaction[] = []; constructor(private map: MapComponent) { } ngOnInit() { this.ol3d = new OLCesium({ map: this.map.instance, createSynchronizers: (map,scene) => { this.synchronizers = [ new RasterSynchronizer(map,scene), new VectorSynchronizer(map,scene) ]; this.loading=false; return this.synchronizers; }, stopOpenLayersEventsPropagation:true}); this.ol3d.warmUp(3000,5000); } synchronize() { this.synchronizers.forEach((synchronizer) => { synchronizer.synchronize(); }); } disableInteractions() { this.interactions=[]; this.map.instance.getInteractions().forEach((i) => { if(i.getActive()) { this.interactions.push(i); i.setActive(false); } }); } enableInteractions() { this.interactions.forEach((i) => { i.setActive(true); }); } handleClick(event) { this.enable = !this.enable; if(this.enable) { this.disableInteractions(); this.synchronize(); this.ol3d.setEnabled(true); } else { this.ol3d.setEnabled(false); this.enableInteractions(); } this.label = this.enable?"2D":"3D"; } }