(function (window, mars3d) { //创建widget类,需要继承BaseWidget class MyWidget extends mars3d.widget.BaseWidget { //弹窗配置 get view() { return { type: "window", url: "view.html", windowOptions: { width: 270, height: 500, position: { top: 70, bottom: 40, left: 15, }, }, }; } //初始化[仅执行1次] create() {} //每个窗口创建完成后调用 winCreateOK(opt, result) { this.viewWindow = result; } //打开激活 activate() { this.layerWork = this.map.getLayer(this.config.layerCfg); if (this.layerWork) { this.layerWork.on(mars3d.EventType.removeLayer, this._onRemoveLayerHandler, this); this.layerWork.on(mars3d.EventType.hide, this._onRemoveLayerHandler, this); } } _onRemoveLayerHandler(e) { this.disableBase(); } //关闭释放 disable() { if (this.layerWork) { this.layerWork.off(mars3d.EventType.removeLayer, this._onRemoveLayerHandler, this); this.layerWork.on(mars3d.EventType.removeLayer, this._onRemoveLayerHandler, this); } this.resetStyle(); this.viewWindow = null; } getTreeUrl() { var url = this.config.layerCfg.url; url = url.substring(0, url.lastIndexOf("/") + 1) + this.config.layerCfg.scenetree; var that = this; $.ajax({ url: url, dataType: "json", success(scene) { that.viewWindow.initSceneTree(scene); }, }); } resetStyle() { if (!this.layerWork?.tileset) { return; } this.layerWork.tileset.style = undefined; } //定位 locateNode(nodeid, nodesphere) { if (nodesphere[3] <= 0) { return; } if (!this.layerWork) { return; } this.layerWork.closePopup(); //构件节点位置 var center = new Cesium.Cartesian3(nodesphere[0], nodesphere[1], nodesphere[2]); //获取构件节点位置,现对于原始矩阵变化后的新位置 center = this.layerWork.getPositionByOrginMatrix(center); //飞行过去 var sphere = new Cesium.BoundingSphere(center, nodesphere[3]); this.map.camera.flyToBoundingSphere(sphere, { offset: new Cesium.HeadingPitchRange(this.map.camera.heading, this.map.camera.pitch, nodesphere[3] * 4), duration: 0.5, }); //设置tileset的样式 this.layerWork.style = new Cesium.Cesium3DTileStyle({ color: { conditions: [ ["${id} ==='" + nodeid + "'", "rgb(255, 255, 255)"], ["true", "rgba(255, 200, 200,0.2)"], ], }, }); } } //注册到widget管理器中。 mars3d.widget.bindClass(MyWidget); //每个widet之间都是直接引入到index.html中,会存在彼此命名冲突,所以闭包处理下。 })(window, mars3d);