Я пытаюсь получить все свойства каждого элемента, хранящегося в файле IF C, аналогично тому, что вы видите, когда выбираете элемент в проводнике xbim и получаете все данные, такие как Type, DefiningType, GlobalID и т. Д. on.
Документация xbim содержит соответствующий пример:
using System;
using System.Linq;
using Xbim.Ifc;
using Xbim.Ifc4.Interfaces;
const string fileName = "SampleHouse.ifc";
using (var model = IfcStore.Open(fileName))
{
//get one single door
var id = "2AswZfru1AdAiKfEdrNPnu";
var theDoor = model.Instances.FirstOrDefault<IIfcDoor>(d => d.GlobalId == id);
Console.WriteLine($"Door ID: {theDoor.GlobalId}, Name: {theDoor.Name}");
//get all single-value properties of the door
var properties = theDoor.IsDefinedBy
.Where(r => r.RelatingPropertyDefinition is IIfcPropertySet)
.SelectMany(r => ((IIfcPropertySet)r.RelatingPropertyDefinition).HasProperties)
.OfType<IIfcPropertySingleValue>();
foreach (var property in properties)
Console.WriteLine($"Property: {property.Name}, Value: {property.NominalValue}");
}
Однако приведенный выше код не компилируется при использовании ядра Ifc2x3. И моя модель IF C не работает с Ifc4.
Что такое эквивалент Ifc2x3
var properties = theDoor.IsDefinedBy
.Where(r => r.RelatingPropertyDefinition is IIfcPropertySet)
.SelectMany(r => ((IIfcPropertySet)r.RelatingPropertyDefinition).HasProperties)
.OfType<IIfcPropertySingleValue>();
Или даже лучше, как l oop когда-либо для каждого элемента в IF C моделировать и получать все свойства для каждого (Ifc2x3)?