Как получить данные о материалах указанного c IfcElement - PullRequest
2 голосов
/ 16 июня 2020

В базовых c операциях в примерах xbim https://docs.xbim.net/examples/basic-model-operations.html показано, как получить свойства с одним значением указанного c 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» не содержит определения для «RelatingMaterial», и не может быть найден доступный метод расширения «RelatingMaterial», принимающий первый аргумент типа «IIfcRelAssociates» (вам не хватает директивы using или ссылки на сборку?)

Я понимаю, что мне нужно использовать IfcRelAssociatesMaterial, но не могу понять, как это сделать. Как я могу получить информацию о материалах?

1 Ответ

1 голос
/ 16 июня 2020

IIfcObjectDefinition HasAssociations возвращает набор IIfcRelAssociates, но вам нужен только производный тип IIfcRelAssociatesMaterial, который имеет свойство RelatingMaterial. См. 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
...