Forge Viewer多模型加载时Document Node为空致像素对比失效求助
解决Forge Viewer 7.90.0+多模型场景下Pixel Compare扩展报错问题
针对你遇到的TypeError: can't access property "getRootNode", this.secondaryModel.getDocumentNode() is null报错,这是Viewer 7.90.0版本对Pixel Compare扩展的依赖逻辑做了调整导致的——新版本要求对比的模型必须关联有效的文档节点(Document Node),而多模型加载时如果未通过正确方式加载第二个模型,就会出现节点缺失的情况。以下是两种可行的解决办法:
方案一:通过loadDocumentNode加载secondary模型
这是官方推荐的加载方式,能确保模型自动关联对应的文档节点:
// 加载主模型(示例) const primaryUrn = 'your-primary-model-urn'; Autodesk.Viewing.Document.load(primaryUrn, (primaryDoc) => { const primaryViewable = primaryDoc.getRoot().getDefaultGeometry(); viewer.loadDocumentNode(primaryDoc, primaryViewable).then(() => { // 主模型加载完成后,加载secondary模型 const secondaryUrn = 'your-secondary-model-urn'; Autodesk.Viewing.Document.load(secondaryUrn, (secondaryDoc) => { const secondaryViewable = secondaryDoc.getRoot().getDefaultGeometry(); viewer.loadDocumentNode(secondaryDoc, secondaryViewable, { preserveView: true, // 保持当前视图位置 keepCurrentModels: true // 保留已加载的主模型 }).then((secondaryModel) => { // 初始化Pixel Compare扩展并设置secondary模型 const pixelCompareExt = viewer.getExtension('Autodesk.PixelCompare'); pixelCompareExt.setSecondaryModel(secondaryModel); // 执行后续对比操作,比如开启对比模式 pixelCompareExt.startCompare(); }); }, (err) => console.error('加载secondary文档失败:', err)); }); }, (err) => console.error('加载primary文档失败:', err));
方案二:手动为已加载的secondary模型设置文档节点
如果你的项目已经采用loadModel方式加载secondary模型,可以手动为模型关联文档节点:
// 假设已通过viewer.loadModel加载了secondaryModel const secondaryUrn = 'your-secondary-model-urn'; Autodesk.Viewing.Document.load(secondaryUrn, (secondaryDoc) => { // 手动将文档根节点赋值给secondary模型的documentNode属性 secondaryModel.documentNode = secondaryDoc.getRoot(); // 初始化Pixel Compare扩展 const pixelCompareExt = viewer.getExtension('Autodesk.PixelCompare'); pixelCompareExt.setSecondaryModel(secondaryModel); // 执行对比操作 }, (err) => console.error('加载secondary文档失败:', err));
注意事项
- 确保secondary模型的URN和加载的文档URN完全匹配,避免文档与模型不对应导致的节点无效
- 加载secondary模型时必须启用
keepCurrentModels: true,否则主模型会被替换,无法进行对比
内容的提问来源于stack exchange,提问作者mudo121
相关产品推荐
相关产品推荐

