我将 Industry Foundation Classes (IFC) 翻译为工业基础类族。IFC 是一套通用的建筑信息模型(BIM)的定义标准。本文对 IFC 提供一些基本的介绍,包括其数据模型的基本结构以及建筑元素的语言描述和几何表达。

本文参考了:https://publications.cms.bgu.tum.de/books/bim_2018/06_IFC_07.pdf

1 背景

构建建筑信息模型(BIM)的思想来源于我们试图将所有的建筑模型数据的数据交互操作中使用一致的建筑模型。这样可以避免手动添加模型中的已有数据(例如交圈的时候),并降低操作过程中的误差。除了方便模型构建过程中的数据交互,统一的 BIM 模型使得建筑模型交付过程变得简单而可靠。

目前市面上已经存在了很多不同的建筑设计软件,这些软件有的着眼于建筑物的几何设计,有的着眼于建筑分析和模拟,有的着眼于建筑操作维护,等等。然而,问题在于这些软件之间缺乏统一的数据交换协议,因此设计师在使用不同的软件时,需要讲相同的数据信息重复地手动输入到这些软件,这增加了工作量,并且提高了出错的概率。

为了解决这一问题,我们需要设计出满足这种需要的统一数据格式。此数据格式需要提供统一的、准确的几何描述;提供完备的建筑语义表达(包括建筑元素的分类树系统,以及这些元素之间的关系)。设计这样的数据格式存在诸多挑战,而且,在建筑领域,相比于其他工业领域,还存在下面这些挑战:

  • 一个建筑的设计和施工通常由不同公司负责;
  • 建筑设计通常由几个不同的阶段,不同的阶段由不同的团队完成;
  • 整个建筑项目的生命周期设计多个不同领域的专家,而这些专家可能分属不同的公司;
  • 不同公司之间的协作通常是 ad-hoc 方式(与之对应的是中央协调方式),且这种合作通常局限于项目周期内,而非双方具有长期的稳定合作关系;

简而言之,建筑行业的特征是由众多独立参与者共同参与的高度碎片化的过程,这意味着在这一过程中中会涉及多种不同的软件工具,同时也意味着统一标准较难施行。同时,权力机关在指定标准时也比较难以某个特定的软件作为统一标准,即若要推行统一标准,此标准应该是 Vendor-free 的。

为了达成此目标,国籍组织 buildingSMART 投入了数十年的时间来开发 Industry Foundation CLasses (IFC)。IFC 是一个复杂的数据交互格式,其可以以面向对象的方式描述一个建筑物的几何属性和语义信息。IFC 将建筑物拆解为构件元素和空间,把那个描述他们之间的复杂关联关系。此数据结构可以贯穿建筑设计的整个生命周期。需要注意的是 IFC 是一个类型设计标准,而非一个具体的软件,因此 IFC 的落地施行还需奥各个软件厂商进行针对性的实现。然而,完整的 IFC 标准实现旷日费时,因此 buildingSMART 提出了 Model View Definitions (MVD) 的概念。MVD 定义了在特定任务场景下,哪些 IFC 数据模型应该被实现(而非整个 IFC 模型)。

2 IFC 的历史

略。

3 EXPRESS - IFC 标注的数据模型语言

IFC 的研发采用了和 ISO 标准体系的相同技术手抖,即 EXPRESS 建模语言。EXPRESS 是一种声明式语言,可用于定义面向对象的数据模型结构。

EXPRESS 使用了 Entity(实体) 类型来对应面向对象理论中的类的概念。对于每个实体类型我们可以定义其具备的属性以及同其他实体的关系。EXPRESS 同样采用了面向对象的设计中的继承概念,这使得属性与关系可以应用到实体类型的子类型中。

两个类型 TypeA 和 TypeB 的对象之间的关系定义方式是赋予 TypeA 中定义类型为 TypeB 的属性。我们也可以以类似方式定义与之相对的反关系;

