如何获取特定IfcElement的材料数据

时间:2020-06-16 10:54:00

标签: c# linq ifc bim xbim

在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'不包含针对 “ RelatedMaterial”且没有可访问的扩展方法 'RelatedMaterial'接受类型的第一个参数 可以找到“ IIfcRelAssociates”(您是否缺少using指令? 还是程序集引用?)

我知道我必须使用IfcRelAssociatesMaterial,但是我不知道如何使用。 如何检索材料信息?

1 个答案:

答案 0 :(得分:1)

IIfcObjectDefinition的HasAssociations返回一组IIfcRelAssociates,但是您只需要具有IIfcRelAssociatesMaterial属性的派生类型RelatingMaterial。参见https://standards.buildingsmart.org/IFC/RELEASE/IFC4/ADD2/HTML/schema/ifcproductextension/lexical/ifcrelassociatesmaterial.htm

因此,只需添加.OfType<IIfcRelAssociatesMaterial>即可将查询约束到Material关联。即

var materials = theWall.HasAssociations.OfType<IIfcRelAssociatesMaterial>() 
// rest of the query