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

使用Autodesk Forge Viewer加载Navisworks文件时遇TypeError问题

解决Autodesk Forge Viewer加载Navisworks模型时的getNamedViews错误

问题分析

你遇到的TypeError: Cannot read properties of null (reading 'getNamedViews')错误,根源是手动构造Navisworks模型的加载参数(svfUrl和modelOptions)时,未适配Navisworks转换后的SVF结构,导致Viewer内部尝试访问一个不存在的对象。Revit、FBX等格式的模型结构与Navisworks不同,因此不会触发该问题。

解决方案

改用Viewer官方推荐的loadDocumentNode方法加载模型,该方法会自动适配不同格式模型的加载逻辑,无需手动构造路径和参数。修改后的代码如下:

const lunchViewer = (urn) => {
    var options = {
        env: 'AutodeskProduction',
        getAccessToken: getForgeToken,
    };
    var documentId = 'urn:' + urn;

    window.Autodesk.Viewing.Initializer(options, () => {
        window.Autodesk.Viewing.Document.load(
            documentId,
            onDocumentLoadSuccess,
            onDocumentLoadFailure
        );
    });
};

const onDocumentLoadSuccess = (doc) => {
    // 获取默认几何视图,替代手动搜索更可靠
    const initGeom = doc.getRoot().getDefaultGeometry();
    if (!initGeom) {
        console.error('Document contains no geometries.');
        return;
    }

    const viewerDiv = document.getElementById('viewer');
    const config = {
        extensions: [
            'Autodesk.DocumentBrowser',
            'Autodesk.Viewing.MarkupsCore',
        ],
    };
    // 使用公共GuiViewer3D类,避免私有API兼容性问题
    const viewer = new window.Autodesk.Viewing.GuiViewer3D(
        viewerDiv,
        config
    );

    // 初始化Viewer并检查结果
    const startedCode = viewer.start();
    if (startedCode > 0) {
        console.error('Failed to initialize viewer', startedCode);
        return;
    }

    // 用loadDocumentNode加载模型,自动处理参数
    viewer.loadDocumentNode(doc, initGeom)
        .then(onLoadModelSuccess)
        .catch(onLoadModelError);
};

关键修改点

  • 用doc.getRoot().getDefaultGeometry()替代手动搜索geometries,更准确获取模型的默认视图节点
  • 替换私有类window.Autodesk.Viewing.Private.GuiViewer3D为公共的window.Autodesk.Viewing.GuiViewer3D,规避私有API的兼容性风险
  • 移除手动构造svfUrl和modelOptions的代码,改用viewer.loadDocumentNode方法加载模型,该方法会自动处理不同格式模型的加载参数与逻辑
  • 增加Viewer初始化的错误判断(viewer.start()的返回值)

多模型加载与视图切换

若需加载多个模型,重复调用viewer.loadDocumentNode加载其他模型的视图节点即可。切换已加载模型的视图时,可通过两种方式实现:

  • 获取模型的命名视图:model.getNamedViews(),再调用viewer.setView(view)完成切换
  • 使用已加载的Autodesk.DocumentBrowser扩展,该扩展内置视图切换功能,无需额外开发

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 12:33:11