聚合数据类型 -- list, array, set 以及 bag 都是 EXPRESS 模型语言的一部分,这样方便我们定义一对多和多对多关系。EXPRESS 支持以 WHERE 关键字来定义保持数据一致性的算法条件。在 WHERE 语句块中包含了一个返回值为 Bool 类型的表达式,当此值为 True 时,其对应实例才会是有效的。

使用 EXPRESS 语言定你要数据模型的一个例子。

EXPRESS 中的 select 类型在继承树之外提供了一种额外的方法来讲多个实体类型赋予到一个高阶构型上。

取值范围局限于有限几个选择时,我们使用枚举类型来表示。例如 IfcBooleanOperator 可以取值为 UNION, INTERSECTION 或者 DIFFERENCE

除了文本表示以外,EXPRESS 定义了一种图示方法来表示数据模型。这种图示方法被称为 EXPRESS-G。

EXPRESS-G 的例子。

4 分层组织

为了改进了 IFC 模型的可维护性和可扩展性,该模型被构建成多个层。其基本思想是位于上层的元素可以索引其下方的元素,但是反之不可。这使得核心元素保持独立性。

4.1 Core layer

核心层包含了数据模型的大多数基础类型。他们可以被上层的所有元素索引。这些类定义了基础的结构,管架拿到关系以及可以被复用的通用概念。Kernal schema 中定义了 IFC 模型的核心概念,其包括一些非常基本的类:IfcRoot, IfcObject, IfcActor, IfcProcess, IfcProduct, IfcProject, IfcRelationship。在这些基础类型至善是是三个扩展包:Product Extension, Process ExtensionControl Extension,这些也是核心层的一部分。

Product Extension 中包含了一个建筑物中实体性的和空间对象的定义及其关系。这些子类包括: IfcBuildng, IfcBuildingStorey, IfcSpace, IfcElement, IfcBuildingElement, IfcOpenningElement(都是 IfcProduct 的子类),以及 IfcRelAssociatesMaterial, IfcRelFillsElement and IfcRelVoidsElements(都是 IfcRelationship 的子类)。

Process Extension 主要描述过程和操作,这个扩展包同时也提供了定义流程元素的依赖关系的手段。

Control Extension 定义了控制对象的基本类,如 IfcControlIfcPerformanceHistory,并可以将这些对象分配给物理和空间对象。

4.2 Introperability Layer

从共享层位位于核心层上方,起到核心层和应用领域之间的互操作(Interoperability)层的作用。这一层的类包括 IfcWall, IfcColumn, IfcBeam, IfcPlate, IfcWindow

4.3 Domain Layer

Domain Layer 中的类是高度特异化的类,往往只用于特定的领域。他们构成了继承树的叶子节点。这一层的类不能被其他层引用,在同一层的不同领域之间也不能互相引用。

4.4 Resource Layer

资源层是位于最底部的一层,可以在整个 IFC 模型中被使用。这一层中的类并非由 IfcRoot 导出,因此并不具备特定的 id 标识。不同于其他层的对象,这些类型并不能以独立的对象存在,而必须被其他 IfcRoot 的子类型对象引用。在这一层的对象中,最重要的资源类包括

  • Geometry Resource: 基础几何元素,包括点、向量、参数化曲线以及扫过的面(swept surfaces);
  • Topology Resource:包含了地表一个实心体的拓扑结构;
  • Geometry Model Resouce: 描述几何模型的类,如 IfcCsgSolid, IfcFacetBrep, IftSweptAreaSolid
  • Material Resource: 描述材料
  • Utility Resources: 用于描述 IFC 对象的从属关系和版本历史;

除了这些之外,资源层还具有一系列的 scheme 定义,例如 Cost, Measure, Datatime, Representation 等。

5 继承树

IFC 模型定义局部

如同任何其他面向对象设计的数据模型一样,继承树在 IFC 中扮演了关键的角色。上图展示了 IFC 模型继承树的部分结构。在本章节我们关注其中的若干重要类。

