这两天再写一个多条件从数据库检索,然后返回id数组,根据id查找Entity并改变它的颜色(或者材质)的功能,以达到强调的目的。本来也是一个比较简单的小功能,但是查了别人的资料无果,走了点弯路,所以把它记下来。
首先介绍一下官方的颜色定义API:
new Cesium.Color(red, green, blue, alpha)
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;
效果如图:
改变线的颜色
这就是比较纠结的一段过程了……我先是点击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;
效果如图:
emmm我现在还是不太懂 ._material和.material属性有什么区别,值都是一样的,但是如果我用viewer.entities.getById(id)._polyline._material._color=selectedColor 就会出现颜色没变,但是打印属性点开颜色已经改变了……
有空去看看源码吧>///< 先这样啦~给大家做个参考,防止像我一样走弯路