前端3D模型cesium.js,想要通过点击左侧列表聚焦并变色某个部件,看过官方api只有tileset.tileVisible.addEventListener一种方法
var clickEvent = function(tile) {
var content = tile.content;
var featuresLength = content.featuresLength;
for (var i = 0; i < featuresLength; i++) {
// dbId为方法传入数据
if(content.getFeature(i).getProperty('DbId')==dbId){
var selectedFeature=content.getFeature(i);
//变色
selectedFeature.color = Cesium.Color.GOLD;
//未能移动镜头聚焦
}
}
};
tileset.tileVisible.addEventListener(clickEvent);
上面代码已经可以获取到想要的模型部件+变色,但tileset.tileVisible.addEventListener完全停不下来无限循环,无论是官方示例代码还是我的代码,这是官方bug吗?
急求:
1.无限循环的解决办法或者替代办法
2.通过selectedFeature放大并对焦镜头的办法
不是,你可以跟踪一下。
每个循环输出一个i
我换了种方式变色,不必再监听鼠标事件和循环tile
tileset.style = new Cesium.Cesium3DTileStyle({
color: {
conditions: [
[
"${DbId} === "+dbId,
"color('cyan', 0.9)",
],
[true, 'rgb(150,150,200)'],
],
},
});
但镜头飞行还是做不到,因为找不到feature里每个部件的对应3维坐标
viewer.camera.flyTo({//设置视角
destination : Cesium.Cartesian3.fromDegrees(longitude,dimension,height),
orientation:{
heading:Cesium.Math.toRadians(-69.0), //方位角
pitch:Cesium.Math.toRadians(-10.0), //倾斜角
}
});
json数据里唯一像坐标的数据是这样子的:
"boundingBoxes": [null, [-2630.158, -336.648, -129.509, -693.232, -95.184, -4.739],
[-1618.827, -336.648, -91.109, -693.232, -95.184, -5.362],
[-1618.827, -336.648, -12.395, -693.815, -95.184, -5.362],
[-1618.827, -336.648, -12.395, -693.815, -95.184, -5.362],
我看不懂,很明显不能作为3维坐标,不知道能不能利用上