-
Notifications
You must be signed in to change notification settings - Fork 1
IFC Concepts
This page provides background on IFC (Industry Foundation Classes) for developers who are new to BIM (Building Information Modeling).
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
| 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.
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.);
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)
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_$
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)
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.
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.
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 |
IfcOwnerHistory tracks who created or modified an entity:
-
OwningUser— person responsible -
OwningApplication— software used -
CreationDate— Unix timestamp -
ChangeAction— ADDED, MODIFIED, DELETED, etc.
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 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
| Category | Count |
|---|---|
| Entity types | 876 |
| Enumerations | 243 |
| Type aliases | 132 |
| Select types | 61 |
| Functions | 50+ |
| Rules | 30+ |
- buildingSMART IFC Documentation
- IFC4X3 ADD2 Schema
- STEP File Format — the physical file format used by IFC
- Architecture — how Ifc-Factory implements these concepts
Ifc-Factory
Getting Started
Concepts
Packages
API & Reference
Development