2014-11-20 202 views
1

根据Cesium API,要切换资产广告牌(或标签)的可见性,您可以简单地将billboard.show属性指定为false。当我试图做到这一点,铯将与如何切换CZML实体广告牌的可见性属性(billboard.show)?

An error occurred while rendering. Rendering has stopped. 
TypeError: undefined is not a function 
... 

This discussion从铯-dev的谷歌组误差包括一些示例代码来切换广告牌能见度的开/关。如果您尝试在CZML实体上显示= false(此示例不使用CZML),则相同的代码不起作用。

这里是我试过

var asset = loadedCZML.entities.getById(id); 
asset.billboard.show = false; //Error! 

(loadedCZML是Cesium.CzmlDataSource

回答

1

的API文档的不提,你的实体的show属性可能并不总是一个简单的布尔属性(如该API描述)。

当与CzmlDataSourceentity工作时,show特性被认为是TimeIntervalCollectionProperty(至少这是我的CZML)。

铯所有属性必须实现一个getValue功能,当你去设置你的show = false,该属性的setter方法无法应用虚假的TimeIntervalCollectionProperty,而是替换的false一个简单的值全部财产。

错误undefined is not a function是铯渲染调用试图调用我们的show属性上的getValue()的结果。无论如何,解决方法是简单的:

取而代之的是:

asset.billboard.show = false; //error

这样做:

asset.billboard.show = new Cesium.ConstantProperty(false); 

PS:这适用于其他铯性能,请看下面的例子:

entity.billboard.image = pinBuilder.fromColor(Cesium.Color.CRIMSON, 48); //error 

//do this instead 
entity.billboard.image = new Cesium.ConstantProperty(pinBuilder.fromColor(Cesium.Color.CRIMSON, 48).toDataURL());