用途:面向在 Blender 中开发 Bonsai(原 BlenderBIM)扩展、脚本化 BIM 工作流或理解其插件架构的开发者。版本为 Bonsai v0.8.4,要求 Blender 4.2.0+、Python 3.11,模块路径为 bonsai.*,仓库位于 IfcOpenShell/IfcOpenShell 单仓的 src/bonsai/。
主要能力与架构:采用三层结构——交付层 bim/module/(Blender UI、操作符、面板、gizmo)、领域层 core/ 与 tool/(core 为抽象用例逻辑,tool 为具体实现,通过 @interface 契约注入)、数据层 IfcStore 与内存中的 IFC 图。核心原则是 core 永不导入 bpy,Blender 相关代码只存在于 tool 实现中,便于独立测试。每个功能模块按 ui.py、operator.py、prop.py、data.py、decorator.py、gizmo.py 等文件拆分,共注册约 51-56 个模块,demo 模块是带注释的参考实现。
使用方式:脚本必须通过 blender --python 运行,不可从系统 Python 导入 bonsai.。IFC 变更统一使用 ifcopenshell.api.run(),不得直接修改实体属性;操作符使用 IfcStore.execute_ifc_operator(self, context) 包裹以支持撤销,逻辑放在 _execute() 中,并将 tool. 类作为依赖注入传给 core.* 函数。访问 IFC 数据用 tool.Ifc.get_entity(obj),反向用 tool.Ifc.get_object(entity);调用前须检查 IfcStore.get_file() 是否为 None。直接修改矩阵或位置后需调用 bpy.ops.bim.edit_object_placement()。
适用场景与限制:适合开发 Bonsai 扩展、编写 BIM 自动化脚本、理解原生 IFC 工作流(IFC 文件即文档,无导入/导出步骤,保存用 model.write(path))。注意导入名已从 blenderbim.* 改为 bonsai.*;void.add_opening() 已改为 feature.add_feature();IfcSverchok 的 use_bonsai_file 可让 Sverchok 直接写入 Bonsai 的活动 IFC,但两者同时修改时撤销/重做可能崩溃,建议先保存。更多 API 签名、示例与反模式见 methods.md、examples.md、anti-patterns.md。