首页 / 浏览问题 / 三维GIS / 问题详情
如何修改web3d 中的物体
40EXP 2020年11月24日

新手求问  问题:要控制下图中门的开关

代码块是我引入的模型代码和点击时获取的信息 ,最后一张图是我获取到的模型信息

请问用什么方法可以控制那个门

      this.viewer = new Cesium.Viewer('cesiumContainer3d', {
            selectionIndicator: false,
            infoBox: false,
            timeline: false
        });
var handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
        handler.setInputAction(function(e) {
          scene.pick(e.position);
          let selectedLayer = scene.layers._selectedLayer;
          console.log('获取的内容',selectedLayer)
          let id = selectedLayer.getSelection()[0];
          console.log(id)
          if(!left.Stopmouseclick){
            // document.getElementById("bubble3d").style.display="inline"; // 显示div
            //获取点击位置笛卡尔坐标
            var position = scene.pickPosition(e.position);
            console.log('获取点击位置笛卡尔坐标',position)
            left.currentClick = position;
            left.scenePosition = position; // 气泡相关 2/4
            //将笛卡尔坐标转化为经纬度坐标
            var cartographic = Cesium.Cartographic.fromCartesian(position);
            console.log('将笛卡尔坐标转化为经纬度坐标',cartographic)
            var longitude = Cesium.Math.toDegrees(cartographic.longitude);
            var latitude = Cesium.Math.toDegrees(cartographic.latitude);
            var height = cartographic.height;
            if(height < 0) {
                height = 0;
            }
          }
        }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
try {
            // 添加S3M图层服务  
            let promise = scene.open("http://123.57.79.89:8090/iserver/services/3D-ShanDongLinYiGuanLang/rest/realspace");
            // let promise = scene.open("http://192.168.90.73:8090/iserver/services/3D-ShanDongLinYiGuanLang/rest/realspace");
                                    //  http://123.57.79.89:8090/iserver/services/3D-ShanDongLinYiGuanLang0717/rest/realspace
                                    // http://123.57.79.89:8090/iserver/services/3D-ShanDongLinYiGuanLang/rest/realspace
                                    // http://123.57.79.89:8090/iserver/services/3D-ShanDongLinYiGuanLangXiangMu/rest/realspace

            // let setQueryParameterurl = 'http://192.168.90.73:8090/iserver/services/data-ShanDongLinYiGuanLangXiangMu/rest/data';
            let setQueryParameterurl = 'http://123.57.79.89:8090/iserver/services/data-ShanDongLinYiGuanLangXiangMu/rest/data';
            Cesium.when(promise, function (layers) {
                if(!scene.pickPositionSupported){
                    console.log('不支持深度拾取,属性查询功能无法使用!');
                }
                let layer = scene.layers.find('管廊干粉灭火器_1@单件') //  当前图层 datas下的 的数据列表名称
                layer.setQueryParameter({
                    url: setQueryParameterurl, // 数据服务
                    dataSourceName: '单件', // 当前图层数据源 datasources目录下 列表中的名称 临沂管廊示例071702
                    dataSetName: '管廊干粉灭火器_1',     // datasources>临沂管廊示例071702>datasets>数据集中当前图层所用的数据元名称 guanlang071705_1
                    keyWord: 'name'                      // 数据集包含的字段 用作搜索条件
                });
                layer = scene.layers.find('管廊氧气传感器_1@单件')
                layer.setQueryParameter({
                    url: setQueryParameterurl,
                    dataSourceName: '单件', 
                    dataSetName: '管廊氧气传感器', 
                    keyWord: 'name'                
                });
                layer = scene.layers.find('管廊电话辅机_kml_1@单件')
                layer.setQueryParameter({
                    url: setQueryParameterurl,
                    dataSourceName: '单件', 
                    dataSetName: '管廊电话辅机_kml_1',
                    keyWord: 'name'
                });
                layer = scene.layers.find('照明0909_1@单件')
                layer.setQueryParameter({
                    url: setQueryParameterurl,
                    dataSourceName: '单件', 
                    dataSetName: '照明0909_1',
                    keyWord: 'name'
                });
                
            }, function (e) {
                if (widget._showRenderLoopErrors) {
                  widget.showErrorPanel('渲染时发生错误,已停止渲染。', undefined, e);
                }
            })
        } catch (e) {
            if (widget._showRenderLoopErrors) {
                widget.showErrorPanel('渲染时发生错误,已停止渲染。', undefined, e);
            }
        }

1个回答

您好,要想通过代码控制门的开关首先需要门是一个独立的模型,并且保证中心点在门的左侧边框上,然后参考范例http://support.supermap.com.cn:8090/webgl/examples/webgl/editor.html#KML_edit

6,077EXP 2020年11月26日
...