5.1 IfcRoot 及其直接子类

继承树的起点是 IfcRoot 类。除了资源层的类以外,其他所有层的对象都必须直接或者间接地继承自 IfcRoot。这个类提供了基础的对象身份功能(GUID),该身份标识可以唯一地确定一个对象,并检索其在变更历史上的位置。除此之外,每个对象可以具备一个名称和一段描述。

直接从 IfcRoot 派生出来的类是 IfcObjectDefinition, IfcPropertyDefinition 以及 IfcRelationship

IfcObjectDefinition 是所有代表物理对象、空间对象以及概念对象(conceptual elements)的类的祖先;这个类的是哪个子类是 IfcObject, IfcTypeObjectIfcContext (代表一般的项目信息)。

IfcRelationship 的子类代表了对象之间的关系。这个设计将关系本身的语义信息和对象自身的属性解耦开来。

IfcPropertyDefinition 定义了一个对象具有的,尚未定义在 IFC 数据模型中的属性。

5.2 IfcObject 及其直接子类

如前所述,IfcObject 代表了一个建筑项目中的各种具有实际物理含义的对象。它是 IFC 模型中六个重要类的父类:

  • IfcProduct: 代表一个物理对象或者空间类型;IfcProduct 对象可以被赋予一个几何形状表达,并被放置到项目坐标系中;
  • IfcProcess: 代表了在一个建筑项目中的一个处置流程(规划、建设、操作等)。这些流程具有时间维度;
  • IfcControl: 控制或者限制另一个对象的对象。这种控制形式可以是法律,指导、规范、边界条件或者其他限制条件;
  • IfcResource: 描述了作为一个流程的一部分的对象;
  • IfcActor: 描述建筑项目中人的参与;
  • IfcGroup: 对象的任意组合;

5.3 IfcProduct 及其直接子类

IfcProduct 能够表示所有和几何、空间上下文相关的对象。这类对象具有几何形态属性和空间位置属性。

IfcElemenetIfcProduct 一个子类,它是一系列描述物理对象的重要类型的父类,如 IfcBuildingElement(这个类是 IfcWall, IfcColumn, IfcWindow 等类的父类);

IfcSpatialElement 类,用来描述非物理形态的空间概念对象。其子类包括 IfcSite, IfcBuilding, IfcBuildingStorey, IfcSpace

IfcProxy 这个子类被用作占位符,用于表示不具备语义类型的对象。这些对象有时候也可以具有几何形态和位置信息。其子类包括 IfcAnnotation, IfcGrid, IfcPort

6 对象关系

6.1 一般概念

对象关系是 IFC 数据模型的重要方面。典型的关系类型可以是整体/部分关系,链接关系或者定义关系。IFC 将关系描述本身对象化,即在业务含义上具备一定关联关系的对象直接并不直接持有指向对方的引用,而是通过一个媒介对象来建立间接的链接,此媒介对象代表了关系本身。关系对象本身描述了方向的指向,在命名规范上,分别用 related...Elementrelating..Element 来代表关系的客体和主体。同时,为了检索反向关系,在主体和客体对象中会建立对应的关系属性。正向和反向关系相关属性指向的是同一个关系对象。

主体、客体与关系描述对象的关系示意图

关系对象都是 IfcRelationship 的子类的实例。相关类型的继承树系统见下方的示意图。IFC 中定义了下面六种基本关系:

  • IfcRelAssociation: 用于将一个外源信息(例如 classification, libraries or documents)关联到一个对象。
  • IfcRelDecompose: 用于表示对象的组分拆分的概念。这个关系描述了整体/部分的关系。其子类包括 IfcRelNests(被嵌套的对象内有顺序), IfcRelAggregate(聚合对象之间没有顺序), 以及 IfcVoidElement (对应开口 openning 关系)。
  • IfcRelDefines: 将一个对象关联到一个属性集定义(Property Set Definition)或者一个类型定义(Type Definition)。
  • IfcRelConnects: 描述两个对象之间的连接关系;
  • IfcRelDeclares: 代表了一个对象,其定义属性与相应上下文的关系、
  • IfcRelAssigns: 代表两个对象之间的一般意义上的链接关系。
