viewer.screenSpaceEventHandler.setInputAction(function onLeftClick(movement) {
var pickedFeature = viewer.scene.pick(movement.position);
if (typeof (pickedFeature) != "undefined") //鼠标是否点到线上
{
//将本次选中元素的原颜色保存
var precolor = pickedFeature.primitive.appearance.material.uniforms.color;
//当tempPicked ==0时,说明此时没有被选中的元素。初选的颜色就是原始颜色值
if (tempPicked.length == 0) {
originalColor = pickedFeature.primitive.appearance.material.uniforms.color;
} else {
//当lenth!=0时,说明有选中的数据,此时选中的数据颜色应为红色,原颜色应为之前保存的颜色,非改变后的红色
originalColor=tempPicked[0].precolor;
}
//改变颜色
let changeColor = function (factor, color) {
factor.primitive.appearance.material.uniforms.color = color;
}
//也有可能本次与上次选中的是同一个元素,两种情况,
// 一种是上次为原色,本次需变红,上次为原,与初始化没选相同,不做考虑
// 一种是上次为红,本次需变原,该情况下先变色,后复原,与所要结果相同。
//选中的变色
changeColor(pickedFeature, redColor);
//上次选中的变为原始颜色
if (tempPicked.length ==1) {
changeColor(tempPicked[0], originalColor);
}
//如果本次选择与上次相同,清空数组
if (pickedFeature.primitive.appearance.material.uniforms.color!=redColor) {
tempPicked.length = 0; //清空数组
} else {
//如果不同,清除上次元素,加入选择元素
tempPicked.length = 0; //清空数组
//把变红之前的颜色保存
pickedFeature.precolor = precolor;
tempPicked.push(pickedFeature);
}
//属性显示
//_this.showAttr(tempPicked, pickedFeature);
}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
写的逻辑比较繁琐,如果有优化建议,希望能够一起探讨。

7455

被折叠的 条评论
为什么被折叠?



