Cesium人工模型图层或分楼层

之前用超图的API所有关于图层可以直接调用s3m图层,关于图层管理和信息查询都一条龙包了,现在用原生的Cesium开发,才发现模型的切图层、转格式、发布、加载、处理等等是一堆麻烦事,刚好想弄一个3dtiles的图层管理出了,思路就是获取所有图层的feature,然后我以为事情就这样结束了。
Cesium人工模型图层或分楼层_第1张图片
结果一个三层楼的模型里面就一百多个feature,一个个去处理肯定不行,那么有没有办法往里面加属性字段呢?打开cesiumlab,在进行模型转换的时候可以往里面添加属性字段,这个在cesiumlab的官网文档有说明,我开始也看了没看懂,就多一嘴说一下把。
Cesium人工模型图层或分楼层_第2张图片
新建一个excel表格,唯一名称就是叫“唯一名称”,第一行后面就是自定义的属性类名,
第一列下面是max中划分的图层名。
Cesium人工模型图层或分楼层_第3张图片
对了忘了告诉大伙怎么获取每个图层的feature了,这是官方的事件名称。还有一个tileVisible好像也可以用。
Cesium人工模型图层或分楼层_第4张图片

function processContentFeatures(content, callback) {
     
	 var featuresLength = content.featuresLength;
	 for (var i = 0; i < featuresLength; ++i) {
     
	   var feature = content.getFeature(i);
	   callback(feature);
	 }
}
function processTileFeatures(tile, callback) {
     
	 var content = tile.content;
	 var innerContents = content.innerContents;
	 if (Cesium.defined(innerContents)) {
     
	   var length = innerContents.length;
	   for (var i = 0; i < length; ++i) {
     
	     processContentFeatures(innerContents[i], callback);
	   }
	 } else {
     
	   processContentFeatures(content, callback);
	 }
}
        tileset.tileLoad.addEventListener(function (tile) {
     
          processTileFeatures(tile, function(data){
     
            layers.push(data);//看这里
          });
        });

官方文档里说让我们不要在里面操作图元或实体,那我就创建一个对象来接收一下,layers.push()
然后这个layers里面打印出了就是我一个图片里面的内容了
最后在树组件里面操作一下就可以了
在这里插入图片描述

layers.forEach(res => {
     
    if(res._content.batchTable._properties.floor==a.key){
     
      res.show = b
    }
  });

好了,谢谢大家读完这篇潦草的博文

你可能感兴趣的:(Cesium,webgl)