Skip to content

IFC Concepts

Maarten Vroegindeweij edited this page Feb 18, 2026 · 1 revision

IFC Concepts

This page provides background on IFC (Industry Foundation Classes) for developers who are new to BIM (Building Information Modeling).

What is IFC?

IFC (Industry Foundation Classes) is an open, international standard for exchanging BIM data. It is:

  • Developed by buildingSMART International
  • Registered as ISO 16739
  • Schema version used by this library: IFC4X3 ADD2
  • File format: STEP (ISO 10303-21) — a plain text format

IFC Schema Versions

Version Year Status Notes
IFC2X3 2006 Legacy Still widely used in practice
IFC4 2013 Current Major update, improved geometry
IFC4X1 2017 Current Infrastructure extensions
IFC4X2 2019 Current Bridge/tunnel extensions
IFC4X3 2024 Latest Full infrastructure (road, rail, port, waterway)

Ifc-Factory targets IFC4X3 ADD2 — the latest official release.

Core Concepts

1. Entities

Everything in IFC is an entity. An entity is an instance of a type defined in the IFC schema. Each entity has:

  • expressID — a unique integer identifier (e.g., #42)
  • type — the entity type name (e.g., IfcWall)
  • attributes — named properties defined by the schema
#42 = IFCWALL('2TGt$H0E5Cexq0Fmv1x7tP', #2, 'Main Wall', $, $, #15, #30, $, .SOLIDWALL.);

2. Entity Hierarchy

IFC entities form an inheritance hierarchy. The root of almost all meaningful entities is IfcRoot:

IfcRoot
├── IfcObjectDefinition
│   ├── IfcObject
│   │   ├── IfcProduct
│   │   │   ├── IfcElement
│   │   │   │   ├── IfcBuildingElement
│   │   │   │   │   ├── IfcWall
│   │   │   │   │   ├── IfcDoor
│   │   │   │   │   ├── IfcWindow
│   │   │   │   │   ├── IfcSlab
│   │   │   │   │   ├── IfcColumn
│   │   │   │   │   ├── IfcBeam
│   │   │   │   │   └── ...
│   │   │   │   ├── IfcDistributionElement
│   │   │   │   │   └── (HVAC, plumbing, electrical)
│   │   │   │   └── ...
│   │   │   ├── IfcSpatialElement
│   │   │   │   ├── IfcSite
│   │   │   │   ├── IfcBuilding
│   │   │   │   ├── IfcBuildingStorey
│   │   │   │   └── IfcSpace
│   │   │   └── ...
│   │   └── IfcProcess, IfcResource, ...
│   └── IfcTypeObject (type definitions)
├── IfcRelationship (connects entities)
└── IfcPropertyDefinition (properties, quantities)

3. GloballyUniqueId (GUID)

Every entity that inherits from IfcRoot has a GlobalId — a 22-character base64-encoded UUID that uniquely identifies the object across all IFC files worldwide.

GlobalId: '2TGt$H0E5Cexq0Fmv1x7tP'

The IFC GUID uses a custom base64 alphabet: 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_$

4. Spatial Structure

IFC organizes building elements in a hierarchical spatial structure:

IfcProject
└── IfcSite
    └── IfcBuilding
        ├── IfcBuildingStorey (Ground Floor)
        │   ├── IfcWall
        │   ├── IfcDoor
        │   └── IfcWindow
        ├── IfcBuildingStorey (First Floor)
        │   └── ...
        └── IfcBuildingStorey (Roof)

Key relationships:

  • IfcRelAggregates — parent-child decomposition (Project → Site → Building → Storey)
  • IfcRelContainedInSpatialStructure — elements placed in a spatial element (Storey contains Wall)

5. Property Sets

Properties are attached to elements via property sets (IfcPropertySet):

IfcPropertySet "Pset_WallCommon"
├── IsExternal = true
├── LoadBearing = true
├── FireRating = "REI90"
└── ThermalTransmittance = 0.18

Properties are linked to elements via IfcRelDefinesByProperties.

Standard property sets (starting with Pset_) are defined by buildingSMART. Custom property sets can use any name.

6. Quantity Sets

Similar to property sets, but for physical quantities:

IfcElementQuantity "Qto_WallBaseQuantities"
├── Length = 5.0 m
├── Height = 3.0 m
├── GrossArea = 15.0 m²
└── NetVolume = 4.5 m³

Quantity types: IfcQuantityLength, IfcQuantityArea, IfcQuantityVolume, IfcQuantityWeight, IfcQuantityCount, IfcQuantityTime.

7. Relationships

IFC uses objectified relationships — relationships are entities themselves, not just links:

Relationship Purpose
IfcRelAggregates Decomposition (parent → children)
IfcRelContainedInSpatialStructure Element → spatial element
IfcRelDefinesByProperties Element → property set
IfcRelAssociatesMaterial Element → material
IfcRelAssociatesDocument Element → document
IfcRelAssociatesClassification Element → classification
IfcRelAssociatesLibrary Element → library
IfcRelConnectsElements Element → element connection
IfcRelVoidsElement Opening in element
IfcRelFillsElement Door/window fills opening

8. Owner History

IfcOwnerHistory tracks who created or modified an entity:

  • OwningUser — person responsible
  • OwningApplication — software used
  • CreationDate — Unix timestamp
  • ChangeAction — ADDED, MODIFIED, DELETED, etc.

9. Geometry (Not in Ifc-Factory v1)

IFC supports multiple geometry representations:

  • Swept solids — extrude a 2D profile along a path
  • B-rep — boundary representation (faces, edges, vertices)
  • CSG — constructive solid geometry (boolean operations)
  • Tessellation — triangulated mesh
  • Mapped geometry — reuse geometry with transformation

Note: Ifc-Factory v1 focuses on data operations and does not include a geometry engine. Geometry data is preserved during round-trips but not interpreted.

IFC4X3 Additions

IFC4X3 adds significant infrastructure support:

  • IfcRoad — road alignments and cross-sections
  • IfcRailway — rail infrastructure
  • IfcBridge — bridge elements
  • IfcTunnel — tunnel segments
  • IfcMarineFacility — ports and waterways
  • IfcAlignment — horizontal/vertical alignment curves
  • IfcLinearPlacement — placement along an alignment curve

Schema Statistics (IFC4X3 ADD2)

Category Count
Entity types 876
Enumerations 243
Type aliases 132
Select types 61
Functions 50+
Rules 30+

Further Reading

Clone this wiki locally