Cesium primitive 多种线元素,选中变色,且只有一条变色

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);

写的逻辑比较繁琐,如果有优化建议,希望能够一起探讨。 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值