首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从Cesium3DTileset控制原语的可见性

如何从Cesium3DTileset控制原语的可见性
EN

Stack Overflow用户
提问于 2019-08-06 21:42:25
回答 1查看 284关注 0票数 2

如何正确控制Cesium3DTileset中原语的可见性?

首先,我在HTML中创建了一个checkbox元素,并创建了一个checkbox addEventListener来控制本地geojson文件中DataSource的可见性。一切都很顺利。

然后我做了同样的事情来控制是否需要显示我的be离子账户中的3DTile。在第一次检查和取消检查时,一切都进行得很顺利。但当我第二次选中该框时,场景中什么也没有显示。第二次取消选中时,也不执行任何操作,也不会出错。

代码语言:javascript
运行
复制
//this is my checkbox elements
    <input type="checkbox" id="showCheckbox1" > geojson1<br>
    <input type="checkbox" id="showCheckbox2" > geojson2<br>
    <input type="checkbox" id="showCheckbox_1" > ion_1<br>
    <input type="checkbox" id="showCheckbox_2" > ion_2<br>


//this is my first try to control the visibility of geojson, and it goes well
    var obj1 = new Cesium.GeoJsonDataSource();
    obj.load('../DataSource/GeoJson/airport_cesium2.geojson')
    var obj2 = new Cesium.GeoJsonDataSource();
    obj2.load('../DataSource/GeoJson/LiangMau.geojson')

    function handleCheckbox(id,datasource){
        var checkbox = document.getElementById(id);
        checkbox.addEventListener('change', function() {
            // Checkbox state changed.
            if (checkbox.checked) {
                // Show if not shown.
                if (!viewer.dataSources.contains(datasource)) {
                    viewer.dataSources.add(datasource);
                }
            } else {
                // Hide if currently shown.
                if (viewer.dataSources.contains(datasource)) {
                    viewer.dataSources.remove(datasource);
                }
            }
        }, false);
    }
    handleCheckbox('showCheckbox1',obj1)
    handleCheckbox('showCheckbox2',obj2)


//then I try to control the visibility of 3DTile
    var obj_1 = new Cesium.Cesium3DTileset({
        url: Cesium.IonResource.fromAssetId(35386)
    })
    var obj_2 = new Cesium.Cesium3DTileset({
        url: Cesium.IonResource.fromAssetId(35381)
    })

    function handleCheckbox_(id,datasource){
        var checkbox = document.getElementById(id);
        checkbox.addEventListener('change', function() {
            // Checkbox state changed.
            if (checkbox.checked) {
                // Show if not shown.
                if (!scene.primitives.contains(datasource)) {
                    scene.primitives.add(datasource);
                }
            } else {
                // Hide if currently shown.
                if (scene.primitives.contains(datasource)) {
                    scene.primitives.remove(datasource);
                }
            }
        }, false);
    }
    handleCheckbox_('showCheckbox_1',obj_1)
    handleCheckbox_('showCheckbox_2',obj_2)

我可以在第一次选中和取消选中时控制3DTile的可见性,但在第二次选中时什么也不会发生。它真的把我搞糊涂了,因为没有错误显示,而且我不知道下一步做什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-07 21:42:36

正如评论中提到的,解决这个问题的方法是设置dataSource.show标志来切换可见性。多次添加和删除相同的dataSource是问题所在,因为通常当dataSource被删除时,它就会被销毁。因此,最好使用show标志切换可见性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57377459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档