IFC文件解析
IFC文件解析
由 buildingSMART International 设计以支持在 AEC 部门运行的各个应用程序之间的互操作性,IFC 格式允许生成包括以下内容的文件:
-
“简单”建筑构件(如墙壁、门、地板等)的各种实体的几何信息和所有相关数据;
-
指定其参数、物理特性、施工信息、维护信息等的字母数字信息(特性、数量、分类等)。
IFC 的逻辑基于 3 个基本概念,它们代表结构本身并定义:
-
IfcObjectDefinition:实体(对象)
-
IfcRelationship: 实体关系
-
IfcPropertyDefinition:与实体关联的属性。
一 建筑单个构件信息
IFC文件既然是来描述建筑信息,那我们对建筑最直观的感受都有啥,墙、柱子、窗户。。。,那我们打开一个建筑的ifc文件,找到这个节点IFCWALLSTANDARDCASE-即代表着一堵墙。
#268678167= IFCWALLSTANDARDCASE('2A_TnvSvT3Ju6Ruoo5s7HB',#268437024,'IfcWall-4',$,$,#268678164,#268678331,$);
打开https://standards.buildingsmart.org/IFC/RELEASE/IFC2x3/TC1/HTML/网站,我们可以直接ctrl+f搜这个IFCWALLSTANDARDCASE,就可以知道这个标签含义和所有参数意义。
1.'2A_TnvSvT3Ju6Ruoo5s7HB'是这个节点的GlobalId
2.#268437024代表的是文件上面的#268437024节点,按节点查找可知,是这堵墙历史创建修改人,因为ifc文件需要被多个用户以及角色修改(建筑工程师、力学分析师等等),所以通过这个属性,可以清晰的了解谁改过。(文档上说谁用什么软件改的都知道,可见ifc涉及之全面)
3.'IfcWall-4'是组件名称
4.$表示空值,这个位置应该是描述
5.$表示空值,这个位置应该是所属类型()
6.#268678164= IFCLOCALPLACEMENT(#122,#134);这个墙在整个建筑空间坐标系的相对位置,也就是这个墙在哪(涉及相对坐标系位置的概念)
7.#268678331= IFCPRODUCTDEFINITIONSHAPE($,$,(#141,#159));定义了这个墙长什么样,什么形状,怎么生成的这个形状(涉及形状生成的概念,可以看文档的详解)
8.$表示空值, 这个位置应该是标签
二 构件的连接信息
有了以上这些,我们知道了这是一堵墙,形状是什么样的,在空间中的相对位置是哪,但是这只是一堵墙,没有跟它想关联的其他组件它自己没法组成一个屋子,通过IFCRELCONNECTSPATHELEMENTS,我们可以把这堵墙和别的组件连接起来。
#268678832= IFCRELCONNECTSPATHELEMENTS('0H0J61aT53nhZfVfKvv6bH',#268437024,$,$,#268678831,#268678693,#268678167,(),(),.ATPATH.,.ATSTART.);
前4个参数与IFCWALLSTANDARDCASE相同,因为他们都继承自IfcRoot,这4条属性就是来自于IfcRoot.(关于ifc文件节点与java程序中数据结构映射,后续文章会分析)
5.#268678831= IFCCONNECTIONCURVEGEOMETRY(#268678815,#268678827);IFCCONNECTIONCURVEGEOMETRY这个节点即用来描述两个组件连接处,它的两个参数使用来描述双方接触的形状大小和坐标的,接触处可以是点、线和面。
6.#268678693= IFCWALLSTANDARDCASE('0VknZpAN1B5f__ouP5PSL2',#268437024,'IfcWall-3',$,$,#268678690,#268678801,$);这个是与目标墙相连的一堵墙
7.#268678167= IFCWALLSTANDARDCASE('2A_TnvSvT3Ju6Ruoo5s7HB',#268437024,'IfcWall-4',$,$,#268678164,#268678331,$);这就是咱们上面研究的那堵墙
8.第一堵墙的连接优先级
9.第二堵墙的连接优先级
10. ATPATH
11. ATSTART 10和11都是描述两度墙的连接方式,这个两个参数表示两堵墙是T字型连接,具体可在文档中搜IfcConnectionTypeEnum看。
这样我们就找到了目标墙的连接信息,其实这堵墙还跟很多组件相连,简单搜一下ifc文件可以找到很多
如:
#268679061= IFCRELCONNECTSPATHELEMENTS('2mLzqJNvfFJOr9P7_m6Ws5',#268437024,$,$,#268679060,#268678922,#268678167,(),(),.ATPATH.,.ATSTART.);
...
...
我们以此类推,如果ifc文件能描述清楚每个组件自己的形状位置和互相的关联关系,那么建筑图形即可以描述了,但是ifc作为BIM(建筑信息模型)的一种交流规范,只是有模型是不够的,一定要有信息,即每个组件的的详细描述,如果是墙,前后左右面积是多少?什么颜色的?如果是窗户,什么材质?透明度是多少?哪个开放商建造的?
三 构件的属性
还是目标墙,在ifc文件中搜
#268678415= IFCRELDEFINESBYPROPERTIES('2CYBHxS655hO_ZR9Hs6H2B',#268437024,$,$,(#268678167),#268678410);
IFCRELDEFINESBYPROPERTIES这个标签定义了属性集和对象之间的关系。属性聚集在属性集中,属性集可以分配给一组对象(一类组件属性可能都一样,这个做模型的人应该有体会,在画模型前,可以导入模板,不同的模板可以对应不同的属性集,比如说家具模板自带的属性就有材质颜色)
1-4.前4个不用提,还是ifcRoot自带的。
5.(#268678167)这个就是组件集合,这里属性就用于咱们目标墙,所以就咱们目标墙一个。
6.#268678410= IFCELEMENTQUANTITY('05SI1OC5PBXA8xkPX2DQxo',#268437024,$,$,'',(#268678402,#268678404,#268678406,#268678408));这个节点后面括号里的,就是组件属性。
#268678402= IFCQUANTITYVOLUME('volume','QTO_CLASSIFICATION',$,4.2439552);
#268678404= IFCQUANTITYAREA('horizontal area','QTO_CLASSIFICATION',$,1.3523062);
#268678406= IFCQUANTITYAREA('left face area','QTO_CLASSIFICATION',$,11.627275);
#268678408= IFCQUANTITYAREA('right face area','QTO_CLASSIFICATION',$,11.627275);
以上,是ifc文件结构的简单介绍,实际上每个节点还能往下探究,比如说在构成单个构件的时候,使用的方法(扭曲形成、拉伸或者压缩形成),还有在确定方位时怎么形成的坐标系,二维三维坐标系怎么生成,方向怎么确定,这都是可以根据上述三个主要枝干继续往下延伸的。
参考:
https://standards.buildingsmart.org/IFC/RELEASE/IFC2x3/TC1/HTML/ 《IFC官方文档》
https://www.bilibili.com/read/cv11659413 《IFC 文件:您需要知道的一切》
https://www.cnblogs.com/plus301/p/16596593.html 《IFC文件的基本结构》