我正在尝试检索存储在IFC文件中的每个项目中的所有属性,类似于您在xbim资源管理器中选择项目并获得所有数据(如Type、DefiningType、GlobalID等(时看到的情况。
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等效是什么
您只需要将:Door.IsDefinedBy替换为Door.IsDefinedByProperties