特征表示
本节描述国际金融公司读取器输出的特性。一般来说,IFC编写器将接受与读取器输出的特性具有相同结构的特性。
![关闭](http://www.baooytra.com/docs/fme/2017.0/html/FME_Desktop_Documentation/FME_ReadersWriters/ifc/../Skins/Default/Stylesheets/Images/transparent.gif)
在关系模式下操作时,IFC读取器将为源IFC文件中的每个对象生成一个特性。就IFC数据模型而言,这意味着每个类型为IFCProduct子类型的对象都将作为特性输出。这些特性将具有许多属性,这些属性指示其在IFC对象层次结构中的位置。
- GlobalId:该属性将包含对象的全局id,直接从IFC文件复制。在编写特性时,如果该值不是有效的GUID,则可能会替换该值。可以找到GUID规范在这里.
- ifc_unique_id:该属性将包含一个值,该值保证在单个IFC文件生成的所有特性中是唯一的。在某些情况下,单个IFC文件中的多个对象将具有相同的GlobalId值。在这些情况下ifc_unique_id属性可以用来区分具有相同GlobalId的特性。
- ifc_parent_id:该属性将包含特性的父对象的GlobalId值。例如,一个墙体特性将有一个建筑楼层特性作为它的父对象,而一个窗口可能有一个墙或开口作为它的父对象。
- ifc_parent_unique_id:该属性类似于ifc_parent_id属性,但它将包含与父特性的ifc_unique_id属性相同的值。
每个特性都有一个IFMEAggregate几何形状。聚合的部分将是对象的各种几何表示,以及描述对象的任何属性/数量集。
![关闭](http://www.baooytra.com/docs/fme/2017.0/html/FME_Desktop_Documentation/FME_ReadersWriters/ifc/../Skins/Default/Stylesheets/Images/transparent.gif)
当以分层模式操作时,IFC读取器将产生一个包含源文件中所有IFC对象的单一特性。每个对象将由一个IFMEAggregate几何体表示。几何名称将指示聚合几何表示的IFC对象的类型。
聚合几何的每个部分都将是对象、属性/数量集或嵌套的IFC对象的几何表示。通常,层次结构的顶层看起来像这样:
IfcProject > IfcSite > IfcBuilding > IfcBuildingStorey
![关闭](http://www.baooytra.com/docs/fme/2017.0/html/FME_Desktop_Documentation/FME_ReadersWriters/ifc/../Skins/Default/Stylesheets/Images/transparent.gif)
IFC编写器将接受特征类型为已知IFC对象类型的特征。对象类型的完整列表随所编写的IFC版本的不同而不同。最常见的特征类型是:
- IfcProject
- IfcSite
- IfcBuilding
- IfcBuildingStorey
- IfcSpace
- IfcBeam
- IfcColumn
- IfcWall / IfcWallStandardCase
- IfcDoor
- IfcWindow
- IfcSlab
- IfcRoof
- IfcStair / IfcStairFlight
如果工作空间中没有提供任何功能,IFC编写器将自动创建项目、站点和构建对象。此外,一个建筑楼层对象将被创建来保存所有没有父id或其父id不能被解析的特征。
作者将接受IFC对象作为特征,或作为嵌套的几何图形。例如,wall对象可以作为IfcWall特性,或者作为父对象中包含的几何体,几何体名称设置为IfcWall。这对应于分层和关系读者模式。
除了中描述的id值IFC对象-关系模式,所有IFC对象都可以有一个名称和描述值。一些对象类型还可能有进一步的值。例如,当写入IFC2x3时,IfcRailing对象可能有一个PredefinedType值,而当写入IFC4时,IfcWindow对象可能有几个额外的值,包括PredefinedType和PartitioningType。要确定一个对象可能具有的确切值,请参考正在编写的IFC版本的文档。
![关闭](http://www.baooytra.com/docs/fme/2017.0/html/FME_Desktop_Documentation/FME_ReadersWriters/ifc/../Skins/Default/Stylesheets/Images/transparent.gif)
一个IFC对象可以有多个几何表示。例如,墙壁可以有一个3D模型,以及一个简单的线条表示。每个几何表示都属于一个表示上下文。IFC编写器将输出的表示上下文列表可以使用“表示上下文”参数设置。
每个几何表示必须表明它属于哪个上下文。该值可以在几何名称中设置,也可以在ifc_representation_identifier几何特征。
属性的“标识符”列中的值必须完全匹配表示上下文作家参数,且几何类型必须与相应的几何类型单元格中列出的类型之一匹配。如果一个几何图形不满足这些条件,它将被忽略。
![关闭](http://www.baooytra.com/docs/fme/2017.0/html/FME_Desktop_Documentation/FME_ReadersWriters/ifc/../Skins/Default/Stylesheets/Images/transparent.gif)
在IFC数据模型中,开口是必须显式创建的对象。例如,当在墙上创建一个窗口时,首先必须从墙上切出开口,然后在开口中放置一个窗口。
IFC写入器期望IfcOpeningElement对象作为特性或嵌套几何图形到达,就像任何其他IFC对象一样。然而,一个开口的几何表示可能作为另一个特征的一部分到达。如果一个CSG实体作为一个物体的几何表示到达,作者将着眼于任何减法的实体ifc_opening_id特征。如果这个特征存在,几何图形将被用作链接的开放对象的几何表示。如果trait值与IfcOpeningElement对象不对应,就会创建一个新的。
![关闭](http://www.baooytra.com/docs/fme/2017.0/html/FME_Desktop_Documentation/FME_ReadersWriters/ifc/../Skins/Default/Stylesheets/Images/transparent.gif)
这取决于读取属性/数量设置为读者参数, IFC读取器表示带有嵌套几何图形的属性集,或作为特性。如果使用特征表示,则特征类型为IfcPropertySet。类似地,如果使用几何表示,则几何名称将设置为IfcPropertySet。当确定一个特征或几何图形表示何种类型的IFC对象时,IFC编写器将查找这些值。的ifc_property_set_nameattribute/trait将被设置为属性集名称,并且GlobalId属性将包含属性集ID。当写入属性集时,不需要GlobalId,并且ifc_unique_id可以使用Value代替。如果一个ifc_unique_id值时,IFC编写器将自动为属性集生成有效的GUID。
当属性集被读取为特性时,IFC对象将通过在对象中包含属性集的GlobalId值来引用属性集ifc_property_sets {}属性列表。类似地,当IFC对象特性与属性集特性相关联时,IFC编写器将查找这个列表属性。在写入器中,这个列表属性可以包含GlobalId或ifc_unique_id相关属性集的值。属性集中的各个属性将被设置为IfcPropertySet特性上的属性。
当属性集被读取为嵌套几何图形时,表示IFC对象的IFMEAggregate几何图形将包含几何实例用于与IFC对象关联的每个属性集。几何实例将引用一个几何定义,它将是一个IFMENull几何。属性集中的单个属性将被设置为几何体的特征。属性集嵌套在对象的聚合几何中,因此不需要将对象链接到属性集ifc_property_sets {}属性列表。
![关闭](http://www.baooytra.com/docs/fme/2017.0/html/FME_Desktop_Documentation/FME_ReadersWriters/ifc/../Skins/Default/Stylesheets/Images/transparent.gif)
数量集的处理类似于属性集—IFC读取器将生成数量集作为特征或嵌套几何图形。根据使用的表示,特征类型或几何名称将被设置为IfcQuantitySet。的ifc_quantity_set_nameattribute/trait将包含数量集名称,GlobalId属性/trait将包含数量集id。当写入数量集时,不需要GlobalIdifc_unique_id可以使用Value代替。如果一个ifc_unique_id值时,IFC写入器将自动为数量集生成有效GUID。
当数量集被读取为特性时,IFC对象将通过在对象中包含数量集的GlobalId值来引用数量集ifc_quantity_sets {}属性列表。类似地,当IFC对象特性与数量集特性相关联时,IFC编写器将查找这个list属性。在写入器中,这个列表属性可以包含GlobalId或ifc_unique_id相关数量集的值。数量集中的单个数量将被设置为IfcQuantitySet特性的属性。
当属性集被读取为嵌套几何图形时,表示IFC对象的IFMEAggregate几何图形将包含与IFC对象关联的每个数量集的几何实例。几何实例将引用一个几何定义,它将是一个IFMENull几何。属性集中的单个数量将被设置为几何体的特征。属性的数量集嵌套在对象的聚合几何体中,因此不需要将对象链接到数量集ifc_quantity_sets {}属性列表。
![关闭](http://www.baooytra.com/docs/fme/2017.0/html/FME_Desktop_Documentation/FME_ReadersWriters/ifc/../Skins/Default/Stylesheets/Images/transparent.gif)
IFC读取器可以选择性地生成包含IFC文件中属性和数量集定义的特性。此行为由“创建属性/数量设置定义功能”参数控制。
这些定义特性可以被认为是IFC文件中的属性和数量集的“模式特性”。它们将包含列表属性,用于描述属性集中的属性或数量集中的数量的名称、类型和数据类型。
IFC写入器只会写出它有定义的属性和数量集。默认情况下,编写器知道IFC规范中定义的属性和数量集,如Pset_BuildingCommon或Qto_WallBaseQuantities。为了写出IFC规范中没有定义的属性或数量集,必须向编写者发送定义特征。特别是,在进行IFC到IFC的转换时,只有当读取器的属性和数量集定义特征被发送给写入器时,源属性和数量集才会被保留。
属性集的定义
属性集定义特性将其特性类型设置为“PropertySetDefinition”。属性集名称将存储在ifc_property_set_name属性中。关于属性集中的属性的信息将存储为以下列表属性:
- ifc_properties{}.name -该列表属性将包含属性集中的属性名称。
- ifc_properties{}。property_type—该列表属性将包含属性的类型。目前唯一支持的属性类型是:
- IfcPropertySingleValue
- IfcPropertyBoundedValue
- IfcPropertyEnumeratedValue
- ifc_properties{}。data_type—该列表属性将包含属性的数据类型。支持的数据类型更多。完整名单载于以下网页:
IFC2x3 | IFC4 |
---|---|
![关闭](http://www.baooytra.com/docs/fme/2017.0/html/FME_Desktop_Documentation/FME_ReadersWriters/ifc/../Skins/Default/Stylesheets/Images/transparent.gif)
数量集定义的特征类型设置为QuantitySetDefinition.属性中的数量集名称将存储在ifc_quantity_set_name属性。关于数量集中的数量的信息将存储在以下列表属性中:
- ifc_quantities{}.name -这个列表属性将包含数量集中数量的名称。
- ifc_quantities{}。type—此列表属性将包含数量集中数量的类型。这个列表属性中的有效值是:
- IfcQuantityArea
- IfcQuantityCount
- IfcQuantityLength
- IfcQuantityTime
- IfcQuantityVolume
- IfcQuantityWeight
![关闭](http://www.baooytra.com/docs/fme/2017.0/html/FME_Desktop_Documentation/FME_ReadersWriters/ifc/../Skins/Default/Stylesheets/Images/transparent.gif)
IfcDistributionPort类型的对象定义了建筑物中配电系统的拓扑结构,如管道、电气或暖通空调系统。IFC读卡器为IFC文件中的每个IfcDistributionPort对象生成一个特性。这些特性使用ifc_parent_id属性来引用它们所属的分布对象,例如管道配件或风管。此外,如果连接了两个端口,每个端口的ifc_connected_port_id属性将设置为另一个端口的GlobalId值。
当写入分布端口对象时,两个连接的端口对象不需要相互引用。参考只能指向一个方向。