Autodesk Forge模型协调API未检测到DOC1与DOC2的冲突
问题:Model Coordination API未检测到DOC1与修改后副本DOC2的冲突
问题描述
- 处理场景:使用Model Coordination API操作3个Revit模型(DOC1、DOC2、DOC3),其中DOC2是DOC1修改族几何后的副本——DOC1仅包含一个圆柱体族,DOC2是从该圆柱体族编辑而来的立方体族。
- 异常现象:调用
GET https://developer.api.autodesk.com/bim360/clash/v3/containers/:containerId/tests/:testId/resources接口获取资源时,未检测到DOC1与DOC2之间的冲突。 - 调用代码:
router.get('/getClashInstance/:containerId/:modelSetId/:version', async (req, res) => { const oauth = new OAuth(req.session); const internalToken = await oauth.getInternalToken(); let apiInstance = new Clash.ClashTestApi(); let defaultClient = Clash.ApiClient.instance; let oauth2AuthCode = defaultClient.authentications['oauth2AuthCode']; oauth2AuthCode.accessToken = internalToken.access_token; const containerId=req.params.containerId const modelSetId=req.params.modelSetId const version=req.params.version try{ const clashTest=await apiInstance.getModelSetVersionClashTests(containerId, modelSetId, version) const testId=clashTest.tests[0].id const resources=await apiInstance.getClashTestResources(containerId,testId) //const clashResource=resources.resources[0] const clashInstanceResource=resources.resources[1] //const documentResource=resources.resources[2] const docJson=await axios({ method: 'get', url:clashInstanceResource.url, responseType: 'arraybuffer', decompress:true }) .catch(function(err){ console.log(err) }) .then(function(data){ const buffer=data.data let tempJson=JSON.parse(buffer.toString('utf-8')) // console.log(tempJson) return tempJson }) res.json( docJson ) //console.log(item) }catch(err){ console.log("err") } })
排查与解决建议
1. 冲突测试规则配置检查
- 确认冲突测试的规则是否包含同一族实例的几何变更检测:Model Coordination默认可能仅检测跨文档硬冲突,需手动检查测试配置,是否开启了几何差异检测的相关选项。
- 先在BIM 360/ACC界面手动创建针对DOC1和DOC2的冲突测试,验证是否能检测到差异,排除API调用外的配置问题。
2. 模型集与版本关联验证
- 确认DOC1和DOC2都已正确添加到目标模型集,且调用
getModelSetVersionClashTests时使用的version参数对应的模型集版本包含这两个模型的最新版本。 - 打印
clashTest返回的完整数据,检查测试的目标模型范围是否覆盖DOC1和DOC2,避免测试仅针对DOC1与DOC3。
3. API资源解析逻辑修正
- 当前代码依赖固定索引
resources.resources[1]获取冲突实例资源,存在索引错误风险:- 打印
resources.resources的完整结构,查看每个资源的type字段(如clash-instances、documents),通过类型匹配获取正确资源:const clashInstanceResource = resources.resources.find(r => r.type === 'clash-instances'); if (!clashInstanceResource) { console.log('未找到冲突实例资源'); return res.status(404).json({ error: 'No clash instances resource found' }); } - 取消注释代码中被屏蔽的
clashResource和documentResource,解析后查看内容,确认是否有冲突数据被遗漏。
- 打印
4. Revit模型发布与族实例验证
- 确认DOC2修改族几何后已正确发布到BIM 360/ACC,云端已同步最新几何数据——本地修改未发布可能导致云端保留旧数据,无法检测到差异。
- 检查DOC2的族实例ID是否与DOC1原实例ID一致:若修改时创建了新族实例而非编辑原有实例,需确认冲突规则是否包含同一元素ID的几何变更检测。
内容的提问来源于stack exchange,提问作者Manriss
相关产品推荐
相关产品推荐

