Autodesk Forge的PixelCompare扩展调用报错及文件不支持问题求助
问题原因及解决方案
第一个报错:viewer.compareTwoModels is not a function
- 原因:
compareTwoModels不是Viewer实例自带的方法,属于PixelCompare扩展实例的专属方法,预加载扩展后需要先拿到扩展实例才能调用对应方法,不能直接在viewer对象上调用。 - 修复代码示例:
// 先从viewer中获取已预加载的PixelCompare扩展实例 const pixelCompareExt = viewer1.getExtension('Autodesk.Viewing.PixelCompare') // 调用扩展的对比方法 pixelCompareExt.compareTwoModels(data[0], data[1])
第二个报错:file extension unsupported
- 原因:
viewer.loadModel()方法仅支持直接传入SVF、SVF2、OBJ等格式的模型文件直链,无法直接识别URN(模型资源标识符),加载URN对应的转换后模型必须使用Autodesk.Viewing.Document.load先解析文档,再通过loadDocumentNode加载视图节点,直接将URN传给loadModel会触发格式不支持报错。 - 完整修复代码示例:
// 封装URN转模型实例的加载方法 async function loadModelFromUrn(urn, xOffset) { return new Promise((resolve, reject) => { Autodesk.Viewing.Document.load( `urn:${urn}`, (doc) => { const viewable = doc.getRoot().getDefaultGeometry() doc.downloadAecModelData() viewer1.loadDocumentNode(doc, viewable, { placementTransform: new THREE.Matrix4().setPosition({x: xOffset, y: 0, z: 0}), keepCurrentModels: true, globalOffset: {x: 0, y: 0, z: 0} }).then(model => resolve(model)) .catch(err => reject(err)) }, (loadErr) => reject(loadErr) ) }) } // 执行像素对比逻辑 async function executeCompare(urn1, urn2) { // 加载两个待对比模型,偏移量按你的业务需求调整 const model1 = await loadModelFromUrn(urn1, 0) const padding = parseInt(sessionStorage.getItem('padding1')) || 10 const model2 = await loadModelFromUrn(urn2, padding) // 加载扩展并执行对比 const pcExt = await viewer1.loadExtension('Autodesk.Viewing.PixelCompare') pcExt.compareTwoModels(model1, model2) } // 传入你要对比的两个URN调用即可 executeCompare( 'dXJuOmFkc2sud2lwcHJvZDpmcy5maWxlOnZmLmwwLS10X0k5UkVhbnNWRXBuLXl5Zmc_dmVyc2lvbj0x', 'dXJuOmFkc2sud2lwcHJvZDpmcy5maWxlOnZmLmxXX0dONUJNVDBxdDRuOGZmRWx4SkE_dmVyc2lvbj0x' )
内容的提问来源于stack exchange,提问作者itsmejohn
相关产品推荐
相关产品推荐

