返回 BIM 与 IFC 博客
交付与 ISO 19650 · 2026-10-01 · 10 分钟
BCF 2.1 与 3.0:为什么问题视点总在错误的位置打开
BCF 本应让一个问题在不同工具之间完整传递。现实中,相机跑到地下,剖切框不见了,标签也丢了。原因不多、很具体,也都能修复——了解它们,你就知道该信任哪些工具。
BCF 2.1 与 3.0:为什么问题视点总在错误的位置打开 — IFC Viewer Online article cover
BCF(BIM Collaboration Format)只有一个任务:让一个问题离开一个工具、到达另一个工具时,上下文完好无损。一条评论、一个相机位置、一组选中的构件,也许还有一个剖切框。无论在哪里打开这个问题,你看到的都应该正是作者当时看到的画面。
在三家软件之间交换过 BCF 的人都知道它失败得有多频繁。相机在地下打开,或者对着天空;剖切框不见了;标签没了;评论在第一个 & 符号处被截断。这些都不神秘,全都来自少数几个具体的实现错误。
.bcfzip 里到底有什么
BCF 文件是一个 zip 包。里面每个问题一个文件夹,每个文件夹包含一个 markup.bcf(问题本身、评论和视点列表)、一个或多个 .bcfv 视点文件(相机、选择、可见性、剖切面),以及可选的 PNG 快照。全部都是普通 XML。你可以解压一个来读——当某个工具表现异常时,你也应该这么做。
issues.bcfzip
├── bcf.version
├── 1f2c…/
│ ├── markup.bcf ← topic, comments, viewpoint references
│ ├── viewpoint.bcfv ← camera, components, clipping planes
│ └── snapshot.png
└── 7a90…/
└── …
2.1 与 3.0:导致导入失败的区别
同一个问题在 BCF 2.1 和 3.0 中的写法。评论、视点和标签被移入 Topic 并包进容器元素。
| 方面 | BCF 2.1 | BCF 3.0 |
|---|
| markup.bcf 中的评论 | <Topic> 的同级元素 | 嵌套在 <Topic><Comments> 中 |
| 视点列表 | <Topic> 的同级元素 | 嵌套在 <Topic><Viewpoints> 中 |
| 标签 | 重复的 <Labels> 元素,每个标签一个 | 一个 <Labels> 容器,包含多个 <Label> 子元素 |
| 透视相机 | 位置、方向、上方向向量、视场角 | 同上,另加必填的 AspectRatio |
| 允许的取值 | 隐式,在文件之外约定 | 在项目扩展中声明 |
| 实际支持情况 | 几乎全面支持 | 逐步增加,参差不齐 |
数据模型几乎没变,XML 结构却变了。按一种结构编写的解析器,会把另一种结构读成一个没有评论的问题。
把这张表当作一份故障模式清单来读。在 Topic 旁边找评论的工具,在 3.0 文件里一条也找不到。期待 Labels 容器的工具,会把 2.1 文件读成只有一个标签,甚至没有标签。缺少 AspectRatio 的 3.0 相机不符合 schema,有些导入程序会直接拒绝整个视点。
为什么相机会落在错误的位置
IFC 是 Z 轴向上,three.js 是 Y 轴向上。不做转换,相机会旋转 90°;不去掉偏移,相机会落在错误位置。
BCF 相机保存在 IFC 项目的世界坐标中:单位为米,Z 轴向上。大多数 Web 查看器使用 three.js 渲染,其场景是 Y 轴向上;很多还会把模型平移到原点附近,避免大坐标的地理参考模型在 GPU 上抖动。这两种渲染选择都很合理,但在写出视点之前都必须撤销。
- 忘了坐标轴转换,相机就会旋转 90° 到达——要么对着天空,要么直直穿过楼板。
- 忘了显示偏移,相机方向是对的,却离模型几百米甚至几公里远。
- 只转换了相机、没转换剖切面,视角是对的,剖切框却切在完全不同的地方。
地理参考做得越好,偏移问题就越严重,因为真实世界坐标都是很大的数。背景知识见 IFC 坐标与地理参考。
适用于任何 BCF 工具的十分钟测试
- 创建一个包含所有要素的问题 一个斜角透视相机、两个选中的构件、一个剖切框、三个标签,以及一条包含 & 符号、引号和重音字符的评论。
- 分别导出为 2.1 和 3.0 如果工具只能写出一个版本,记下来——你迟早会遇到需要另一个版本的接收方。
- 导入第二个工具 检查相机方向、与模型的距离、选择、剖切框、标签数量,以及评论文字是否逐字一致。
- 来回走一遍 从第二个工具再导出,导回第一个工具。能经受一次传递却经不起两次的东西,最终会让你多开一次会。
我们自己的 BCF 导出器正是在这个测试之后重写的:视点现在以 IFC 世界坐标轴写出,并去掉了显示偏移;剖切面随视点一起传递;2.1 标签写成重复元素;导入的评论会完整读取,并解码 XML 实体。它同时支持写出 2.1 和 3.0,方便你匹配接收方。
让 BCF 问题真正被处理的约定
- 按原因建问题,而不是按构件。400 面墙缺少同一个属性集,是一个问题配一个有代表性的视点。
- 把规则或要求写进标题。“缺少 Pset_WallCommon.FireRating——请加入导出模板”可以直接处理;“缺数据”则不行。
- 按版本打标签。在第 6 版提出的问题应注明这一点,这样后续比较就不会重复提出。
- 始终附上快照。这是接收方在打开任何工具之前、在收件箱里看到的内容,往往也是他们唯一会看的部分。
BCF 在完整交付包中的位置——与验证报告和传送单并列——见 交付 IFC 模型时还应附带什么。从版本比较中自动生成问题,见 如何比较两个 IFC 版本。
BCF 2.1 与 3.0:为什么问题视点总在错误的位置打开