SuperMap iClient3D for WebGL教程(S3MTilesLayer)- 图元操作

首先,图元的操作是基于图元对象的id进行指定的,我们一般可通过定义鼠标事件,去获取选中对象的id,或者通过数据查询获取需求的的图元对象的id

1 let screenSpaceEventHandler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
2             screenSpaceEventHandler.setInputAction(function(e) {
3                 // 获取选中的S3M图层
4                 let selectlayer=viewer.scene.layers.getSelectedLayer()
5                 // 获取选中图元的id
6                 let selectid=selectlayer.getSelection()[0]
7        }, Cesium.ScreenSpaceEventType.LEFT_CLICK)

####图元操作之颜色
1.临时选中高亮:即鼠标选中其他对象或者不选中时,不再高亮;
这种情况可直接设置图层的selectedColor

s3mLayer.selectedColor = Cesium.Color.RED

若是经过查询获取的id,可以调用setSelection(id),设置该对象选中并高亮
2.设置图元颜色

 1     let selectedId = [15051, 15052, 17076, 17057, 17037, 17056, 17036, 15072, 14322, 17174, 16872, 16873]
 2     let Colors= ['#152664','#0d2680','#002eb3','#0041a2','#005ebc','#1b75cf','#0080ff', '#2baaf9','#55d7f8','#8cedff','#b1f1ff','#F0FFFF']
 3     // 设置图元颜色
 4     function setColor(){
 5        for (let i = 0; i < selectedId.length; i++) {
 6             s3mLayer.setObjsColor([selectedId[i]], Cesium.Color.fromCssColorString(Colors[i]))
 7         }
 8     }
 9     // 删除相应id的图元颜色
10     function removeColor(){
11       s3mLayer.removeObjsColor(selectedId.slice(0,5))
12     }
13     // 删除所有图元的颜色
14     function removeAllColor(){
15         s3mLayer.removeAllObjsColor()
16     }

 ####图元操作之可见性
可见性的操作主要分为两种,
一.不互斥,即设置图元自身的可见性,不影响其他图元:
使用setOnlyObjsVisible(ids, isVisible)

 

1    // 设置图元可见
2     function setOnlyObjsVisible(){
3       s3mLayer.setOnlyObjsVisible(selectedId,true)
4     }
5     // 设置图元不可见
6     function setOnlyObjsDisVisible(){
7         s3mLayer.setOnlyObjsVisible(selectedId,false)
8     }

 

二.互斥,设置图元自身的可见性,会影响其他图元的可见性:

使用setObjsVisible(ids, isVisible)

1   // 互斥:设置图元可见
2     function setObjsVisible(){
3       s3mLayer.setObjsVisible(selectedId,true)
4     }
5     // 互斥:设置图元不可见
6     function setObjsDisVisible(){
7         s3mLayer.setObjsVisible(selectedId,false)
8     }

####图元操作之偏移
偏移和其他三种不太一样,设置的偏移参数是设置图层的selectedTranslate属性,而不是在set方法里面设定偏移参数

s3mLayer.selectedTranslate = new Cesium.Cartesian3(5, 0, 0)
s3mLayer.setObjsOffset([selectedId2])
posted @ 2021-05-27 10:44  shuaibijian  阅读(496)  评论(0)    收藏  举报