1 调研背景
项目目标:开发类似 Solibri 的 BIM 模型审查插件,核心需求为三维构件空间关系判定——碰撞检测、距离计算、包含 / 相交 / 分离、空间包围盒、实体布尔、模型拓扑校验,支撑 BIM 合规性规则检查(管线净距、构件冲突、空间占位、洞口校核等)。
调研对象:开源空间几何内核、空间索引库、IFC 几何处理组件;重点评估适配 .NET 栈(Revit 插件,.NET 10)、支持 BIM 三角网格 / 实体 BREP、可做空间查询、许可友好、性能可用于大规模模型场景。
调研目的:对比各算法包能力、限制、集成成本,输出技术路线选型建议,为审查引擎架构定案提供依据。
业务边界说明:Solibri 核心能力 = IFC 模型解析 + 空间索引 + 三维几何相交 / 距离计算 + 规则引擎。本次调研聚焦空间几何与空间索引算法包,不含规则引擎、IFC 解析库(IFC 解析可单独选用 IfcOpenShell 等)。
2 需求拆解(审查引擎核心空间能力清单)
| 类别 | 具体能力需求 | BIM 审查场景 |
|---|---|---|
| 基础几何 | 点 / 线 / 面 / 实体、包围盒 AABB/OBB、三角网格、BREP 实体 | 构件粗筛、包围盒预检测 |
| 空间关系判断 | 相交、包含、分离、接触、最小距离、穿透深度 | 碰撞检查、构件净距校验 |
| 布尔运算 | 实体求交、求差、求和 | 空间扣除、洞口校核、体积计算 |
| 空间索引 | AABB 树、BVH、八叉树,批量构件快速筛选(减少两两几何计算) | 大模型性能优化(上万构件) |
| 网格处理 | 三角网格简化、缝合、修复非流形 | Revit 导出模型存在烂面、破面 |
| 接口与集成 | .NET 原生 / C++ 可封装 C#、支持嵌入 Revit 插件、支持 IFC/STEP 几何 | 插件部署限制 |
| 许可 | MIT/Apache 2.0 等宽松开源,避免 GPL 传染性开源 | 商用插件发布风险 |
3 候选开源空间算法包调研详情
3.1 OpenCASCADE(OCCT)
工业级三维几何内核,C++ 开发,老牌 BREP 实体几何引擎,STEP/IGES 原生支持,大量 BIM/CAE 软件底层依赖(FreeCAD 底层就是 OCCT)。
- ✅ 支持:BREP 实体、曲面、布尔运算、实体相交、距离计算、拓扑分析;自带 AABB 包围盒;支持 STEP/IGES;可处理参数化实体
- ⚠️ 限制:
- C++ 库,.NET 需要自行封装(OCCT .NET wrapper 非官方,如 OCC.Net)
- 编译、部署复杂;体积大
- 对破损 BIM 模型(非流形、碎面)容错较差
- 无内置 BVH 空间索引,需要自己实现或搭配第三方 BVH 库做构件加速筛选
- 📜 License:LGPL 2.1。商用注意:动态链接 LGPL 库不传染源码;静态链接会触发 LGPL 开源义务,插件打包需要关注发布方式
- 🎯 适用场景:需要高精度实体布尔、拓扑检查;适合做精确几何计算。Solibri 早期底层几何内核同类路线
3.2 CGAL(Computational Geometry Algorithms Library)
C++ 计算几何算法库,学术 + 工业级,算法种类最全,支持三角网格、布尔、网格修复、BVH 空间查询。
- ✅ 支持:精确几何谓词、三角网格布尔、网格修复、BVH / 空间索引、距离、相交检测;点云、多边形、多面体处理能力极强
- ⚠️ 限制:
- C++ 库,需要 C++/CLI 封装给 .NET;编译门槛高
- 大量算法是精确算术,大规模 BIM 模型性能开销大;可切换浮点数模式,但会引入精度问题
- 不原生支持 BREP 实体,偏重三角网格
- 📜 License:混合开源(GPL/LGPL),部分模块 GPL,商用项目需要谨慎挑选模块
- 🎯 适用场景:网格修复、复杂空间查询;如果 BIM 全部转三角网格后做审查,CGAL 是强候选
3.3 Bullet Physics(Bullet3)
C++ 物理引擎,内置成熟 BVH、AABB、碰撞检测库,游戏 / 可视化领域大量使用。
- ✅ 支持:AABB/OBB、BVH 加速结构、三角网格碰撞、距离查询;对海量三角面性能优秀;跨平台
- ⚠️ 限制:只做碰撞相交,不支持实体布尔运算,不支持 BREP 拓扑;几何是离散三角网格,无实体拓扑信息;不适合体积、洞口布尔扣除场景
- 📜 License:zlib 许可,极其宽松,商用无源码传染风险
- 🎯 适用场景:粗碰撞筛查、净距检测,不适合实体拓扑类审查。适合作为第一层空间索引加速层
3.4 Embree(Intel)
Intel 开源光线追踪内核,高性能 BVH,面向光线投射、包围盒查询。
- ✅ 支持:高性能 BVH 构建、光线相交查询;大规模三角面查询速度极快
- ⚠️ 限制:只做光线 / 三角面相交,无实体布尔、无空间距离谓词;不是通用几何库
- 📜 License:Apache 2.0,商用友好
- 🎯 适用场景:BIM 空间射线查询(房间空间拾取、遮挡检测),不适合构件碰撞和布尔
3.5 Triangle / TetGen
三角面、四面体网格生成库,仅用于网格剖分,不能做空间关系判断与布尔,仅辅助几何预处理,不适合作为主引擎。
3.6 .NET 原生库(适合 Revit C# 插件直接调用)
3.6.1 MathNet.Numerics
纯 .NET 数值库,矩阵、向量基础运算;无三维实体 / 网格相交、无空间索引,只能做底层数学工具,不能作为空间引擎。License MIT。
3.6.2 Rhino3dm(Rhino3D 开源 .NET 库)
重点:McNeel 官方开源 .NET 库,Rhino 几何内核剥离,NuGet 包直接 C# 引用,无需 C++ 封装!
- ✅ 支持:BREP 实体、NURBS 曲面、三角网格;相交、距离、布尔运算;AABB/OBB;内置 BVH;支持 STEP 导入;纯 .NET 托管调用
- ⚠️ 限制:
- 开源版 Rhino3dm 是几何数据模型 + 基础计算,不包含完整 Rhino 空间加速全套高级算法;大规模上万构件场景性能需要测试
- 复杂破损 IFC 模型 BREP 转换容易失败
- 📜 License:MIT,商用非常友好,无传染性开源
- 🎯 亮点:唯一可直接在 Revit C# 插件中引用、无需 C++ 封装的 BREP + 网格几何库,集成成本最低,开发速度最快
3.6.3 NetTopologySuite(NTS)
JTS 拓扑套件 .NET 移植版本,二维几何王者,三维能力弱,仅支持简单 3D 点线面,不支持 BREP、三维实体布尔。MIT 许可。
结论:NTS 适合 2D 图纸审查,不适合三维 BIM 构件空间审查。
3.7 IfcOpenShell(补充,非纯空间算法包)
C++/Python/C# 绑定,IFC 解析库,可将 IFC 构件解析成 OCCT 几何;职责是 IFC→几何转换,不是审查计算内核,常搭配 OCCT 一起使用。LGPL。
4 候选包横向对比汇总表
| 算法包 | 开发语言 | BREP 实体 | 三角网格布尔 | 空间索引 (BVH) | 三维相交 / 距离 | .NET 集成难度 | License | 商用风险 |
|---|---|---|---|---|---|---|---|---|
| OpenCASCADE (OCCT) | C++ | ✅ | ✅ | ❌ 需自建 | ✅ | 高(C++ 封装) | LGPL 2.1 | 中等(静态链接风险) |
| CGAL | C++ | ❌ | ✅ | ✅ | ✅ | 很高 | GPL/LGPL 混合 | 高(部分模块 GPL) |
| Bullet3 | C++ | ❌ | ✅ | ✅ | ✅(仅碰撞) | 中 | zlib | 低 |
| Rhino3dm | .NET | ✅ | ✅ | ✅ 基础 | ✅ | 极低(NuGet) | MIT | 低 |
| Embree | C++ | ❌ | ❌ | ✅ | 仅光线相交 | 中 | Apache 2.0 | 低 |
| NTS | .NET | ❌ | ❌ | ❌ | 仅弱 3D | 极低 | MIT | 低 |
5 技术路线方案对比(审查引擎架构可选路线)
目标:开发 Revit 插件,BIM 构件空间审查(Solibri 同类功能)
方案 A:Rhino3dm 为主内核(推荐【快速原型路线】)
架构:Revit 插件 (C#) → Rhino3dm(BREP + 网格几何、相交、布尔、BVH)→ 空间关系判断 → 规则引擎
优势:
- .NET 原生 NuGet,无 C++ 编译、跨平台封装难题,直接嵌入 Revit 插件,开发周期短
- MIT 许可,商用无风险;BREP 与三角网格双支持;自带 BVH
- 可以直接读取 Revit 几何转换到 Rhino 几何对象,转换链路短
短板:超大模型(几万构件)下 BVH 性能上限低于 OCCT/CGAL;极端破损模型鲁棒性一般
适用:MVP 原型开发、中小规模 BIM 模型审查;团队以 C#/.NET 开发为主,缺少 C++ 底层开发人力
方案 B:OCCT 为主内核 + Bullet 做空间索引加速(推荐【高性能生产路线】)
架构:Revit 插件 (C#) ↔ C++ 封装层 ↔ OCCT(BREP 实体布尔、拓扑) + Bullet(BVH 批量包围盒预筛选)
流程:
- Bullet BVH 做粗筛:构件包围盒不相交直接跳过,减少昂贵实体几何计算
- 粗筛命中后,交给 OCCT 做精确 BREP 相交、距离、布尔运算
优势:工业级精度,Solibri 同类底层思路;处理实体拓扑、洞口扣除、体积计算能力最强
短板:C++ 封装、编译、部署复杂;LGPL 许可管控;开发周期长;需要 C++ 开发人力
适用:长期产品化,面向大型轨道交通 / 机场复杂 BIM 项目,上万构件高精度审查场景
方案 C:CGAL + Bullet(纯网格路线)
全部构件转三角网格,CGAL 做网格布尔 / 修复,Bullet 做 BVH 加速。
短板:丢失 BREP 拓扑信息;不能做实体参数化分析;许可风险高
适用:仅做网格碰撞,不推荐作为 BIM 审查主引擎
方案 D:自研空间算法(不推荐)
自己实现 BVH、三维相交、实体布尔。三维计算几何坑极多(浮点精度、非流形、拓扑退化),研发成本巨大,稳定性很难达到 OCCT/Rhino3dm 成熟库水平。
6 关键风险点
- BIM 模型几何破损问题:Revit/IFC 导出模型经常出现非流形、碎面、重叠面;所有开源库都会受影响,需要前置几何修复流程(CGAL 或 OCCT 自带修复工具)
- 浮点精度问题:三维几何判断容差是 BIM 审查核心,所有库都需要统一全局容差配置(Solibri 可配置规则容差)
- 许可合规风险:GPL 库绝对不能直接静态链接到商用闭源插件;LGPL 需要严格区分动态 / 静态链接
- Revit 进程内存限制:大规模模型几何加载会占用大量内存,空间索引需要做按需加载,不能一次性载入全部构件
7 选型建议与落地路径
7.1 选型结论
短期 MVP 原型开发(优先推荐):采用 Rhino3dm(MIT)
- 优点:C# 直接集成、开发速度快、许可安全,快速验证整套审查业务逻辑(构件相交、净距、空间包含规则)
- 适用:验证业务规则、开发 Demo、内部测试,快速跑通和 Solibri 对齐的审查案例
中长期产品化,面向大型复杂 BIM 项目:采用 OCCT (LGPL) + Bullet (zlib) 组合架构
- 粗筛用 Bullet BVH 做包围盒加速;精确几何相交、布尔、拓扑计算交给 OCCT。需要投入 C++ 封装开发,同时做好开源许可合规管理
不推荐:
- CGAL 作为主内核(许可 + 性能复杂度)
- 自研底层几何算法
7.2 落地实施步骤
- 原型阶段:基于 Rhino3dm 搭建最小验证 Demo,实现:构件包围盒 BVH、构件最小距离、相交判断;拿轨道交通 BIM 模型做案例测试,验证性能与精度
- 压力测试:针对 5000 / 10000 构件规模模型,测试查询耗时、内存占用,评估 Rhino3dm 性能瓶颈
- 架构迭代:如果原型阶段发现大模型性能不足,拆分架构,把计算密集几何部分下沉到 C++ 层,切换 OCCT + Bullet 方案,上层 C# 插件保持业务规则不变
- 配套:几何预处理模块(破面修复)、统一容差管理、构件空间索引持久化
8 附录:待后续调研事项
- Rhino3dm 大规模构件 BVH 性能实测、破损 IFC 几何转换成功率
- OCCT .NET 封装方案(OCC.Net)稳定性、LGPL 商用发布合规细则
- 空间审查规则引擎技术选型(和几何引擎解耦)
- IFC 几何转换组件(IfcOpenShell)与几何内核对接测试