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

ACC Issues状态与Forge Viewer getState()的cutplanes不一致原因及适配咨询

ACC Issues API与Forge Viewer切割平面参数差异问题解答

问题1:为何两者的cutplanes参数不一致?

ACC Issues API返回的切割平面参数基于模型原始设计坐标系,而Forge Viewer getState()返回的参数基于Viewer内部场景坐标系,核心差异来自两点:

  • 坐标系基准不同:Viewer场景坐标系已应用globalOffset偏移,将模型设计原点平移至Viewer场景原点附近;ACC参数始终以设计原点为基准计算。
  • 切割平面公式符号定义不同:切割平面通用表达式为ax + by + cz + d = 0,但Viewer内部对d值的符号做了反转以适配渲染逻辑,导致正负与ACC端结果相反。

这两个因素叠加,就出现了数值量级和正负均不一致的情况,哪怕两个环境的globalOffset值相同。

问题2:是否需要类似globalOffset的额外转换来使参数一致?

需要,且要同时处理坐标系偏移和符号适配,转换逻辑如下:
假设ACC返回的切割平面为[a, b, c, d_acc],Viewer的globalOffset为{x: ox, y: oy, z: oz},转换为Viewer可用参数的公式是:
d_viewer = -(d_acc + a*ox + b*oy + c*oz)

示例代码

// 从ACC Issues API获取的切割平面
const accCutplane = [0, 0, 1, 4.6132731437683105];
// 获取Viewer的全局偏移量
const globalOffset = viewer.model.getData().globalOffset;
// 解构参数并计算转换后的d值
const [a, b, c, dAcc] = accCutplane;
const dViewer = -(dAcc + a * globalOffset.x + b * globalOffset.y + c * globalOffset.z);
// 转换后可直接用于Viewer的切割平面参数
const viewerCutplane = [a, b, c, dViewer];

用你的示例验证:假设globalOffset.z为-1110.8584880606777,代入后计算出的dViewer正好是-1106.2452149169094,和Viewer getState()返回的结果完全匹配。


内容的提问来源于stack exchange,提问作者RENZO GIANCARLO RIOS RUGEL

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 07:12:46