You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让APS Viewer中的自定义几何模型支持点击交互?

实现方向与实操步骤

一、正确注入自定义Three.js几何

Viewer的交互和数据系统不认原生Three.js网格,得按它的规则来:

  • 用Three.js建好几何体、材质后,调用viewer.impl.createMesh(geometry, material)生成Viewer能识别的网格对象,这个对象会被Viewer内部系统追踪。
  • 给自定义几何分配唯一dbId:从现有模型的最大dbId(比如viewer.model.getData().instanceTree.maxId + 1)开始往上加,别和原生模型的ID冲突。
  • 把网格加到Viewer的叠加层里:用viewer.impl.addOverlay('custom-geo-layer', mesh),这样不会和原生模型的渲染、拾取逻辑打架。

二、实现和原生模型一样的交互

要让自定义几何能被选、高亮、拾取,得把它纳入Viewer的交互系统:

  • 处理拾取逻辑:Viewer的拾取器靠dbId识别元素,你可以加个选择监听器viewer.impl.addSelectionListener,在回调里判断鼠标是否命中自定义几何,命中的话就手动触发选择逻辑。
  • 高亮效果:直接用viewer.impl.highlightObject(mesh, true)高亮,取消就传false。
  • 同步选择状态:选中自定义几何时,调用viewer.select([你的自定义dbId]),这样Viewer的其他组件(比如属性面板)会认为这是个正常选中的元素。

三、把自定义几何纳入控制台组件(比如数据网格)

数据网格之类的组件依赖Viewer的属性系统,得给自定义几何造一套虚拟属性数据:

  • 先定义属性:给你的自定义dbId准备好属性键值对,比如{ id: 自定义dbId, properties: [{ displayName: "几何类型", displayValue: "自定义支架" }, { displayName: "尺寸", displayValue: "100x200mm" }] }。
  • 扩展属性面板:写个Viewer扩展,监听属性面板的加载事件,当选中自定义几何时,把你定义的属性塞到面板里。
  • 适配数据网格:如果用APS的Data Grid,把自定义几何的属性转成组件要求的格式(得包含dbId、name、properties这些字段),然后通过组件的数据源接口传进去;或者扩展Viewer的model.getData().properties方法,让数据网格能读到自定义几何的属性。

四、踩坑提醒

  • 别乱改Viewer私有API:虽然有些功能要用到viewer.impl下面的方法,但尽量用官方的扩展机制,不然Viewer版本一更新就崩。
  • 性能要注意:自定义几何多的话,要复用材质和几何体,别每次都新建,不然卡得要死。
  • 版本兼容:不同Viewer版本的内部逻辑可能变,要对照官方文档调整。

内容的提问来源于stack exchange,提问作者Santiago Diaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 09:37:42