用途:在 Bonsai(原 BlenderBIM)中从 Blender 对象访问 IFC 元素,或反向由 IFC 实体找到对应 Blender 对象,并查询元素间关系。
主要能力:Blender 对象转 IFC 实体用 tool.Ifc.get_entity(obj),返回 None 表示未关联 IFC;IFC 实体转 Blender 对象用 tool.Ifc.get_object(entity),返回 None 表示无场景表示。获取当前 IFC 文件用 tool.Ifc.get() 或 IfcStore.get_file(),两者返回同一 ifcopenshell.file。查询支持 model.by_type("IfcWall")、model.by_id(42)、model.by_guid("...");关系导航用 ifcopenshell.util.element 的 get_container、get_type、get_psets、get_material、get_decomposition 等。映射表 IfcStore.id_map 为 step ID 到对象,guid_map 为 GlobalId 到对象。
使用方式:代码必须在 Blender 内运行(blender --python),bonsai.tool.* 依赖 bpy,无法在独立 Python 中运行。导入统一用 bonsai.,不可用 blenderbim.(2024 年 v0.8.0+ 已改名)。操作前先检查 get_file()/get() 是否为 None。建立双向映射用 tool.Ifc.link(element, obj),不要手动填充 id_map 或 guid_map。外部来源的 ID 查询应包 try/except。
限制:并非每个 Blender 对象都有 IFC 实体,也并非每个 IFC 实体都有 Blender 对象。IFC 实体引用不可跨文件重载缓存,重载后会失效。IfcOpenShell v0.8+ 关系 API 多用列表参数(如 products=[wall]),旧式单数参数会报 KeyError。
版本:Bonsai v0.8.4、Blender 4.2.0+、Python 3.11。依赖 bonsai-core-architecture 与 ifcos-syntax-api。