这两天再写一个多条件从数据库检索,然后返回id数组,根据id查找Entity并改变它的颜色(或者材质)的功能,以达到强调的目的。本来也是一个比较简单的小功能,但是查了别人的资料无果,走了点弯路,所以把它记下来。

首先介绍一下官方的颜色定义API:

new Cesium.Color(redgreenbluealpha)

A color, specified using red, green, blue, and alpha values, which range from 0 (no intensity) to 1.0 (full intensity).
Name Type Default Description
red Number 1.0 optionalThe red component.
green Number 1.0 optionalThe green component.
blue Number 1.0 optionalThe blue component.
alpha Number 1.0 optionalThe alpha component.


它有很多静态变量可以直接使用,比如红色黄色灰色神马的,可以参考点击打开链接

改变点的颜色

var selectedColor = new Cesium.Color(0, 1, 0, 1);  //这里也可以自定义别的蓝色啦

viewer.entities.getById(id)._point._color._value=selectedColor;

效果如图:

Cesium 学习记录(6)改变几何外观的颜色(材质)

改变线的颜色

这就是比较纠结的一段过程了……我先是点击Polyline以后打印出来看看它的结构,它与点不同,color属性是在material下面,于是我就自然而然写到:

viewer.entities.getById(id)._polyline._material._color._value=selectedColor;

不行,那就试试:

viewer.entities.getById(id)._polyline._material._color=selectedColor;

……(中间省略N字)

最后终于得到成功的方式了——new一个Polyline材质:

viewer.entities.getById(id).polyline.material=new Cesium.PolylineGlowMaterialProperty({
 glowPower : 0.5,
 color : Cesium.Color.BLUE

});

或者不要闪光的材质,直接赋值一个颜色也可以:

viewer.entities.getById(obj.id).polyline.material=Cesium.Color.DEEPSKYBLUE;

效果如图:

Cesium 学习记录(6)改变几何外观的颜色(材质)

emmm我现在还是不太懂 ._material和.material属性有什么区别,值都是一样的,但是如果我用viewer.entities.getById(id)._polyline._material._color=selectedColor 就会出现颜色没变,但是打印属性点开颜色已经改变了……

有空去看看源码吧>///< 先这样啦~给大家做个参考,防止像我一样走弯路

相关文章: