在xbim示例 https://docs.xbim.net/examples/basic-model-operations.html 的基本操作中,它显示了如何检索特定IfcElement的单值属性。基于此,我试图获得材料数据。
我写了以下内容:
var id = "3NBPkknun6EuV9fpeE6rFh";
var theWall = model.Instances.FirstOrDefault<IIfcElement>(d => d.GlobalId == id);
var materials = theWall.HasAssociations
.Where(r => r.RelatingMaterial is IIfcMaterialProfileSet)
.SelectMany(r=> ((IIfcMaterialProfileSet)r.RelatingMaterial).MaterialProfiles)
.OfType<IIfcMaterialProfile>();
它给了我这个错误:
"IIfcRelAssociates"不包含以下定义: "相关材料"和没有可访问的扩展方法 "关系材料"接受类型的第一个参数 可以找到"IIfcRelAssociates"(您是否缺少使用指令( 还是程序集引用?
我知道我必须使用IfcRelAssociatesMaterial,但我不知道如何。 如何检索材料信息?
IIfcObjectDefinition 的HasAssociations
返回一组IIfcRelAssociates
,但您只需要具有RelatingMaterial
属性的派生类型IIfcRelAssociatesMaterial
。见 https://standards.buildingsmart.org/IFC/RELEASE/IFC4/ADD2/HTML/schema/ifcproductextension/lexical/ifcrelassociatesmaterial.htm
因此,只需添加.OfType<IIfcRelAssociatesMaterial>
即可将查询限制为材料关联。
var materials = theWall.HasAssociations.OfType<IIfcRelAssociatesMaterial>()
// rest of the query