IFC 数据模型中关系类型的继承树系统

6.2 空间聚合结构

IFC 模型对建筑的描述的一个重要底层概念是空间在不同层级上的聚合体系。所有具有空间语义含义的概念都派生自 IfcSpatialStructureElementIfcSite 用来表示建筑场地,IfcBuilding 用来表示建筑物,IfcBuildingStorey 表示特定的楼层,而 IfcSpace 用来表示独立的空间与走廊。IfcSpatialZone 表示一般意义上并不满足默认的建筑结构特征的空间区域,这些空间通过 IfcRelAggregates 关系组织起来。

空间结构体系的一个示例。

上图展示了空间结构体系的一个示例。上图中需要注意的是在被聚合(related)的 IfcSpatialStructureElement 的属性 CompositionType 被用来进一步描述聚合关系所。PARTIAL 表示整体、部分的关系,而 ELEMENT 则代表了简单的嵌入元素。

注意数据模型本身并明确定义每种类型应该出现在聚合体系中的什么位置,其数据规则应该有程序的开发者来定义和保证。这些规则可能包括不同类型的上下层限制与嵌套关系不能构成环路等。

为了描述建筑元素在空间聚合体系中的层级,我们使用了 IfcRelContainedInSpatialStructure 这个关系类型(如下图)。在大多数情况下,建筑元素都会链接到层上但是注意,任何一个建筑元素只能建立一个 IfcRelContainedInSpatialStructure 关系。如果一个元素纵跨多个楼测过,则需要使用 IfcReferencedInSpatialStructure 关系来关联到其他楼层。

IfcRelContainedInSpatialStructure 和 IfcReferencedInSpatialStructure 关系示例。

6.3 空间与边界元素的关系

BIM 场景中大量应用都需要获取空间元素与包围空间元素的边界元素之间的关系,这些边界元素可以是墙体,层以及天花板。为了建模这种关系,IFC 数据模型引入了 IfcRelSpaceBoundary 关系。其属性 RelatingSpace 指向目标空间,而 RelatedBuildingElement 则指向其边界元素。同时,我们可以使用 IfcConnectionGeometery 对象来表述空间和边界元素接触的表面形态。

空间边界总是从空间对象的视角进行阐述,根据次视角可以将空间边界划分成两个不同的层级。

  • Level 1 空间边界:不考虑边界元素对侧的变化情况。
  • Level 2 空间边界:考虑边界元素对侧的情况,再次划分成两个类型:
    • Level 2 Type-A: 在此边界对侧是一个空间;
    • Level 2 Type-B: 在此边界对侧是(另)一个建筑元素;
不同层级的边界定义。

对于空间边界更精细的定义方式需要根据应用场景来进行进一步设计;

6.4 指定材质

暂时我不关心这个问题,略过

7 几何表示

7.1 语义描述与几何表示的划分

IFC 模型严格区分了语义描述及其几何表示。语言描述表明了对象的语义身份,并且可以与一个或者多个几何表示相关联。因此对象身份将只与一个语义对象有关,而独立于其几何表示。

语义描述与几何表示的划分。

允许为同一个对象关联不同的几何表示,解决了在不同的应用场景下的不同需求。例如在一个纯显示程序中,立体对象只需要使用三角面表示即可完成渲染,但是在编辑场景中就需要使用高质量的 Brep 或者 CSG 表示。也可以为对象关联二维几何表达,使得 IFC 模型中可以保留二位图纸信息。

维护不同的几何表示之间的一致性是开发者的任务,IFC 标准并不解决这个问题。

7.2 几何描述形式

所有设计几何建模的类型都可以被划分到三个类别,分别是 Geometric Model Resource, Geometry Resource,或者 Topology Resource。在多数情况下这些数据结构的定义都符合 STEP 标准或者 X3D 标准。

