返回 BIM 与 IFC 博客
IFC 中的 GlobalId 是什么?
IFC 文件中每一个继承自 IfcRoot 的实体(包括所有实体构件、空间、楼层、建筑和场地)都有一个 GlobalId 属性。它是一个 22 个字符的字符串,采用自定义的 base-64 字母表;按照设计,它应当全局唯一,在各次修订之间保持稳定,并且在不同软件之间往返传递时始终不变。
#100 = IFCWALL('3LYa_FRDj3zhLfyYoQv6Jr', $, 'Exterior Wall - 300mm', $, $, #88, #92, $, .NOTDEFINED.);
#101 = IFCDOOR('3LYa_FRDj3zhLfyYoQv6Jr', $, 'Door D001', $, $, #89, #93, $, .NOTDEFINED.);
// Both elements share the same GlobalId — IFC schema violation.
IFC 规范(ISO 10303-21)禁止出现重复的 GlobalId。但规范本身无法强制执行这一点:文件解析器拿到什么就加载什么,大多数解析器甚至根本不做检查。结果就是:一个结构上有效的文件里,同一个 GlobalId 被两个构件同时认领。
重复是怎么产生的
- Revit 重新导出:默认情况下,某些 Revit 导出配置会在每次导出时重新生成 GUID。同一模型的两次导出会得到不同的 GUID;如果第三次导出又从旧文件中复制了某个构件,就会发生冲突。
- 建模软件中的复制粘贴:复制族实例时没有触发 GUID 刷新(这在 ArchiCAD 和 Vectorworks 中很常见),就会产生两个 GlobalId 完全相同的构件。
- 模型合并:合并两个 IFC 文件时不检查二者之间的 GUID 冲突,必然会引入重复,尤其是当两个文件都导出自同一个源模型时。
- 脚本生成的 GUID:自定义导出脚本用普通 UUID(32 个十六进制字符)生成 GUID,再不经正确的 base-64 编码就截断为 22 个字符,结果生成的字符串不唯一,或者格式无效。
重复 GUID 会破坏什么
BCF 协调
BCF 问题通过 GlobalId 引用构件。一旦重复,评论就会附着到接收方工具碰巧先加载的那个构件上,另一个构件则再也无法通过引用找到。
Revit IFC 链接
Revit 的 IFC 链接解析器使用 GlobalId 在模型更新之间跟踪构件版本。重复会导致构件在各次更新之间随机互换身份,使变更跟踪失效。
CDE 资产登记表
ACC、ProjectWise 等公共数据环境(CDE)按 GlobalId 为 IFC 构件建立索引,用于移交数据。重复会产生“幽灵资产”:它们出现在登记表中,却无法在模型中找到。
COBie 导出
COBie 表格以 IfcSpace 和 IfcAsset 的 GlobalId 为键来组织设施管理数据。重复的空间会在运维(FM)移交资料包中产生重复的行。
如何检测重复 GUID
在任何 CDE 交付之前都要运行验证。RULE_DUPLICATE_GUID 检查会标出每一个与其他构件共用 GlobalId 的构件;而且它支持自动修复,也就是说,验证工具可以一键为这些重复项生成符合规范的新 GUID。
在线验证 Duplex 模型
在查看器中打开 buildingSMART 的 Duplex 模型,看看一份干净的验证报告是什么样子。然后试着打开你自己的项目文件,检查是否存在重复 GUID。
IFC2x3 · 2.4 MB
打开交互式 IFC 查看器
如何修复重复 GUID
方法 1:在验证工具中自动修复
IFC Viewer 验证工具会把重复 GUID 问题标记为可自动修复。点击任意 RULE_DUPLICATE_GUID 问题旁的修复图标,即可生成一个符合规范的新 GlobalId:一个 22 个字符的字符串,使用正确的 IFC base-64 字母表(0–9、A–Z、a–z、_、$),首字符在 0–3 之间。
方法 2:在 Revit 中修复
在使用开源 IFC 导出器的 Revit 中:File → Export → IFC → Modify Setup → Advanced 选项卡 → 将“Export IFC GUIDs”设为“Keep Existing”。这样会保留 Revit 在内部分配的稳定 GlobalId,而不是每次导出时重新生成。
方法 3:在 ArchiCAD 中修复
在 ArchiCAD 中:File → Save As → IFC 2x3 → Settings → IFC Translation Settings → 启用“Write stable GlobalIDs (from AC internal IDs)”。如果不启用此项,ArchiCAD 每次导出都会生成新的 GUID。
IFC 中的重复 GUID:悄无声息却会破坏一切的错误