设为首页收藏本站

skylineglobe技术交流社区

 找回密码
 注册
查看: 951|回复: 0

鼠标点击选中效果实现

[复制链接]

14

主题

14

帖子

115

积分

超级版主

Rank: 8Rank: 8

积分
115
QQ
发表于 2020-4-29 09:09:45 | 显示全部楼层 |阅读模式
本帖最后由 lichen 于 2020-4-29 09:59 编辑

就拿上次加载的WFS图层来进行图层单个要素选中效果实现。
实现方式是:1、绑定鼠标左击事件;2、获取鼠标点击位置;3、获取单个要素对象;4、设置颜色function geto() {
//1、绑定事件
      SGWorld.AttachEvent('OnLButtonClicked', getFeasture);
    }
    function getFeasture(Flags, X, Y) {
//2、获取鼠标坐标
      var mousePos = SGWorld.Window.PixelToWorld(X, Y);
      if (mousePos) {
        if (mousePos.ObjectID) {
//3、获取对象
          let obj = SGWorld.ProjectTree.GetObject(mousePos.ObjectID);
          if (obj.ObjectType == '33') {
//4、设置颜色
            SetFeatureColor(obj.ID);
          }
        }
      }
    }


  1. let temID = null;
  2.     function SetFeatureColor(id) {
  3.       try {
  4.         if (temID == null) {
  5.           let obj = SGWorld.ProjectTree.GetObject(id);
  6.           obj.Tint.FromHTMLColor("#ff0000");
  7.           obj.Tint.SetAlpha(1);
  8.           temID = id;
  9.         }
  10.         else {
  11.           let temObj = SGWorld.ProjectTree.GetObject(temID);
  12.           temObj.Tint.SetAlpha(0);
  13.           let obj = SGWorld.ProjectTree.GetObject(id);
  14.           obj.Tint.FromHTMLColor("#ff4400");
  15.           obj.Tint.SetAlpha(1);
  16.           temID = id;
  17.         }
  18.       } catch (e) {
  19.         temID = id;
  20.       }
  21.     }
复制代码
实现的高亮如下:







还有另外一种方法,就是获取元素的geometry,再创建一个Polygon,这样再选中大面积元素的时候,会比Tint快一点,
let temID = null;
    function setLine(id) {
      let lineColor = SGWorld.Creator.CreateColor(255, 10, 0, 1);
      let fillColor = SGWorld.Creator.CreateColor(255, 10, 0, 0);
      if (temID == null) {
        let obj = SGWorld.ProjectTree.GetObject(id);
        let poly = SGWorld.Creator.CreatePolygon(obj.Geometry, lineColor, fillColor, 2, '', '');
        poly.LineStyle.Width = -25;
        temID = poly.ID;
      } else {
        SGWorld.ProjectTree.DeleteItem(temID);
        let obj = SGWorld.ProjectTree.GetObject(id);
        let poly = SGWorld.Creator.CreatePolygon(obj.Geometry, lineColor, fillColor, 2, '', '');
        poly.LineStyle.Width = -25;
        temID = poly.ID;
      }
    }

线宽设置为负值,会变成像素值,更明显一些。








本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋| SkylineGlobe ( 京ICP备09046777号 )   

GMT+8, 2020-10-31 11:46 , Processed in 0.076389 second(s), 23 queries .

Powered by Skyline中国社区!

© 2013 skylineglobe.cn.

快速回复 返回顶部 返回列表