所有的几何类都集成自抽象基类 IfcGemetricRepresentationItem。其子类可以分类成曲线表达 (IfcCurve 及其子类),曲面表达 (IfcSurface 及其子类),以及实体表达 (IfcSolidModel 及其紫烈)。几何表达的维度用 IfcGemetricRepresentationItemDim 属性表示。

7.2.1 点、向量与方向

  • IfcCartesianPoint
  • IfcCartesianPointList
  • IfcVector
  • IfcDirection

7.2.2 二维和三维曲线

一共有三个IfcCurve的子类可以用来描述线条,分别是 IfcBoundedCurve, IfcConic, IfcLine。自由曲线可以使用 IfcBSplineCurve 表示。IfcCompositeCurve 可以用来表示由多段曲线构成的复合曲线。

上述类型可以用于三维和二位的曲线表示,但是需要将表示维度的属性设置正确。

7.2.3 Bounding Box

Bounding Box 是高度简化的三维物体表达,通常被用来作为一个 Placeholder,或者连同一个更精细的几何表示一起使用。IfcBoundingBox 使用一个角点加上三个棱线长度来表示这个立方体。

7.2.4 面模型

面模型提供了描述有多个子面(sub-surfaces) 组成的复合曲面。疼吗通常被用来描述空间尺度交大的面(如地形)或者非常平整的面。三维实心体也可以使用他们的曲面表面来描述。

IFC 数据模型支持两种不同的表面模型变种(见下图)。IfcFaceBasedSurfaceModel 可以通过若干 IfcShell 对象来描述不含孔的实心体。这些壳对象可以开的 (IfcOpenShell),也可以是闭的 (IfcClosedShell)。

描述面模型的类

7.2.5 三角化曲面描述

通过三角面来描述立体对象是一种广为接受的形式,这种数据格式几乎可以被所有的可视化软件解读。其缺陷在于立体对象的描述精度收到三角形数量的限制,其数据量较大,且很多软件提供的对这种数据结构的编辑功能比较有限。

IFC 数据模型提供了 IfcTriagnulatedFaceSet 类来描述三角面形式的曲面描述。其基类是 IfcTessellatedFaceSet

IFC 实现了 Indexed Face Set。类 IfcTriangulatedFaceSet 的属性 Coordinates 是一个 IfcCartesianPointList3D 类型的对象,记录了所有三角形面片的坐标。同时每个面片还有一个法向量属性(Normal)。同时也可以链接颜色和纹理属性。

7.2.6 实心体模型

IFC 支持杜仲不同表示三维实体的方法,他们具有统一的基类 IfcSolidModel。这些类包括 IfcCsgSolid, IfcmanifoldSolidBRep, IfcSweptAreaSolid 以及 IfcSwiptDiskSolid

manifold: a collection of points forming a certain kind of set, such as those of a topologically closed surface or an analog of this in three or more dimensions.

7.2.7 边界表示

表示几何实体最有效、最灵活的方式是边界表示 (Boundary Representation, BRep)。IfcManifoldSolidBrep 的两个的子类 IfcFacetedBrepIfcAdvancedBrep 实现了两种典型的 BRep 数据结构。其中,前者只能描述平直的面(指每个子面都是平的),但是后者可以描述存在弯曲的情况。

但是这两个结构都只能描述实心体的外壳,因此无法描述包含孔洞的情况。为了兼容这种情况,IFC 引入了 IfcFacetedBrepWithVoidsIfcAdvancedBrepWithVoids 类。

如下图所示,IfcFacetedBrep 被用来表示具有平整表面的实心体。IfcFacetBrep 对象表示了整体,其 Outer 属性是一个类型为 IfcClosedShell 的对象,而这个对象由进一步引用了一系列的 IfcFace 对象。每个 IfcFace 对象可有任意多个IfcFaceBound 对象描述的封闭曲面。每个 IfcFaceBound 对象指向一个 IfcLoop 类型的对象,这个对象描述了一个点组成的列表。注意在曲面描述中,相邻曲面共享的顶点和边这些对象只会存在一份,此份数据可以被多次引用。

