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

Autodesk Forge JS Viewer加载多模型位置偏移问题求助

解决Autodesk JS Viewer加载拆分模型位置偏移问题

当你加载从同一大模型拆分出的两个模型时,默认的keepCurrentModels: true配置只是保留现有模型,但不会自动对齐坐标系——这就是为什么ACC模型协调能正常显示,而你的代码不行的核心原因:ACC会自动识别并应用共享坐标系/全局偏移,Viewer默认却不会。

以下是具体解决步骤:

1. 核心思路:对齐全局偏移

拆分后的模型如果来自同一源文件,它们的全局偏移(globalOffset)应该一致,加载第二个模型时手动指定和第一个模型相同的全局偏移即可。

2. 修改后的代码示例

// 先加载第一个模型,作为坐标系基准
Autodesk.Viewing.Document.load(`urn:${urns[0].urn}`, (firstDoc) => {
  const firstViewables = firstDoc.getRoot().getDefaultGeometry();
  this.viewer.loadDocumentNode(firstDoc, firstViewables).then(() => {
    // 获取第一个模型的全局偏移数据
    const baseModel = this.viewer.getVisibleModels()[0];
    const baseOffset = baseModel.getData().globalOffset;

    // 加载第二个模型时,指定全局偏移与第一个模型对齐
    Autodesk.Viewing.Document.load(`urn:${urns[1].urn}`, (secondDoc) => {
      const secondViewables = secondDoc.getRoot().getDefaultGeometry();
      const loadConfig = {
        keepCurrentModels: true,
        globalOffset: baseOffset // 关键:强制使用基准模型的全局偏移
      };
      this.viewer.loadDocumentNode(secondDoc, secondViewables, loadConfig).then(() => {
        console.log('模型已对齐加载完成');
      });
    });
  });
});

3. 特殊情况处理

如果上述方法无效,可能是模型使用了自定义共享坐标系,可尝试:

  • 查看模型元数据:通过model.getDocumentNode().getMetadata()检查是否有sharedCoordinates相关信息
  • 手动调整模型位置:加载第二个模型后,调用secondModel.setPlacementTransform(new THREE.Matrix4().makeTranslation(x, y, z))来手动平移对齐,其中x/y/z是两个模型的原点差值
  • 使用坐标系API:调用viewer.setActiveCoordinateSystem(baseModel.getCoordinateSystem())将第二个模型切换到基准模型的坐标系

内容的提问来源于stack exchange,提问作者wang xiaoyu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 11:17:12