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

如何在Autodesk Forge中仅加载主模型(ReactJS实现)

仅加载Forge主模型的React实现方案

要实现只加载主模型、跳过关联模型,核心是通过Autodesk.Viewing.Document获取主模型节点,再用loadDocumentNode加载该节点,而非默认加载整个文档的所有模型。以下是具体实现步骤和React代码示例:

核心思路

  1. 先加载文档(而非直接加载模型),获取文档的根节点
  2. 从根节点中筛选出主模型节点(通过isPrimary属性判断)
  3. 调用viewer.loadDocumentNode仅加载该主模型节点

React代码示例

import React, { useEffect, useRef } from 'react';

function ForgeViewer() {
  const viewerContainer = useRef(null);
  let viewer = null;

  useEffect(() => {
    if (!viewerContainer.current) return;

    // 初始化Forge Viewer
    const initOptions = {
      env: 'AutodeskProduction',
      getAccessToken: (callback) => {
        // 替换为你的Token获取逻辑(比如调用后端接口)
        fetch('/api/forge/token')
          .then(res => res.json())
          .then(data => callback(data.accessToken, data.expiresIn));
      }
    };

    Autodesk.Viewing.Initializer(initOptions, () => {
      viewer = new Autodesk.Viewing.GuiViewer3D(viewerContainer.current);
      viewer.start();
      // 加载目标模型(替换为你的模型URN)
      loadPrimaryModelOnly('your-model-urn');
    });

    // 组件卸载时清理Viewer
    return () => {
      if (viewer) {
        viewer.finish();
        viewer = null;
      }
    };
  }, []);

  const loadPrimaryModelOnly = (modelUrn) => {
    const onDocLoadSuccess = (doc) => {
      // 获取文档根节点
      const rootNode = doc.getRoot();
      // 搜索主模型节点(isPrimary标记为true的节点)
      const primaryModelNode = rootNode.search({ isPrimary: true })[0];

      if (primaryModelNode) {
        // 仅加载主模型节点
        viewer.loadDocumentNode(doc, primaryModelNode, {
          keepCurrentModels: false
        })
        .then(() => {
          console.log('主模型加载完成');
        })
        .catch(err => {
          console.error('主模型加载失败:', err);
        });
      } else {
        // 备选:遍历子节点找第一个可加载的几何模型节点
        const geometryNodes = rootNode.search({ type: 'geometry' });
        if (geometryNodes.length > 0) {
          viewer.loadDocumentNode(doc, geometryNodes[0]);
        } else {
          console.error('未找到可加载的主模型节点');
        }
      }
    };

    const onDocLoadError = (err) => {
      console.error('文档加载失败:', err);
    };

    // 加载文档(URN需要加前缀"urn:")
    Autodesk.Viewing.Document.load(`urn:${modelUrn}`, onDocLoadSuccess, onDocLoadError);
  };

  return (
    <div 
      ref={viewerContainer}
      style={{ width: '100%', height: '90vh', border: '1px solid #eee' }}
    />
  );
}

export default ForgeViewer;

关键说明

  • isPrimary属性:Forge会给主模型节点标记isPrimary: true,这是最可靠的筛选方式
  • 备选筛选逻辑:如果某些场景下isPrimary不生效,可以通过搜索type: 'geometry'的节点,取第一个作为主模型加载
  • 避免默认加载:不要使用viewer.loadModel方法,它会自动加载文档下所有关联模型
  • React生命周期:组件卸载时必须调用viewer.finish()释放资源,防止内存泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 21:57:31