下图展示了使用 IfcAdvancedFace 表示复杂曲面的数据结构的例子。注意在这个例子中,IfcClosedShell 引用的是 IfcAdvancedFace 类型的曲面表示对象。不同于 IfcFace,这个类的对象本身具有几何描述属性,此属性为使用 NURBS 几何描述模型的 IfcBSplineSurface 类。在下方的各个层级的对象中,其几何描述都指向此描述模型中几何对象。

7.2.8 构造性实心几何表达 (Constructive Solid Geometry)

GSG 模型通过简单实心体元素的布尔操作来定义复杂实心体,这些操作包括并 (Union)、交 (Intersection)、差 (Difference)等操作。IFC 数据模型提供了 IfcCsgPrimitve3D 及其子类 IfcBlock, IfcRectangularPyramid, IfcRightCircularCone, IfcRightCircularCylinderIfcSphere 等类型类表示基础实心体元素。

IfcBooleanResult 被用来描述几何操作,其 Operator 属性可以在三个可选项中取值 -- UNION, INTERSECTIONDIFFERENCEFirstOperandSecondOperand 好随性则指向参与操作的元素,这些元素可以是 IfcSolidModel, IfcHalfSpaceSolid, IfcCsgPrimitive3D 或者 IfcBooleanResult。我们可以看出 IfcBooleanResult 可以递归式地使用,从而具备强大的表示能力。

7.2.9 裁切 (Clip)

裁切可以用来表示实心体被一个平面切开的过程。这个过程使用一个特殊的 CSG 操作来实现。第一个操作对象是待裁切元素(IfcSolidModel),第二个操作对象是一个特殊的半空间对象 IfcHalfSpaceSolid,操作符总是 DIFFERENCE

7.2.10 旋转、挤出和扫掠实体

IFC 中我们可以通过 IfcSweptAreaSolid 及其子类 IfcExtrudeAreaSolid, IfcRevolveAreaSolid, IfxFixedReferenceSweptAreaSoid 以及 IfcSurfaceCurveSweptAreaSolid。除了这一支类族以外,还有直接继承自 IfcSweptDiskSolidIfcSweptDiskSolid

每个操作的从基础元素形态以 IfcProfileDef 类型的对象给出(这是操作类的 SweptArea 属性)。IfcProfileDef 最常见子类是 IfcArbitraryClosedProfileDef,这个类通过引用一个 IfcCruve 对象来指定一个基础的闭合图形。

通过使用 IfcExtrudedAreaSolid,基础图形元素可以型一个指定的方向(ExtrudedDirection 属性)挤出指定的距离(Depth 属性)。如果是使用 IfcResolvedAreaSolid,则基础图形会被绕着指定的轴(Axis 属性) 旋转指定的角度 (Angle 属性)。

使用 IfcFixedReferenceSweptAreaSolid 类,我们可以表示一个基础图形沿着空间中的指定曲线 (Directrix 属性) 运动扫略过的实心体。其特征是在扫略过程中,基础图形的不会发生形变,其朝向和一个固定的引用向量 (FixedReference 属性)保持一致。

使用 IfcSectionedSpine 可以表示一组连续的的基础图形之间的差值(上图左侧)。其类型为 IfcCompositeCurve 的属性对象描述了合成曲线的轨迹。CorssSections 属性记录了参与差值的各个基础图形,每个图形的位置由 CrossSectonPosition 给出

