返回 BIM 与 IFC 博客
工具与对比 · 2026-10-02 · 11 分钟
IFC 文件里有什么?用示意图讲清 IFC 格式
.ifc 文件是可以用代码编辑器打开的纯文本——一旦学会读它,IFC 的一半谜团就消失了。文件头、编号实例、GlobalId、承载属性的关系:本文把这个格式画出来。
IFC 文件里有什么?用示意图讲清 IFC 格式 — IFC Viewer Online article cover
大多数人只通过查看器看过 IFC 文件。这很可惜,因为 .ifc 文件是纯文本,花十分钟读一读,就能解释很多原本令人困惑的事情:为什么 GUID 很重要,为什么明明看得到的属性会“缺失”,为什么文件这么大,为什么导出时一个错误设置会让下游全部出错。
本文打开文件,把里面的内容画出来。
STEP 格式(ISO 10303-21)的 IFC 文件:文件头指明 Schema,之后每行一个编号实例。
要点
- IFC 文件是一串编号实例。编号只在文件内有效,每次导出都会变化。
- GlobalId——每个实例中的 22 位字符串——才是设计上要长期保持的身份标识。
- 几乎所有重要信息,包括属性和空间包含,都是通过关系实体关联的,而不是直接存在构件上。
文件头:哪个 Schema,哪种视图
文件以 ISO-10303-21; 开头,后面是简短的 HEADER 段。其中三行最重要:
- FILE_DESCRIPTION 指明模型视图定义(MVD)——Coordination View、Reference View、Design Transfer View——即导出器打算使用的 IFC 子集。
- FILE_NAME 记录文件名、时间戳、作者和建模软件。
- FILE_SCHEMA 指明 Schema:IFC2X3、IFC4 或 IFC4X3。下面的每一行都按这个 Schema 解读;同一个实体在不同版本中可能有不同属性。
如何选择 Schema 版本是另一个话题:IFC2x3 与 IFC4 的区别。
数据段:每行一个实例
在 DATA; 之后,每一行的形式都相同:一个编号、一个实体名,以及按 Schema 规定顺序排列的属性列表。
#245= IFCWALL('1kTvXnbbzCWw8lcMd1dR4o',#2,'Basic Wall:Ext 300',$,$,#210,#240,$,.STANDARD.);
| 片段 | 含义 |
|---|
| #245 | 实例编号(express ID)——仅在本文件内有效 |
| '1kTvXnbbz…' | GlobalId——22 位压缩 GUID |
| #2 | 对另一个实例的引用(这里是 owner history) |
| $ | 属性未设置 |
| .STANDARD. | 枚举值(预定义类型) |
| #210, #240 | 定位和几何表达,定义在其他行中 |
如果 GlobalId 本身在每次导出时都变化,下游所有流程会同时失效。原因及各建模软件的修复方法见 为什么每次导出 IFC GUID 都会变。
实体之间存在继承
IFC 是一个对象模型。IfcWall 是 IfcBuiltElement,IfcBuiltElement 是 IfcElement、IfcProduct、IfcObject,最终是 IfcRoot——它带有所有这些上层实体的属性。这就是为什么每面墙、每扇门、每个空间都有 GlobalId 和 Name:它们来自 IfcRoot。
每个实体都继承其上级类型的属性。针对 IfcElement 编写的检查适用于其下的所有墙、门和柱。
名称会随版本变化:IFC4.3 中的 IfcBuiltElement 在 IFC2x3 和 IFC4 中叫 IfcBuildingElement。把名称写死在代码里的工具会漏掉另一个——这也是同一个模型在一个工具中通过检查、在另一个工具中却不通过的原因之一。
关系本身也是实体
让 IFC 起初难以阅读的设计决策,也正是它强大的原因:关系本身就是对象。一面墙并没有自己的属性列表,而是由一个 IfcRelDefinesByProperties 实例同时指向这面墙和一个属性集。空间包含、材料、类型、洞口和分组也都是同样的方式。
属性存放在属性集中,关联到构件或其类型。类型上的属性集适用于该类型的所有实例。
这正是 IFC 质量检查中最常见误报的根源:定义在类型上的属性,对只读取实例的工具来说看起来像是缺失。真正的原因见 导出后 IFC 属性缺失;如何在代码中跟踪这些关系,见 用 Python 读取属性集。
为什么 IFC 文件这么大
- 几何占大头。一面三角化的幕墙或一个精细的机电配件可能占用数千行;拉伸体和映射(实例化)几何则小得多。
- 重复的数据会被重复写入。不共享属性集或几何表达的导出器,会为每个构件写一遍相同的内容。
- 纯 STEP 格式没有任何压缩。ifcZIP 通常能把文件缩小数倍,在接收方工具支持时是合理的交付格式。
安全的瘦身方法见 如何减小 IFC 文件大小。如果文件大到让浏览器崩溃,请看 大型 IFC 文件导致浏览器崩溃。
自己动手读文件
- 用文本编辑器打开 任何能处理大文件的编辑器都行。先看文件头:Schema 和模型视图会告诉你该期待什么。
- 搜索你关心的实体 IFCWALL(、IFCSPACE(、IFCBUILDINGSTOREY(。仅看数量就是一次快速的合理性检查。
- 追踪一个构件的引用 从一面墙出发,搜索它的 # 编号,找到指向它的关系——包含、属性、类型。
- 然后切换到查看器 同样的信息,但可以导航:空间树、属性面板,以及替你检查这些关系的验证功能。
构件如何组织到楼层和空间中,见 IFC 空间结构详解。
IFC 文件里有什么?用示意图讲清 IFC 格式