2015-12-01 31 views
1

在铯我加入3dmodel为如下(网址是什么,但.gltf文件的路径)我怎样才能得到模型加载事件铯观众

function load3dmodel(url, x, y) { 
    viewer.entities.removeAll(); 
    viewer.entities.add({ 
     position: Cesium.Cartesian3.fromDegrees(x, y), model: { 
      uri: url 
     } 
    }); 
} 

它正在30至60秒LAOD cesium查看器中的gltf文件,所以我想在加载3dmodel时显示处理Gif图像。为了实现这一点,我无法找到3dmodel加载事件。我的意思是实际装载完成。 在函数结束后,我尝试使用“then”子句。它不起作用

回答

2

目前,没有官方的方法来做到这一点。实体API层故意隐藏其下面的图形原语层,以防止抽象漏洞。未来版本的Cesium应该将Model.readyModel.readyPromise暴露给实体API,但目前尚未实现。

我花了一分钟的时间来看看在Cesium版本1.15中挖掘出Model原语需要什么。找到这个的代码非常难看,它使用“私有”(前缀为_)变量,这些变量没有记录,并且可能会在没有警告的情况下更改。所以这不是一个长期的解决方案,并且可能不适用于各个版本。

function load3dmodel(url, x, y) { 
    viewer.entities.removeAll(); 
    var entity = viewer.entities.add({ 
     position: Cesium.Cartesian3.fromDegrees(x, y), model: { 
      uri: url 
     } 
    }); 

    // Use of _private variables is undocumented, subject to change without notice. 
    // Do not use this code in production. 
    Cesium.requestAnimationFrame(function() { 
     viewer.dataSourceDisplay.defaultDataSource._visualizers.reduce(function(a,b) { 
      return (a instanceof Cesium.ModelVisualizer) ? a : b; } 
     )._modelHash[entity.id].modelPrimitive.readyPromise.then(function() { 
      console.log('Your model has loaded.'); 
     }); 
    }); 
} 
+0

谢谢emackey,但这是行不通的,我越来越Uncaught TypeError:无法读取未定义的属性'_visualizers'。你可以请检查一下,让我知道。 – ChanduRaj

+0

我正在使用Cesium-1.15版本。你能否发送与相同版本兼容的解决方案?谢谢 – ChanduRaj

+0

编辑我的答案,目标是铯1.15。 – emackey