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

如何在Viewer中实现类似测距工具的模型点捕捉功能?

在Autodesk Viewer中实现类似测距工具的模型点捕捉功能

你当前使用的hitTest方法是获取模型点的基础方式,但要实现内置测距工具那样的精准几何捕捉(比如吸附顶点、边中点、面中心),可以直接利用Viewer内置的SnappingManager来完成,无需手动处理复杂的几何判断。

实现步骤

  1. 启用并配置内置捕捉工具
    先注册并激活SnappingTool,同时根据需求设置捕捉模式和精度:

    // 注册并启用捕捉工具
    viewer.toolController.registerTool(new Autodesk.Viewing.Extensions.Snapping.SnappingTool(viewer));
    viewer.setActiveSnappingTool(true);
    
    // 配置捕捉选项:选择需要的捕捉类型
    const snappingManager = viewer.snappingManager;
    snappingManager.setSnapModes([
      Autodesk.Viewing.Snapping.SNAP_VERTEX,       // 顶点捕捉
      Autodesk.Viewing.Snapping.SNAP_EDGE_MIDPOINT,// 边中点捕捉
      Autodesk.Viewing.Snapping.SNAP_FACE_CENTER   // 面中心捕捉
    ]);
    snappingManager.setSnapTolerance(10); // 捕捉像素容忍度,值越小越精准
    
  2. 在鼠标事件中获取捕捉点
    替换原有的hitTest逻辑,优先通过SnappingManager获取捕捉结果,未捕捉到时再用hitTest作为降级方案:

    document.addEventListener('click', (event) => {
      // 获取捕捉结果
      const snapResult = viewer.snappingManager.getSnapResult(event.clientX, event.clientY);
      if (snapResult) {
        const snappedPoint = snapResult.point; // 捕捉到的三维坐标点
        console.log('捕捉到的点:', snappedPoint);
        // 后续可用于绘制测距线、标记点等操作
      } else {
        // 降级到原始hitTest逻辑
        const pt = viewer.impl.hitTest(
          event.clientX,
          event.clientY,
          true,
          null,
          [mModel.getModelId()]
        );
        if (pt) {
          console.log('HitTest 获取的点:', pt.intersectPoint);
        }
      }
    });
    
  3. 可选:过滤特定模型捕捉
    如果只需要捕捉指定模型的几何点,可添加模型过滤规则:

    snappingManager.addModelFilter(model => model.getModelId() === mModel.getModelId());
    
  4. 可选:监听捕捉实时状态
    可以监听捕捉事件,实时获取捕捉过程中的反馈:

    viewer.addEventListener(Autodesk.Viewing.Snapping.SNAP_EVENT, (event) => {
      console.log('当前捕捉到的几何元素:', event.result);
    });
    

优势说明

内置的Snapping工具已经封装了测距工具同款的捕捉逻辑,包括捕捉点高亮、自动吸附几何特征等,比手动处理hitTest更稳定、更贴合官方工具的交互体验。

内容的提问来源于stack exchange,提问作者Tim Huang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 12:42:43