IfcSweptDiskSolid 直接继承自 `IfcSolidModel。其使用的扫掠基础图形总是圆形,且在扫略过程中基础图形的朝向会随着轨迹的变化而改变。

7.3 相对定位

IFC 模型中的几何定位强烈地依赖于局部坐标系统。不同的坐标系统之间需要建立映射关系。例如墙体的定位坐标是相对于本层的坐标系统,而层的坐标系统可以映射到整个建筑物的坐标系。这个多层级的坐标系体系可以赋予模型更大的灵活性。IFC 中,我们将上述思想命名为 Local Placement。IFC 中定义了一系列派生自 IfcObjectPlacement 的类,如下图所示。

IfcLocalPlacemente 类继承自 IfcObjectPlacement,此类提供了两个属性:一个可选属性 PlacementRelTo 属性指向提供父级坐标系的对象(这个对象也是 IfcObjectPlacement 类型的,若为空,则对象的定位是相对于全局坐标系的),和 RelateivePlacement 的属性(定义了从父级坐标系到局部坐标系的变换)。这里的变换可以是二维 (IfcAxis2Placement3D) 的或者三维的 (IfcAxis2Placement3D)。下图展示了 IfcAxis2Placement3D 工作的原理。

相对定位体系的图示。

IfcLocalPlacement 构成递归体系和建筑空间对象之间的体系具有密切的联系。在一般实践中,只有 IfcSite 对象才会在全局坐标系中完成定位,而次级对象都以局部相对定位的方式来完成坐标描述。

除了定位系统以外,IFC 中还提供了对齐功能。IfcGrid 类提供了一种非常灵活的网格定义能力。此处所称的网格可以正方形的,辐条型的或者三角形的,如下图所示。非规则性的网格系统也能够被定义出来。基于网格的定位类 IfcGridPlacement 及其属性 PlacementLocation 可以描述在网格系统中的定位。

8 扩展功能:属性集及代理

对于建筑对象的基础关键属性,如门、墙的属性,我们可以提前在 IFC 规范中通过成员属性的方式给出定义。不过针对不同业场景,这些基础建筑元素还可能衍生出大量不同的属性,这些属性如果直接以属性形式定义在其类定义中,无疑会使得整个模型变得臃肿,同时,这些扩展属性类型我们也无法提前全部定义。为了解决这个问题,IFC 将属性分为两类:一类是直接定义在 IFC 模型中的静态属性,另一类是可以动态创建的属性。动态属性可以通过 IfcProperty 的子类来完成定义(通常是 IfcPropertySingleValue,这些属性可以根据需要而自由地谈加到实例中。动态属性的数量本身没有限制。新的对象属性的定义方式一简单的键值对形式进行。属性对象可以被 IfcPropertySet 组织起来并成组地被赋予给对象(通过 IfcRelDefinesByProperties 关系)。

属性集使用的例子

IfcProxy 系统是对动态属性集机制的一个补充。代理机制使得我们可以在程序运行的动态环境下的赋予一个类以语义含义。

9 建筑元素的类型化(Typification)

为了更加高效地描述在模型中频繁出现的对象,IFC 支持可复用对象(reusable types)。一个元素可以作为模板对象而被再次初始化,此时部分数据可以在新对象中被复用,而只有不同的部分需要被设置。IFC 支持在两种情况下的类型化。

9.1 语义对象化(Semantic typification)

若一个 IfcTypeObject 通过 IfRelDefinesByType 关系关联到一个对象,在对象被真正初始化之前,属性集对象会先被初始化并关联 IfcTypeObject 上,而具体的建筑元素对象通过建立和此对象的关系来索引扩展属性定义。

9.2 几何对象化(Geometric typification)

几何表示的复用可以通过 IfcMappedItems 来实现。同大多数 CAD 中引入的「块」概念类似,几何表示对象 IfcShapeReprestation 首先被常见出来,并存储在由一个局部坐标系定义的 IfcRepresentationMap 对象中。这个对象类似于 IfcPropertySet,可以被分配给一个 IfcTypedObject。以一个门的对象定义为例,当一个门被创建时,此对象会建立起对 IfcReprensentationMap 的引用,然后门对象会使用一个本地变换操作 IfcCartesianTransformationOperator 来得到自身的几何表示。