我想从IFC文件中提取所有元素。这是我的代码片段
var allElements = model.Instances.OfType<IfcBuildingElement>().ToList();
从上面的代码中,我可以提取所有的墙、窗等但是我的IFC文件也包含Flow fitting、Flow segment等。你能告诉我如何提取这些元素吗这是我的IFC文件片段
#800=IFCFLOWSEGMENT('2n8o7Tjz5F1hq6D4q35mMw',#42,'Rund:Luftkanal - T-StXFCck:7596625',$,'Rund:Luftkanal - T-StXFCck',#760,#784,'7596625');
#1123=IFCFLOWSEGMENT('2n8o7Tjz5F1hq6D4q35mMC',#42,'Oval:Luftkanal - Stutzen:7596647',$,'Oval:Luftkanal - Stutzen',#1049,#1119,'7596647');
#1895=IFCFLOWFITTING('2n8o7Tjz5F1hq6D4q35mJZ',#42,'Luftkanal - Sattelstutzen oval:Standard:7596808',$,'Luftkanal - Sattelstutzen oval:Standard',#1894,#1888,'7596808');
#3728=IFCFLOWFITTING('2n8o7Tjz5F1hq6D4q35mJu',#42,'Luftkanal - Bogen oval Segment:Standard:7596819',$,'Luftkanal - Bogen oval Segment:Standard',#3727,#3721,'7596819');
在xbim库中,OfType<T>((通过针对底层模型存储构建查询来过滤模型实例,返回实现该类型的实例。
您的代码正在枚举所有属于OfType<IfcBuildingElement>()
的实例。即,除了建筑模型图形的一个小层次之外,您要过滤掉所有内容。
IfcBuildingElement被定义为所有主要构成建筑结构的元素,即其结构和空间分隔系统。建筑构件都是物理存在的有形物品,即墙壁、窗户、横梁等,但不是流动配件/分段(属于IfcDistributionElement(
如果您想获得模型中的所有物理元素,只需在层次结构中确定适当的祖先即可。我会从IfcProduct或IfcElement开始。如果这太宽泛,你总是可以将多个IEnumerables联合在一起。
如果不在模型上使用OfType<T>()
过滤器。实例中,您将真正获得模型中的所有内容,其中包括许多抽象概念,如关系、表示等。