首页 / 浏览问题 / 三维GIS / 问题详情
超图三位框架如何精确拾取
14EXP 2023年01月31日
使用产品:SuperMap iClient3D 11i (2022) SP1 for WebGL 操作系统:win10 x64

问题详细描述:使用该产品,想通过点击拾取primitive。尝试过通过viewer.scene.pick(e.position)的方式拾取,但是十分不精确,很难获取到想要的结果。有没有什么办法能够精确拾取?

1个回答

您好,您现在是通过坐标的方式去得到的吗?

建议您可以换一个思路,当您点击具体对象,该对象高亮时,其实对象已经被存放在选择集中了,即此时 viewer.selectedEntity会存在对象,

 通过viewer.selectedEntity.primitive来进行货去。

可以选择触发的事件比较多,单纯的点击事件、选择对象变化事件selectedEntityChanged、图形操作监听事件ScreenSpaceEventHandler(建议该事件)等,

看您业务需求和代码习惯来选择即可。

希望可以帮助到您。
10,588EXP 2023年01月31日
不是很理解您的意思(可能是我不会用viewer.selectedEntity.primitive)。我需要通过点击获取primitive,是在ScreenSpaceEventHandler的左键单击事件下,通过const pick=viewer.scene.pick(e.position)来得到的,但并不精确。我理解的您的回答得出是用const pick=viewer.selectedEntity.primitive这种方式来获取,但是我获取不到
let selecthandler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
    selecthandler.setInputAction(e => {
      //获取选择对象的数据集名称
      var entName = viewer.selectedEntity.primitive._name;
      //获取选择对象id
      var entId = viewer.selectedEntity.id;
    }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
  }

我是这样使用的,点击到实体对象时就会触发这个事件,获取到点击到对象。
...