本技能用于在 IFC 模型中管理构件之间的关系,基于 IfcOpenShell 的 API 方式操作。用途覆盖建筑信息模型中的常见关系:空间层级聚合(如项目—场地—建筑—楼层)、构件归入空间容器、空间引用、类型指派、属性集与材料关联、开洞与填充、嵌套以及逻辑分组。
主要能力与用法:通过决策树判断需要哪种关系。空间层级使用 aggregate.assign_object;构件归入空间容器使用 spatial.assign_container;仅被空间结构引用使用 spatial.reference_structure;类型指派使用 type.assign_type;添加属性集使用 pset.add_pset;材料关联使用 material.assign_material;开洞使用 void.add_opening,填充使用 void.add_filling;嵌套使用 nest.assign_object;逻辑分组使用 group.assign_group。查询时建议使用 ifcopenshell.util.element 中的 get_container、get_type、get_types、get_psets、get_material、get_decomposition、get_aggregate 等方法,以兼容不同版本。
重要限制:必须使用 ifcopenshell.api.run() 创建关系,不要用 model.create_entity 直接创建关系实体,也不要直接设置关系属性。不同 IFC 版本存在差异,例如 IFC2X3 无 IsTypedBy、IsNestedBy,类型查询需通过 IsDefinedBy 过滤;IfcRelReferencedInSpatialStructure 等实体仅 IFC4+ 可用。每个构件只能有一个空间容器,次要引用应使用 reference_structure。使用特定版本的逆向属性前应检查 model.schema。
另提供删除关系的 API,例如 spatial.unassign_container、aggregate.unassign_object、type.unassign_type、material.unassign_material、nest.unassign_object、pset.remove_pset、spatial.dereference_structure。具体完整签名、示例与反模式以资料中的参考链接为准。