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

并行加载3D格式DXF模型报错及支持性咨询

DXF 3D模型并行加载问题

使用loadDocumentNode并行加载多份3D格式DXF文件时会抛出错误,报错相关代码如下:

const viewable3d = viewerDocument.getRoot().search({ type: "geometry", role: "3d" })

当前存在以下现象:

  • 使用viewerDocument.getRoot().getDefaultGeometry()可正常加载,但仅能加载2D模型;
  • 逐一加载3D模型无报错,但加载速度较慢且会触发重渲染。

请问:

  1. DXF是否支持并行加载3D模型?
  2. 如何实现3D格式DXF文件的并行加载?

附完整代码实现:

export function initViewer(
  container: any,
  getAccessTokenFn: (callback: (accessToken: string, expires: number) => void) => void
) {
  return new Promise(function (resolve, reject) {
    Autodesk.Viewing.Initializer(
      {
        env: "AutodeskProduction2",
        api: "streamingV2",
        getAccessToken: getAccessTokenFn,
      },
      function () {
        const config = {
          extensions: ["Autodesk.DocumentBrowser"],
        };
        const viewer = new Autodesk.Viewing.GuiViewer3D(container, config);
        viewer.start();
        resolve(viewer);
      }
    );
  });
}

function loadModel(viewer:any, urn:string) {
  return new Promise(function (resolve, reject) {
    function onDocumentLoadSuccess(viewerDocument: any) {
      // const viewable3d = viewerDocument.getRoot().search({ type: "geometry", role: "3d" })[0];  // Loading 3D models will throw error
      const viewable3d = viewerDocument.getRoot().getDefaultGeometry(); // Successfully load 2D models
      const options: any = {
        keepCurrentModels: true,
        preserveView: false,
        globalOffset: { x: 0, y: 0, z: 0 },
      };
      viewer
        .loadDocumentNode(viewerDocument, viewable3d, options)
        .then((model: any) => {
          resolve(model);
        })
        .catch(reject);
    }

    function onDocumentLoadFailure(code: any) {
      reject(`Could not load document (${code}).`);
    }
    Autodesk.Viewing.Document.load("urn:" + urn, onDocumentLoadSuccess, onDocumentLoadFailure);
  });
}

export function loadDXFModels(viewer:any, urns: string[]) {
  return new Promise(function (resolve, reject) {
    const promises = urns.map(urn => loadModel(viewer, urn));
    Promise.allSettled(promises)
      .then(models => {
        resolve(models);
      })
      .catch(reject);
  });
}

内容的提问来源于stack exchange,提问作者Jiqi Li

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 22:23:13