使用 Ifc2x3 获取对象的所有属性

Posted

技术标签:

【中文标题】使用 Ifc2x3 获取对象的所有属性【英文标题】:Getting all properties of object using Ifc2x3 【发布时间】:2020-05-02 12:34:27 【问题描述】:

我正在尝试检索存储在 IFC 文件中的每个项目的所有属性,类似于您在 xbim 资源管理器中选择项目并获得所有数据(如类型、定义类型、全局 ID 等)时看到的内容。

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 内核时无法编译。而且我的 IFC 模型不适用于 Ifc4。

Ifc2x3 等价物是什么

    var properties = theDoor.IsDefinedBy
        .Where(r => r.RelatingPropertyDefinition is IIfcPropertySet)
        .SelectMany(r => ((IIfcPropertySet)r.RelatingPropertyDefinition).HasProperties)
        .OfType<IIfcPropertySingleValue>();

或者更好的是,如何循环 IFC 模型中的每个项目并检索每个项目的所有属性 (Ifc2x3)?

【问题讨论】:

“但是,上面的代码在使用 Ifc2x3 内核时无法编译”是什么意思?你有任何编译器错误吗? xbim 中的 IFC2x3 模式实现也实现了 IFC4 接口,因此这段代码可以很好地处理 IFC2x3 数据。 【参考方案1】:

Ifc2x3 等价物是什么

您只需将:theDoor.IsDefinedBy 替换为 theDoor.IsDefinedByProperties

【讨论】:

以上是关于使用 Ifc2x3 获取对象的所有属性的主要内容,如果未能解决你的问题,请参考以下文章

如何获取对象的所有属性?

php如何打印对象的所有属性

如何从一行列表中的所有对象中获取相同的属性

从对象数组中获取所有唯一的对象属性

获取对象的所有属性[重复]

获取Python中的所有对象属性? [复制]