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

Forge Viewer如何获取Autodesk.Section剖切框实时包围盒

Autodesk.Section扩展实时剖切包围盒获取方案

现有方案失效原因

  • 社区流传的sb.tool.getSectionBoxValues()、sb.tool.utilities.getBoundingBox()两个接口,读取的是剖切框首次创建时写入内部缓存的默认值。用户对剖切框做平移、旋转、缩放操作时,这部分缓存不会同步刷新,因此只能拿到初始生成状态的数值。
  • 直接通过CutPlanes数组自行计算的方式存在逻辑缺陷:CutPlanes存储的是世界坐标系下的平面方程参数,当剖切框存在旋转角度时,直接取平面x/y/z分量与w分量相乘的计算方式没有纳入旋转变换换算,仅在剖切框与世界坐标轴完全对齐时结果才准确,其余场景都会出现偏差。

可直接复用的正确实现

直接读取剖切工具内部维护的剖切框网格对象,结合Three.js原生包围盒计算接口获取实时状态即可,该方式会自动纳入所有平移、旋转、缩放变换的影响,返回结果与视图中显示的剖切框完全匹配:

const sectionExtension = viewer.getExtension('Autodesk.Section');
if (!sectionExtension?.tool) return null;

// 兼容不同版本Viewer的剖切框mesh获取逻辑
const sectionBoxMesh = sectionExtension.tool.getSectionBox?.() 
  || sectionExtension.tool.sectionBoxGizmo?.boxMesh;
if (!sectionBoxMesh) return null;

// 强制更新世界变换矩阵,确保拿到最新交互状态
sectionBoxMesh.updateMatrixWorld(true);

// 计算实时世界坐标系下的包围盒
const realtimeSectionBBox = new THREE.Box3().setFromObject(sectionBoxMesh);

补充说明

  • 上述逻辑适配v7及以上版本的APS(原Forge Viewer),其中getSectionBox()是剖切工具内部稳定存在的方法,虽未写入公开API文档,但从v7版本迭代至今逻辑未发生变动,可放心使用。
  • 如果需要获取剖切框未应用变换的原始尺寸,直接读取sectionBoxMesh.geometry.boundingBox即可,该值为剖切框局部坐标系下的固定尺寸。
  • 不推荐通过CutPlanes反向推导包围盒:剖切框旋转时,需要计算6个平面的相交顶点才能还原框体,计算逻辑复杂且容易引入浮点误差,直接读取gizmo对象的方式性能和准确率都更高。

内容的提问来源于stack exchange,提问作者Bandu W

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 19:06:22