Every IFC file is built from the same core: a root entity that gives each object an
identity, objects and their types, relationships that are entities in their own
right, a spatial structure that holds the physical elements, property and quantity
sets, and the units that numbers are measured in. This page covers those parts of IFC
4.3 (schema IFC4X3_ADD2), mostly from the IfcKernel,
IfcProductExtension, IfcUtilityResource,
IfcPropertyResource, IfcQuantityResource and
IfcMeasureResource schemas. Attribute order, types and optionality are
taken from buildingSMART’s UML model of the schema; meanings from the documentation.
In the tables, # is the attribute’s position in a file instance (see
the clear-text file), counting inherited
attributes first; “opt.” marks an OPTIONAL attribute, which may be left unset.
- IfcRoot and the kernel entity tree
- GlobalId compression
- Owner history
- Objects, products, types and the project
- Objectified relationships
- Spatial structure and facilities
- Property and quantity sets
- Units
- Worked example
IfcRoot
IfcRoot is the abstract supertype of every entity outside the resource
schemas. Its subtypes can stand on their own in a file; entities of the resource
schemas, which do not descend from IfcRoot, have no identity and exist
only when something rooted refers to them. Two resource instances with equal values
mean the same thing, and sharing one instance between users is recommended but not
required.
| # | Attribute | Type | Meaning |
|---|---|---|---|
| 1 | GlobalId | IfcGloballyUniqueId | Globally unique identifier, unique across all files (rule UR1: unique in the file) |
| 2 | OwnerHistory | IfcOwnerHistory, opt. | Owning user and application and the last change; optional since IFC4 |
| 3 | Name | IfcLabel, opt. | Name for users and software; some subtypes require it |
| 4 | Description | IfcText, opt. | Informative comment |
Kernel entity tree
IfcRoot has three direct subtypes: object definitions (things,
occurrences and types), property definitions, and relationships. Objects divide into
six kinds: products (physical or spatial things with a place and shape), processes
(actions in time), controls (constraints and requirements), resources (the use of
something in a process), actors (people and organisations involved) and groups.
IfcRoot
├── IfcObjectDefinition
│ ├── IfcObject
│ │ ├── IfcActor
│ │ ├── IfcControl
│ │ ├── IfcGroup
│ │ ├── IfcProcess
│ │ ├── IfcProduct
│ │ │ ├── IfcAnnotation
│ │ │ ├── IfcElement
│ │ │ ├── IfcLinearElement
│ │ │ ├── IfcPort
│ │ │ ├── IfcPositioningElement
│ │ │ ├── IfcSpatialElement
│ │ │ ├── IfcStructuralActivity
│ │ │ └── IfcStructuralItem
│ │ └── IfcResource
│ ├── IfcTypeObject
│ │ ├── IfcTypeProcess
│ │ ├── IfcTypeProduct
│ │ │ ├── IfcElementType
│ │ │ └── IfcSpatialElementType
│ │ └── IfcTypeResource
│ └── IfcContext
│ ├── IfcProject
│ └── IfcProjectLibrary
├── IfcPropertyDefinition
│ ├── IfcPropertySetDefinition
│ │ ├── IfcPreDefinedPropertySet
│ │ ├── IfcPropertySet
│ │ └── IfcQuantitySet
│ │ └── IfcElementQuantity
│ └── IfcPropertyTemplateDefinition
└── IfcRelationship
├── IfcRelAssigns
├── IfcRelAssociates
├── IfcRelConnects
├── IfcRelDeclares
├── IfcRelDecomposes
└── IfcRelDefines
GlobalId compression
IfcGloballyUniqueId holds a GUID, an automatically generated 128-bit
number, compressed to a fixed string of 22 characters. Each character carries six
bits, taken from this 64-character alphabet:
1 2 3 4 5 6
0123456789012345678901234567890123456789012345678901234567890123
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_$"
_ 62 and $ 63.The documentation warns that this differs from common base64. The 16 bytes are encoded in order, most significant bits first:
- The first byte is encoded in the first two characters (2 + 6 bits). The first
character can therefore only be
0,1,2or3. - The remaining 15 bytes are encoded in five groups of three bytes, each group becoming four characters.
The documentation’s example: the GUID f70dd363-bfe3-495d-84a0-2c02dcb7d4d2
compresses to 3t3TDZl_D9NOIWB0BSjzJI. Worked through:
| Bytes | Bits | 6-bit values | Characters |
|---|---|---|---|
f7 | 11 110111 | 3, 55 | 3t |
0d d3 63 | 000011 011101 001101 100011 | 3, 29, 13, 35 | 3TDZ |
bf e3 49 | 101111 111110 001101 001001 | 47, 62, 13, 9 | l_D9 |
5d 84 a0 | 010111 011000 010010 100000 | 23, 24, 18, 32 | NOIW |
2c 02 dc | 001011 000000 001011 011100 | 11, 0, 11, 28 | B0BS |
b7 d4 d2 | 101101 111101 010011 010010 | 45, 61, 19, 18 | jzJI |
Decoding reverses the steps: the first character gives the top two bits of byte 0, and every following group of four characters gives three bytes. The documentation refers to buildingSMART’s technical website for sample code.
Owner history
IfcOwnerHistory (resource schema IfcUtilityResource)
records who owns an object, which application created it and the last change. It is
attached directly to rooted objects, relationships and property sets.
| # | Attribute | Type | Meaning |
|---|---|---|---|
| 1 | OwningUser | IfcPersonAndOrganization | The end user who currently owns the object |
| 2 | OwningApplication | IfcApplication | The application that owns it on the user’s behalf |
| 3 | State | IfcStateEnum, opt. | Access state |
| 4 | ChangeAction | IfcChangeActionEnum, opt. | Change made in the last session; optional since IFC4 |
| 5 | LastModifiedDate | IfcTimeStamp, opt. | Time of the last modification, UTC |
| 6 | LastModifyingUser | IfcPersonAndOrganization, opt. | Who made it |
| 7 | LastModifyingApplication | IfcApplication, opt. | With which application |
| 8 | CreationDate | IfcTimeStamp | When the owning application first created it, UTC; never changes |
IfcTimeStamp is an INTEGER count of seconds since 1 January 1970,
00:00:00 UTC. Rule CorrectChangeAction: if ChangeAction is given but
LastModifiedDate is not, ChangeAction must be NOTDEFINED. If
the date is given without ChangeAction, the action is taken as undefined;
if both are given, the action applies to that date.
IfcStateEnum
| Value | Meaning |
|---|---|
| READWRITE | May be modified by an application |
| READONLY | May be viewed but not modified |
| LOCKED | May not be accessed |
| READWRITELOCKED | Read-write-locked; may not be accessed |
| READONLYLOCKED | Read-only-locked; may not be accessed |
IfcChangeActionEnum
| Value | Meaning |
|---|---|
| NOCHANGE | Not modified |
| MODIFIED | Modified by the last modifying user and application |
| ADDED | Created by the owning user and application |
| DELETED | Deleted by the last modifying user and application |
| NOTDEFINED | Not known or not defined |
The documentation describes the intended use: an application publishing a model for others to edit sets NOCHANGE as a baseline; a receiving application sets ADDED or MODIFIED on what it changes; a model server resets the values to NOCHANGE before republishing. MODIFIEDADDED and MODIFIEDDELETED were removed in IFC4.
The user and the application
| Entity | # | Attribute | Type |
|---|---|---|---|
IfcApplication | 1 | ApplicationDeveloper | IfcOrganization |
| 2 | Version | IfcLabel | |
| 3 | ApplicationFullName | IfcLabel | |
| 4 | ApplicationIdentifier | IfcIdentifier (the developer’s short name for the application) | |
IfcPersonAndOrganization | 1 | ThePerson | IfcPerson |
| 2 | TheOrganization | IfcOrganization | |
| 3 | Roles | LIST [1:?] OF IfcActorRole, opt. | |
IfcPerson | 1 | Identification | IfcIdentifier, opt. |
| 2 | FamilyName | IfcLabel, opt. | |
| 3 | GivenName | IfcLabel, opt. | |
| 4 | MiddleNames | LIST [1:?] OF IfcLabel, opt. | |
| 5 | PrefixTitles | LIST [1:?] OF IfcLabel, opt. | |
| 6 | SuffixTitles | LIST [1:?] OF IfcLabel, opt. | |
| 7 | Roles | LIST [1:?] OF IfcActorRole, opt. | |
| 8 | Addresses | LIST [1:?] OF IfcAddress, opt.; deprecated in 4.3 | |
IfcOrganization | 1 | Identification | IfcIdentifier, opt. |
| 2 | Name | IfcLabel | |
| 3 | Description | IfcText, opt. | |
| 4 | Roles | LIST [1:?] OF IfcActorRole, opt. | |
| 5 | Addresses | LIST [1:?] OF IfcAddress, opt.; deprecated in 4.3 |
Objects, products, types and the project
Each entity below adds its attributes after those of its supertypes; positions
continue from IfcRoot’s four. IfcObjectDefinition adds only
inverse attributes, so it takes no position.
| Entity | # | Attribute | Type | Meaning |
|---|---|---|---|---|
IfcObject | 5 | ObjectType | IfcLabel, opt. | The user-defined type when PredefinedType is USERDEFINED, or a light type name when the entity has no PredefinedType |
IfcProduct | 6 | ObjectPlacement | IfcObjectPlacement, opt. | The object coordinate system; required when a shape representation is given (rule PlacementForShapeRepresentation) |
| 7 | Representation | IfcProductRepresentation, opt. | The product’s representations, usually an IfcProductDefinitionShape | |
IfcElement | 8 | Tag | IfcIdentifier, opt. | Identifier of the occurrence, such as a serial or position number |
IfcContext | 5 | ObjectType | IfcLabel, opt. | Further type of the context |
| 6 | LongName | IfcLabel, opt. | Full name | |
| 7 | Phase | IfcLabel, opt. | Current project or life-cycle phase | |
| 8 | RepresentationContexts | SET [1:?] OF IfcRepresentationContext, opt. | Geometric contexts: world coordinate system, dimension, precision (see contexts) | |
| 9 | UnitsInContext | IfcUnitAssignment, opt. | Default units (see units) | |
IfcTypeObject | 5 | ApplicableOccurrence | IfcIdentifier, opt. | The occurrence entities the type may be assigned to: an entity name, optionally followed by / and a predefined type, several separated by commas (for example IfcMember/BRACE); no restriction when unset |
| 6 | HasPropertySets | SET [1:?] OF IfcPropertySetDefinition, opt. | Property sets of the type, shared by its occurrences | |
IfcTypeProduct | 7 | RepresentationMaps | LIST [1:?] OF UNIQUE IfcRepresentationMap, opt. | Shapes shared by all occurrences |
| 8 | Tag | IfcLabel, opt. | Identifier of the type, such as an article number | |
IfcElementType | 9 | ElementType | IfcLabel, opt. | Further type name; holds the user-defined type when PredefinedType is USERDEFINED |
IfcProject and IfcProjectLibrary add nothing to
IfcContext, so an IfcProject has nine attributes. Rules on
the project: a file has at most one (global rule IfcSingleProjectInstance);
its Name must be given (HasName); it may not decompose another object
(NoDecomposition); and its RepresentationContexts may not directly
include a sub-context (CorrectContext). The project is the root of the spatial tree,
which hangs from it through IfcRelAggregates, and of other trees such
as work plans, which it declares through IfcRelDeclares.
An object occurrence gets its type through IfcRelDefinesByType and its
own property sets through IfcRelDefinesByProperties; property set names
on one object must be unique (rule UniquePropertySetNames). When the same property
appears in a type’s and an occurrence’s property set, the occurrence value
overrides the type value.
Objectified relationships
Most links between objects are not attributes of the objects but separate
relationship instances, subtypes of IfcRelationship. This keeps
relationship data on the relationship and lets the objects find them through
inverse attributes. Every relationship starts with IfcRoot’s four
attributes. The documentation names six kinds:
| Kind | Supertype | Meaning |
|---|---|---|
| Assignment | IfcRelAssigns | A link through which one object uses the services of others, or navigates to them |
| Association | IfcRelAssociates | Refers to external information, such as a classification, library or document, or to resource definitions such as materials |
| Decomposition | IfcRelDecomposes | Whole and part, navigable both ways |
| Definition | IfcRelDefines | A type or a property set defines an occurrence |
| Connectivity | IfcRelConnects | Connections between objects, including spatial containment |
| Declaration | IfcRelDeclares | Declares objects and property definitions to a project or project library |
Every relationship entity in IFC 4.3
| Supertype | Subtypes |
|---|---|
IfcRelAssigns | IfcRelAssignsToActor, IfcRelAssignsToControl, IfcRelAssignsToGroup (and its subtype IfcRelAssignsToGroupByFactor), IfcRelAssignsToProcess, IfcRelAssignsToProduct, IfcRelAssignsToResource |
IfcRelAssociates | IfcRelAssociatesApproval, IfcRelAssociatesClassification, IfcRelAssociatesConstraint, IfcRelAssociatesDocument, IfcRelAssociatesLibrary, IfcRelAssociatesMaterial, IfcRelAssociatesProfileDef |
IfcRelConnects | IfcRelConnectsElements (with subtypes IfcRelConnectsPathElements and IfcRelConnectsWithRealizingElements), IfcRelConnectsPortToElement, IfcRelConnectsPorts, IfcRelConnectsStructuralActivity, IfcRelConnectsStructuralMember (with subtype IfcRelConnectsWithEccentricity), IfcRelContainedInSpatialStructure, IfcRelCoversBldgElements, IfcRelCoversSpaces, IfcRelFillsElement, IfcRelFlowControlElements, IfcRelInterferesElements, IfcRelPositions, IfcRelReferencedInSpatialStructure, IfcRelSequence, IfcRelServicesBuildings, IfcRelSpaceBoundary (with subtype IfcRelSpaceBoundary1stLevel and its subtype IfcRelSpaceBoundary2ndLevel) |
IfcRelDecomposes | IfcRelAdheresToElement, IfcRelAggregates, IfcRelNests, IfcRelProjectsElement, IfcRelVoidsElement |
IfcRelDefines | IfcRelDefinesByObject, IfcRelDefinesByProperties, IfcRelDefinesByTemplate, IfcRelDefinesByType |
IfcRelDeclares | none |
The relationships most files use
| Entity | # | Attribute | Type |
|---|---|---|---|
IfcRelAggregates – unordered whole and part, used for the spatial tree | 5 | RelatingObject | IfcObjectDefinition (the whole) |
| 6 | RelatedObjects | SET [1:?] OF IfcObjectDefinition (the parts) | |
IfcRelNests – ordered whole and part | 5 | RelatingObject | IfcObjectDefinition |
| 6 | RelatedObjects | LIST [1:?] OF IfcObjectDefinition | |
IfcRelContainedInSpatialStructure – the element is primarily in this spatial element; each element in at most one | 5 | RelatedElements | SET [1:?] OF IfcProduct |
| 6 | RelatingStructure | IfcSpatialElement | |
IfcRelReferencedInSpatialStructure – further spatial elements the element is in | 5 | RelatedElements | SET [1:?] OF IfcSpatialReferenceSelect |
| 6 | RelatingStructure | IfcSpatialElement | |
IfcRelDefinesByProperties | 5 | RelatedObjects | SET [1:?] OF IfcObjectDefinition |
| 6 | RelatingPropertyDefinition | IfcPropertySetDefinitionSelect | |
IfcRelDefinesByType | 5 | RelatedObjects | SET [1:?] OF IfcObject |
| 6 | RelatingType | IfcTypeObject | |
IfcRelDeclares | 5 | RelatingContext | IfcContext |
| 6 | RelatedDefinitions | SET [1:?] OF IfcDefinitionSelect | |
IfcRelAssigns (all subtypes start with these) | 5 | RelatedObjects | SET [1:?] OF IfcObjectDefinition |
| 6 | RelatedObjectsType | IfcStrippedOptional, opt. (buildingSMART’s rule IFC102 requires it empty in 4.3 files) | |
IfcRelAssignsToGroup | 7 | RelatingGroup | IfcGroup |
IfcRelAssociates (all subtypes start with this) | 5 | RelatedObjects | SET [1:?] OF IfcDefinitionSelect |
IfcRelAssociatesMaterial | 6 | RelatingMaterial | IfcMaterialSelect |
IfcRelAssociatesClassification | 6 | RelatingClassification | IfcClassificationSelect |
IfcRelVoidsElement – an opening cut into an element | 5 | RelatingBuildingElement | IfcElement |
| 6 | RelatedOpeningElement | IfcFeatureElementSubtraction | |
IfcRelFillsElement – a door or window filling an opening | 5 | RelatingOpeningElement | IfcOpeningElement |
| 6 | RelatedBuildingElement | IfcElement |
IfcRelationship, IfcRelDecomposes,
IfcRelDefines and IfcRelConnects add no attributes of their
own. In the selects, IfcPropertySetDefinitionSelect lets one relationship
carry either a single property set definition or a set of them.
Spatial structure
The spatial structure is a hierarchy that organises the project. It is built with
IfcRelAggregates, one level at a time, with IfcProject at the
top: the project aggregates the root of the structure, which may be an
IfcSite, an IfcBuilding (when no site is given) or an
IfcSpatialZone. Elements such as walls and pipes join the structure
through IfcRelContainedInSpatialStructure. The documentation’s informal
rules: the hierarchy is acyclic; a site should not be under a building, storey or
space; a building not under a storey or space; a storey not under a space. Every
spatial structure element must be aggregated into another one or into the project
(rule WR41).
IfcSpatialElement
├── IfcSpatialStructureElement
│ ├── IfcSite
│ ├── IfcFacility
│ │ ├── IfcBuilding
│ │ ├── IfcBridge
│ │ ├── IfcMarineFacility
│ │ ├── IfcRailway
│ │ └── IfcRoad
│ ├── IfcFacilityPart
│ │ ├── IfcBridgePart
│ │ ├── IfcFacilityPartCommon
│ │ ├── IfcMarinePart
│ │ ├── IfcRailwayPart
│ │ └── IfcRoadPart
│ ├── IfcBuildingStorey
│ └── IfcSpace
├── IfcSpatialZone
└── IfcExternalSpatialStructureElement
└── IfcExternalSpatialElement
A spatial zone is different: a non-hierarchical, possibly overlapping division of
the project for some purpose, such as a thermal, lighting or fire zone. Positions
below continue from IfcProduct’s seven attributes.
| Entity | # | Attribute | Type | Meaning |
|---|---|---|---|---|
IfcSpatialElement | 8 | LongName | IfcLabel, opt. | Full descriptive name; Name often holds a short name or number |
IfcSpatialStructureElement | 9 | CompositionType | IfcElementCompositionEnum, opt. | Whether this is an element, a complex of elements or a part; ELEMENT when unset (optional since IFC4) |
IfcSite | 10 | RefLatitude | IfcCompoundPlaneAngleMeasure, opt. | WGS84 latitude of the reference point as integers: degrees, minutes, seconds and optionally millionths of a second; north positive |
| 11 | RefLongitude | IfcCompoundPlaneAngleMeasure, opt. | WGS84 longitude in the same form; east positive, west negative | |
| 12 | RefElevation | IfcLengthMeasure, opt. | Datum elevation relative to sea level | |
| 13 | LandTitleNumber | IfcLabel, opt. | Land title number; deprecated in 4.3 (use LandTitleID in Pset_LandRegistration) | |
| 14 | SiteAddress | IfcPostalAddress, opt. | Postal address; deprecated in 4.3 (use Pset_Address) | |
IfcBuilding | 10 | ElevationOfRefHeight | IfcLengthMeasure, opt. | Deprecated in 4.3 |
| 11 | ElevationOfTerrain | IfcLengthMeasure, opt. | Deprecated in 4.3 | |
| 12 | BuildingAddress | IfcPostalAddress, opt. | Deprecated in 4.3 | |
IfcBuildingStorey | 10 | Elevation | IfcLengthMeasure, opt. | Deprecated in 4.3 |
IfcSpace | 10 | PredefinedType | IfcSpaceTypeEnum, opt. | Kind of space |
| 11 | ElevationWithFlooring | IfcLengthMeasure, opt. | Level of the flooring; the average if the floor slopes or has steps | |
IfcSpatialZone | 9 | PredefinedType | IfcSpatialZoneTypeEnum, opt. | Kind of zone |
IfcExternalSpatialElement | 9 | PredefinedType | IfcExternalSpatialElementTypeEnum, opt. | Kind of external space |
IfcSite, IfcBuilding and IfcBuildingStorey
have no PredefinedType in IFC 4.3.
IfcElementCompositionEnum
| Value | Meaning |
|---|---|
| COMPLEX | A group or aggregation of similar elements |
| ELEMENT | An undivided element itself |
| PARTIAL | A sub-element or part |
When one facility or facility part aggregates another of the same kind, the parent has the higher composition type: COMPLEX above ELEMENT, ELEMENT above PARTIAL.
IfcSpaceTypeEnum
| Value | Meaning |
|---|---|
| SPACE | Any space not in another category |
| PARKING | A parking spot for vehicles, including access such as an aisle |
| GFA | Gross floor area: one per storey, including all net and construction area |
| INTERNAL | A space inside a facility; deprecated in 4.3.2.0 in favour of Pset_SpaceCommon.IsExternal |
| EXTERNAL | A space outside a facility; deprecated in 4.3.2.0 likewise |
| BERTH | A space for berthing vessels in a port |
| USERDEFINED | User-defined; the name is in ObjectType |
| NOTDEFINED | Not defined |
Zone and external element types
| Enumeration | Values |
|---|---|
IfcSpatialZoneTypeEnum | CONSTRUCTION, FIRESAFETY, INTERFERENCE, LIGHTING, OCCUPANCY, RESERVATION, SECURITY, THERMAL, TRANSPORT, VENTILATION, USERDEFINED, NOTDEFINED |
IfcExternalSpatialElementTypeEnum | EXTERNAL, EXTERNAL_EARTH, EXTERNAL_FIRE, EXTERNAL_WATER, USERDEFINED, NOTDEFINED |
Facilities and facility parts
IFC 4.3 generalises the building into IfcFacility, any built facility:
building, bridge, marine facility, railway or road. A facility is placed relative to
the site and broken down into IfcFacilityParts, which are placed relative
to their facility. IfcFacility adds no attributes; each facility other
than IfcBuilding adds a PredefinedType at position 10.
| Facility | Schema | PredefinedType values |
|---|---|---|
IfcBridge | IfcProductExtension | IfcBridgeTypeEnum: ARCHED, CABLE_STAYED, CANTILEVER, CULVERT, FRAMEWORK, GIRDER, SUSPENSION, TRUSS, USERDEFINED, NOTDEFINED |
IfcMarineFacility | IfcPortsAndWaterwaysDomain | IfcMarineFacilityTypeEnum: BARRIERBEACH, BREAKWATER, CANAL, DRYDOCK, FLOATINGDOCK, HYDROLIFT, JETTY, LAUNCHRECOVERY, MARINEDEFENCE, NAVIGATIONALCHANNEL, PORT, QUAY, REVETMENT, SHIPLIFT, SHIPLOCK, SHIPYARD, SLIPWAY, WATERWAY, WATERWAYSHIPLIFT, USERDEFINED, NOTDEFINED |
IfcRailway | IfcRailDomain | IfcRailwayTypeEnum: USERDEFINED, NOTDEFINED |
IfcRoad | IfcRoadDomain | IfcRoadTypeEnum: USERDEFINED, NOTDEFINED |
A facility part has two attributes after CompositionType:
| # | Attribute | Type | Meaning |
|---|---|---|---|
| 10 | PredefinedType | Optional; a choice of the part enumerations below | Kind of part. Rule CorrectPredefinedType: when it is USERDEFINED, ObjectType must be given |
| 11 | UsageType | IfcFacilityUsageEnum | How the facility is subdivided |
IfcFacilityUsageEnum
| Value | Meaning |
|---|---|
| LATERAL | A side subdivision (left, right, centre) of a longitudinal segment or facility, such as a traffic lane or embankment |
| REGION | A bounded subdivision in the X–Y plane of the parent |
| VERTICAL | A subdivision in Z, such as an elevation level or a controlled volume |
| LONGITUDINAL | A subdivision along a linear facility, with a start and end along the alignment |
| USERDEFINED | User-defined |
| NOTDEFINED | Undefined |
Facility part types
| Part entity | Enumeration and values |
|---|---|
IfcBridgePart | IfcBridgePartTypeEnum: ABUTMENT, DECK, DECK_SEGMENT, FOUNDATION, PIER, PIER_SEGMENT, PYLON, SUBSTRUCTURE, SUPERSTRUCTURE, SURFACESTRUCTURE, USERDEFINED, NOTDEFINED |
IfcFacilityPartCommon – parts shared by several domains, such as level crossings and junctions | IfcFacilityPartCommonTypeEnum: ABOVEGROUND, BELOWGROUND, JUNCTION, LEVELCROSSING, SEGMENT, SUBSTRUCTURE, SUPERSTRUCTURE, TERMINAL, USERDEFINED, NOTDEFINED |
IfcMarinePart | IfcMarinePartTypeEnum: ABOVEWATERLINE, ANCHORAGE, APPROACHCHANNEL, BELOWWATERLINE, BERTHINGSTRUCTURE, CHAMBER, CILL_LEVEL, COPELEVEL, CORE, CREST, GATEHEAD, GUDINGSTRUCTURE, HIGHWATERLINE, LANDFIELD, LEEWARDSIDE, LOWWATERLINE, MANUFACTURING, NAVIGATIONALAREA, PROTECTION, SHIPTRANSFER, STORAGEAREA, VEHICLESERVICING, WATERFIELD, WEATHERSIDE, USERDEFINED, NOTDEFINED |
IfcRailwayPart | IfcRailwayPartTypeEnum: ABOVETRACK, DILATIONTRACK, LINESIDE, LINESIDEPART, PLAINTRACK, SUBSTRUCTURE, TRACK, TRACKPART, TURNOUTTRACK, USERDEFINED, NOTDEFINED |
IfcRoadPart | IfcRoadPartTypeEnum: BICYCLECROSSING, BUS_STOP, CARRIAGEWAY, CENTRALISLAND, CENTRALRESERVE, HARDSHOULDER, INTERSECTION, LAYBY, PARKINGBAY, PASSINGBAY, PEDESTRIAN_CROSSING, RAILWAYCROSSING, REFUGEISLAND, ROADSEGMENT, ROADSIDE, ROADSIDEPART, ROADWAYPLATEAU, ROUNDABOUT, SHOULDER, SIDEWALK, SOFTSHOULDER, TOLLPLAZA, TRAFFICISLAND, TRAFFICLANE, USERDEFINED, NOTDEFINED |
Values are as in the UML model. Two documentation pages differ from it: the railway part page spells DILATATIONTRACK, and the bridge part page does not list SURFACESTRUCTURE.
Property and quantity sets
Most information about an object beyond its identity and shape is held in
property sets. An IfcPropertySet is a named container of properties,
each interpreted by its name; sets defined by the standard are named
Pset_…, and quantity sets Qto_…. Sets are attached to
occurrences with IfcRelDefinesByProperties, and to types through
IfcTypeObject.HasPropertySets. Changes to the standard sets do not change
the structure of files.
| Entity | # | Attribute | Type |
|---|---|---|---|
IfcPropertySet | 5 | HasProperties | SET [1:?] OF IfcProperty |
IfcElementQuantity | 5 | MethodOfMeasurement | IfcLabel, opt. (the measuring rules the quantities follow) |
| 6 | Quantities | SET [1:?] OF IfcPhysicalQuantity |
Properties and quantities are resource entities, without a GlobalId:
| Entity | # | Attribute | Type |
|---|---|---|---|
IfcProperty (all properties start with these) | 1 | Name | IfcIdentifier |
| 2 | Specification | IfcText, opt. (a URI of a definition, or explanatory text) | |
IfcPropertySingleValue | 3 | NominalValue | IfcValue, opt. (a numeric or descriptive value with its measure type) |
| 4 | Unit | IfcUnit, opt. (overrides the project’s default unit) | |
IfcPhysicalQuantity (all quantities start with these) | 1 | Name | IfcLabel |
| 2 | Description | IfcText, opt. | |
IfcPhysicalSimpleQuantity | 3 | Unit | IfcNamedUnit, opt. |
The simple properties, subtypes of IfcSimpleProperty, are
IfcPropertyBoundedValue, IfcPropertyEnumeratedValue,
IfcPropertyListValue, IfcPropertyReferenceValue,
IfcPropertySingleValue and IfcPropertyTableValue;
IfcComplexProperty nests properties. Each simple quantity adds a value
and a formula after the unit:
| Entity | 4: value | Value type | 5 |
|---|---|---|---|
IfcQuantityLength | LengthValue | IfcLengthMeasure | Formula, IfcLabel, opt. |
IfcQuantityArea | AreaValue | IfcAreaMeasure | |
IfcQuantityVolume | VolumeValue | IfcVolumeMeasure | |
IfcQuantityCount | CountValue | IfcCountMeasure (INTEGER since 4.3) | |
IfcQuantityWeight | WeightValue | IfcMassMeasure | |
IfcQuantityTime | TimeValue | IfcTimeMeasure | |
IfcQuantityNumber | NumberValue | IfcNumericMeasure |
IfcPhysicalComplexQuantity groups quantities. The other subtypes of
IfcPropertySetDefinition are IfcPreDefinedPropertySet, whose
subtypes (door and window lining and panel properties, permeable covering properties
and IfcReinforcementDefinitionProperties) have fixed attributes, and the
templates under IfcPropertyTemplateDefinition, which define the syntax of
custom property sets.
Units
The project’s UnitsInContext sets the default units, declared once for
the whole file. They apply to the geometry, to every attribute whose type is a
measure, and to properties and quantities that give no unit of their own. A unit may
be an SI unit with an optional prefix, a conversion-based unit with a factor to an SI
unit (inch, foot), a derived unit built from unit elements (W/m², for example), or a
monetary unit naming a currency.
| Entity | # | Attribute | Type |
|---|---|---|---|
IfcUnitAssignment | 1 | Units | SET [1:?] OF IfcUnit; no two units of the same type, and at most one monetary unit |
IfcNamedUnit | 1 | Dimensions | IfcDimensionalExponents |
| 2 | UnitType | IfcUnitEnum | |
IfcSIUnit | 3 | Prefix | IfcSIPrefix, opt. |
| 4 | Name | IfcSIUnitName | |
IfcConversionBasedUnit | 3 | Name | IfcLabel |
| 4 | ConversionFactor | IfcMeasureWithUnit | |
IfcMeasureWithUnit | 1 | ValueComponent | IfcValue |
| 2 | UnitComponent | IfcUnit |
In IfcSIUnit the inherited Dimensions is redeclared as
derived: it is computed by the function IfcDimensionsForSIUnit rather
than stored. The SI unit of mass is the gram when no prefix is given, even though the
SI base unit is the kilogram. IfcDimensionalExponents holds seven
INTEGER exponents in this order: LengthExponent,
MassExponent, TimeExponent,
ElectricCurrentExponent, ThermodynamicTemperatureExponent,
AmountOfSubstanceExponent, LuminousIntensityExponent. The
other named units are IfcContextDependentUnit and
IfcConversionBasedUnitWithOffset (a conversion with an offset, a
subtype of IfcConversionBasedUnit); IfcDerivedUnit
and IfcMonetaryUnit are units that are not named units.
IfcUnitEnum
ABSORBEDDOSEUNIT, AMOUNTOFSUBSTANCEUNIT, AREAUNIT, DOSEEQUIVALENTUNIT, ELECTRICCAPACITANCEUNIT, ELECTRICCHARGEUNIT, ELECTRICCONDUCTANCEUNIT, ELECTRICCURRENTUNIT, ELECTRICRESISTANCEUNIT, ELECTRICVOLTAGEUNIT, ENERGYUNIT, FORCEUNIT, FREQUENCYUNIT, ILLUMINANCEUNIT, INDUCTANCEUNIT, LENGTHUNIT, LUMINOUSFLUXUNIT, LUMINOUSINTENSITYUNIT, MAGNETICFLUXDENSITYUNIT, MAGNETICFLUXUNIT, MASSUNIT, PLANEANGLEUNIT, POWERUNIT, PRESSUREUNIT, RADIOACTIVITYUNIT, SOLIDANGLEUNIT, THERMODYNAMICTEMPERATUREUNIT, TIMEUNIT, VOLUMEUNIT, USERDEFINED.
IfcSIUnitName
AMPERE, BECQUEREL, CANDELA, COULOMB, CUBIC_METRE, DEGREE_CELSIUS, FARAD, GRAM, GRAY, HENRY, HERTZ, JOULE, KELVIN, LUMEN, LUX, METRE, MOLE, NEWTON, OHM, PASCAL, RADIAN, SECOND, SIEMENS, SIEVERT, SQUARE_METRE, STERADIAN, TESLA, VOLT, WATT, WEBER.
IfcSIPrefix
| Value | Factor | Value | Factor |
|---|---|---|---|
| EXA | 1018 | DECI | 10−1 |
| PETA | 1015 | CENTI | 10−2 |
| TERA | 1012 | MILLI | 10−3 |
| GIGA | 109 | MICRO | 10−6 |
| MEGA | 106 | NANO | 10−9 |
| KILO | 103 | PICO | 10−12 |
| HECTO | 102 | FEMTO | 10−15 |
| DECA | 10 | ATTO | 10−18 |
IfcDerivedUnitEnum
The unit types of IfcDerivedUnit: ACCELERATIONUNIT,
ANGULARVELOCITYUNIT, AREADENSITYUNIT, COMPOUNDPLANEANGLEUNIT, CURVATUREUNIT,
DYNAMICVISCOSITYUNIT, HEATFLUXDENSITYUNIT, HEATINGVALUEUNIT, INTEGERCOUNTRATEUNIT,
IONCONCENTRATIONUNIT, ISOTHERMALMOISTURECAPACITYUNIT, KINEMATICVISCOSITYUNIT,
LINEARFORCEUNIT, LINEARMOMENTUNIT, LINEARSTIFFNESSUNIT, LINEARVELOCITYUNIT,
LUMINOUSINTENSITYDISTRIBUTIONUNIT, MASSDENSITYUNIT, MASSFLOWRATEUNIT,
MASSPERLENGTHUNIT, MODULUSOFELASTICITYUNIT, MODULUSOFLINEARSUBGRADEREACTIONUNIT,
MODULUSOFROTATIONALSUBGRADEREACTIONUNIT, MODULUSOFSUBGRADEREACTIONUNIT,
MOISTUREDIFFUSIVITYUNIT, MOLECULARWEIGHTUNIT, MOMENTOFINERTIAUNIT, PHUNIT,
PLANARFORCEUNIT, ROTATIONALFREQUENCYUNIT, ROTATIONALMASSUNIT,
ROTATIONALSTIFFNESSUNIT, SECTIONAREAINTEGRALUNIT, SECTIONMODULUSUNIT,
SHEARMODULUSUNIT, SOUNDPOWERLEVELUNIT, SOUNDPOWERUNIT, SOUNDPRESSURELEVELUNIT,
SOUNDPRESSUREUNIT, SPECIFICHEATCAPACITYUNIT, TEMPERATUREGRADIENTUNIT,
TEMPERATURERATEOFCHANGEUNIT, THERMALADMITTANCEUNIT, THERMALCONDUCTANCEUNIT,
THERMALEXPANSIONCOEFFICIENTUNIT, THERMALRESISTANCEUNIT, THERMALTRANSMITTANCEUNIT,
TORQUEUNIT, VAPORPERMEABILITYUNIT, VOLUMETRICFLOWRATEUNIT, WARPINGCONSTANTUNIT,
WARPINGMOMENTUNIT, USERDEFINED.
Worked example
A project with a site, a building, one storey and a wall in that storey, with the relationships that join them. Owner history, placements, geometry and units are left out to keep it short; the identifiers are made up for the example.
#1=IFCPROJECT('0YvctVUKr0kugbFTf53O9L',$,'Project',$,$,$,$,$,$);
#2=IFCSITE('2Ws3aT1Fz1ERmYc1Lr7xgO',$,'Site',$,$,$,$,$,.ELEMENT.,$,$,$,$,$);
#3=IFCBUILDING('1hOSvn6df7F8_7GcBWlRGQ',$,'Building',$,$,$,$,$,.ELEMENT.,$,$,$);
#4=IFCBUILDINGSTOREY('0eBbL5mQf0vBhWl2VZbVDn',$,'Ground floor',$,$,$,$,$,.ELEMENT.,$);
#10=IFCRELAGGREGATES('3Kb2YwKbXEMfJm6ox3H_kx',$,$,$,#1,(#2));
#11=IFCRELAGGREGATES('1VQ5n5$rL6UgGHOFp6Q2Wb',$,$,$,#2,(#3));
#12=IFCRELAGGREGATES('0j5VvM$kD7vg5OwrfJ$rgq',$,$,$,#3,(#4));
#30=IFCWALL('1kTvXnbbzCWw8lcMd1dR4o',$,'Wall 1',$,$,$,$,$,.SOLIDWALL.);
#40=IFCRELCONTAINEDINSPATIALSTRUCTURE('2SKbDu1jX0MRo6l$mKz9ex',$,$,$,(#30),#4);
Reading it: #1 has the nine attributes of IfcProject, with
the name required by rule HasName. #2 has the fourteen of
IfcSite, all optional ones unset except CompositionType.
#3 has the twelve of IfcBuilding and #4 the ten
of IfcBuildingStorey; their deprecated elevation and address attributes
are left unset. Each IfcRelAggregates names the whole at position 5 and
the set of parts at position 6, building the chain project → site → building →
storey. The wall is placed in the storey by #40, whose position 5 is the
set of contained elements and position 6 the storey.
Not confirmed
- The EXPRESS name of the select type used for
IfcFacilityPart.PredefinedType. The UML model gives the attribute no type of its own; its values come from the part enumerations listed above, and the select is produced when the schema is exported. The exported EXPRESS file was not read. - Whether
IfcBridgePart,IfcRoadPartand the other parts redeclarePredefinedTypein EXPRESS: the UML model attaches the enumeration to each part without an attribute position. - The spelling DILATIONTRACK or DILATATIONTRACK, and SURFACESTRUCTURE: the UML model and the documentation pages disagree, as noted above.
- The full attribute lists of the property, quantity, unit and template entities
not shown here, of
IfcDerivedUnitandIfcMonetaryUnit, and of the actor role and address entities.
Sources
- IFC4.3.x-development – buildingSMART’s IFC 4.3 source repository, master branch:
schemas/IFC.xml(the UML model: attributes, their order, types, optionality, generalisations and enumeration values),docs/schemas/core/IfcKernel/README.md,docs/schemas/resource/README.md, the entity pagesIfcRoot,IfcObjectDefinition,IfcObject,IfcProduct,IfcContext,IfcProject,IfcTypeObject,IfcOwnerHistory,IfcApplication,IfcRelAggregates,IfcRelNests,IfcRelDeclares,IfcRelDefinesByProperties,IfcRelDefinesByType,IfcRelContainedInSpatialStructure,IfcSpatialElement,IfcSpatialStructureElement,IfcSpatialZone,IfcSite,IfcBuilding,IfcBuildingStorey,IfcSpace,IfcFacility,IfcFacilityPart,IfcFacilityPartCommon,IfcBridge,IfcBridgePart,IfcRoad,IfcRailway,IfcMarineFacility,IfcPropertySet,IfcElementQuantity,IfcPropertySingleValue,IfcUnitAssignment,IfcSIUnit,IfcLocalPlacement, the type pagesIfcGloballyUniqueId,IfcTimeStamp,IfcStateEnum,IfcChangeActionEnum,IfcElementCompositionEnum,IfcSpaceTypeEnum,IfcFacilityUsageEnum,IfcFacilityPartCommonTypeEnum,IfcBridgeTypeEnum,IfcBridgePartTypeEnum,IfcRoadTypeEnum,IfcRoadPartTypeEnum,IfcRailwayTypeEnum,IfcRailwayPartTypeEnum,IfcMarineFacilityTypeEnum,IfcMarinePartTypeEnum,IfcSpatialZoneTypeEnum,IfcExternalSpatialElementTypeEnum,IfcSIPrefix, and the concept templatesProject ContextandProject Units;content/introduction.md(naming of property and quantity sets, deprecations) - ifc-gherkin-rules – buildingSMART’s rule IFC102 (deprecated attributes such as
RelatedObjectsType)