Получение всех свойств объекта с использованием Ifc2x3 - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь получить все свойства каждого элемента, хранящегося в файле 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)?

...