An IfcProduct has two attributes for geometry: ObjectPlacement,
which sets up the product’s own coordinate system, and Representation,
which holds one or more shapes drawn in that coordinate system. Each shape belongs to
a representation context declared on the project. This page covers that framework in
IFC 4.3: placements, the axis placements, points and directions they use,
representation contexts, shape representations with their identifiers and types,
mapped (block) representations and georeferencing. The geometric items themselves
(curves, surfaces, solids, tessellations) are only named here. All entities on this
page are resource entities without a GlobalId, so attribute positions (#) start at 1;
“opt.” marks an OPTIONAL attribute.
- Object placement and axis placements
- Representation contexts
- Shape representations: identifiers and types
- Mapped representations
- Georeferencing
- Geometric representation items
- Worked example
Object placement
IfcObjectPlacement is the abstract supertype of the ways an object
coordinate system is given: absolute or relative by an axis placement, by reference
to a design grid, or by distance along a curve. Whatever the kind, the result is a 2D
or 3D axis placement. The placement must be given when a product has a shape
representation, and one placement instance may be shared by several products without
that sharing meaning anything.
| Entity | # | Attribute | Type | Meaning |
|---|---|---|---|---|
IfcObjectPlacement | 1 | PlacementRelTo | IfcObjectPlacement, opt. | The placement this one is relative to. When unset, a local placement is relative to the world coordinate system of the representation context; a linear placement to the start of the referenced alignment axis. Moved up from IfcGridPlacement in 4.3 |
IfcLocalPlacement | 2 | RelativePlacement | IfcAxis2Placement | 2D or 3D placement giving the transformation into the relating coordinate system. Rule WR21: a 3D local placement may only be relative to a 3D parent |
IfcLinearPlacement | 2 | RelativePlacement | IfcAxis2PlacementLinear | Location and orientation along a curve; 3D even for a 2D curve |
| 3 | CartesianPosition | IfcAxis2Placement3D, opt. | Fallback for software that cannot evaluate linear placement | |
IfcGridPlacement | 2 | PlacementLocation | IfcVirtualGridIntersection | Origin at an intersection of two grid axes, with optional offsets |
| 3 | PlacementRefDirection | IfcGridPlacementDirectionSelect, opt. | X axis: when unset, the tangent of the first grid axis; or an explicit IfcDirection; or the direction towards a second grid intersection |
Conventions for relative placement, from IfcLocalPlacement:
IfcSiteis placed absolutely in the world coordinate system of the project’s representation context.IfcFacility(building, bridge, road and so on) is placed relative to the site, andIfcFacilityPartrelative to its facility.IfcGridandIfcAnnotationare placed relative to their container (site, building or storey), andIfcAlignmentrelative to the project’s world coordinate system.IfcPortis placed relative to the element it belongs to.- An
IfcElementis placed relative to its spatial container (the one named byIfcRelContainedInSpatialStructure), or to the element it is tied to: the host of an opening or projection, the opening a door or window fills, the element a covering covers, or the whole it is aggregated or nested into.
Applications must prevent cycles of relative placements themselves.
Axis placements, points and directions
All placements define right-handed Cartesian coordinate systems and do not allow
mirroring; mirroring and scaling are done with Cartesian transformation operators
(see mapped representations). IfcAxis2Placement is
a select that accepts either a 2D or a 3D axis placement.
| Entity | # | Attribute | Type | Meaning |
|---|---|---|---|---|
IfcPlacement | 1 | Location | IfcPoint | Origin of the placement. Derived: Dim, the dimension of the location |
IfcAxis1Placement | 2 | Axis | IfcDirection, opt. | Direction of the axis. Derived: Z |
IfcAxis2Placement2D | 2 | RefDirection | IfcDirection, opt. | Local X axis; [1, 0] when unset. Y is derived. Derived: P, the two axis directions |
IfcAxis2Placement3D | 2 | Axis | IfcDirection, opt. | Exact direction of the local Z axis |
| 3 | RefDirection | IfcDirection, opt. | Determines the local X axis, adjusted if needed to be orthogonal to Axis. When both are unset the axes are [1,0,0], [0,1,0], [0,0,1]. Derived: P, the three normalised axes | |
IfcAxis2PlacementLinear | 2 | Axis | IfcDirection, opt. | Local Z axis, relative to the curve |
| 3 | RefDirection | IfcDirection, opt. | Local X axis; when unset, the curve tangent at the location. Rule WR1: Location must be an IfcPointByDistanceExpression; WR2: the two directions may not be parallel | |
IfcCartesianPoint | 1 | Coordinates | LIST [1:3] OF IfcLengthMeasure | X, Y and Z. Rule CP2Dor3D: only 2D and 3D points are allowed |
IfcDirection | 1 | DirectionRatios | LIST [2:3] OF IfcReal | X, Y (and Z) components, not necessarily normalised; magnitude must be greater than zero. Derived: Dim |
The derived attributes are computed, not stored; how a derived attribute appears in a file is ISO 10303-21 syntax (see the STEP page).
Representation contexts
The project’s RepresentationContexts declare the coordinate space every
shape is in. One IfcGeometricRepresentationContext for the 3D model is
mandatory; a second for 2D plan views is optional, and needed when there are
scale-dependent plan views. There is at most one context for 2D and one for 3D.
Finer, scale- or view-dependent contexts are sub-contexts of one of them. The
project concept template names them Model_3D, for all 3D geometry,
and Plan_2D, for 2D annotations.
| Entity | # | Attribute | Type | Meaning |
|---|---|---|---|---|
IfcRepresentationContext | 1 | ContextIdentifier | IfcLabel, opt. | Identifier of the context in the project |
| 2 | ContextType | IfcLabel, opt. | For a geometric context one of 'Model', 'Plan' or 'NotDefined' | |
IfcGeometricRepresentationContext | 3 | CoordinateSpaceDimension | IfcDimensionCount (INTEGER) | 2 or 3 |
| 4 | Precision | IfcReal, opt. | Tolerance under which two points are the same, typically 1E-5 to 1E-8 | |
| 5 | WorldCoordinateSystem | IfcAxis2Placement | The project’s engineering coordinate system; usually the origin with the standard axes, but may offset a site far from the origin | |
| 6 | TrueNorth | IfcDirection, opt. | Geographic north as a 2D direction in the XY plane; [0, 1] when unset. Only informative when a map conversion is given (rule North2D: must be 2D) |
IfcGeometricRepresentationSubContext shares its parent’s world
coordinate system, dimension, precision and true north: it redeclares those four
inherited attributes (positions 3 to 6) as derived from the parent. Its own
attributes:
| # | Attribute | Type | Meaning |
|---|---|---|---|
| 7 | ParentContext | IfcGeometricRepresentationContext | The main context; may not itself be a sub-context (rule ParentNoSub) |
| 8 | TargetScale | IfcPositiveRatioMeasure, opt. | Target plot scale, 1:100 written as 0.01; applies down to the next smaller scale given for the same view |
| 9 | TargetView | IfcGeometricProjectionEnum | Target view |
| 10 | UserDefinedTargetView | IfcLabel, opt. | Required when TargetView is USERDEFINED (rule UserTargetProvided) |
The sub-context’s ContextIdentifier takes the same values as the
representation identifiers below. Only the main context may have a coordinate
operation (rule NoCoordOperation).
IfcGeometricProjectionEnum
| Value | Meaning |
|---|---|
| GRAPH_VIEW | Abstract, often 1D representation, such as a wall by its axis line |
| SKETCH_VIEW | Abstract, often 2D representation, such as a wall by its two footprint edges without inner layers |
| MODEL_VIEW | Full 3D representation, such as a wall by its volume |
| PLAN_VIEW | Full 2D representation in ground view seen from above, detail depending on the target scale |
| REFLECTED_PLAN_VIEW | The same seen from below |
| SECTION_VIEW | Full 2D representation where the element is cut by a section line |
| ELEVATION_VIEW | Full 2D representation of the element in an elevation |
| USERDEFINED | Given by UserDefinedTargetView |
| NOTDEFINED | No specification given |
Shape representations
A product’s Representation is an IfcProductRepresentation,
for shapes the subtype IfcProductDefinitionShape, which may hold only
shape or topology representations (rule OnlyShapeModel). It lists one or more
IfcRepresentations, each a set of items in one context. Its subtypes are
IfcShapeModel (with IfcShapeRepresentation and
IfcTopologyRepresentation) and IfcStyleModel.
| Entity | # | Attribute | Type | Meaning |
|---|---|---|---|---|
IfcProductRepresentation | 1 | Name | IfcLabel, opt. | Name |
| 2 | Description | IfcText, opt. | Further meaning | |
| 3 | Representations | LIST [1:?] OF IfcRepresentation | The representations, each of one type in one context | |
IfcRepresentation | 1 | ContextOfItems | IfcRepresentationContext | The context; for a shape representation a geometric context (rule CorrectContext) |
| 2 | RepresentationIdentifier | IfcLabel, opt. | What the representation shows (table below) | |
| 3 | RepresentationType | IfcLabel, opt. | The kind of geometry used (table below) | |
| 4 | Items | SET [1:?] OF IfcRepresentationItem | The geometric items |
IfcProductDefinitionShape and IfcShapeRepresentation add
no attributes. Rules on IfcShapeRepresentation: an identifier and a
type should be given; no topological item may be used directly except
IfcVertexPoint, IfcEdgeCurve and
IfcFaceSurface; and the items must suit the type (CorrectItemsForType).
Most building elements have a 'Body' representation, typically
'Tessellation' or 'Brep'.
Representation identifiers
| Identifier | Meaning |
|---|---|
CoG | Point at the centre of gravity, for example for validation |
Box | Bounding box as a simplified 3D box |
Annotation | 2D or 3D annotations |
Axis | 2D or 3D axis, or single-line, representation |
FootPrint | 2D footprint, or double-line, representation projected to ground view |
Profile | 3D line representation of a planar profile, such as door and window outlines |
Surface | 3D analytical surface of an element plane |
Reference | 3D representation not part of the body, for example opening geometry excluded from an implicit Boolean operation |
Body | 3D body as wireframe, surface or solid model |
Body-FallBack | 3D body as tessellation, surface or boundary representation, given in addition to the solid model |
Clearance | 3D clearance volume that other elements’ bodies should not intersect |
Lighting | Emitted light, as a light source |
Representation types
| Type | Items |
|---|---|
Point | 2D or 3D points, possibly as a point list |
PointCloud | 3D points as a point list; deprecated in 4.3.2.0, use Point |
Curve | 2D or 3D curves |
Curve2D | 2D curves |
Curve3D | 3D curves |
Segment | Partial geometry of curves, not rendered separately from the main curve |
Surface | 2D or 3D surfaces |
Surface2D | 2D surfaces (a region in ground view) |
Surface3D | 3D surfaces |
SectionedSurface | Surfaces swept from open profiles along a directrix |
FillArea | 2D filled (hatched) regions |
Text | Text literals |
AdvancedSurface | 3D B-spline surfaces |
Annotation2D | Points, curves, hatches and 2D text |
GeometricSet | Points, curves and surfaces |
GeometricCurveSet | Points and curves |
Tessellation | Tessellated surfaces only |
SurfaceOrSolidModel | Tessellated, shell-based or face-based surface models, or solid models |
SurfaceModel | Face-based, shell-based or tessellated surface models |
SolidModel | Solids, including swept solids, Boolean results and Breps |
SweptSolid | Extruded and revolved area solids, without tapering |
AdvancedSweptSolid | Area solids swept along a directrix, and tapered sweeps |
CSG | Boolean results between solids, half spaces and Boolean results |
Clipping | Boolean differences between swept area solids, half spaces and Boolean results |
Brep | Faceted Breps with and without voids |
AdvancedBrep | Breps of advanced faces with B-spline surfaces, with and without voids |
BoundingBox | A bounding box |
SectionedSpine | A spine curve with planar cross sections; interpolation between them is not defined |
LightSource | Light source with position, orientation, colour, intensity and attenuation as its type requires |
MappedRepresentation | Mapped items referring to a representation map, like an inserted block |
Mapped representations
A shape shared by many products (a block, cell or macro) is defined once as an
IfcRepresentationMap, usually listed in a type’s
RepresentationMaps, and inserted with an IfcMappedItem in a
representation of type 'MappedRepresentation'. Several maps on one type
make a multi-view block.
| Entity | # | Attribute | Type | Meaning |
|---|---|---|---|---|
IfcRepresentationMap | 1 | MappingOrigin | IfcAxis2Placement | Coordinate system the mapped representation is defined in |
| 2 | MappedRepresentation | IfcRepresentation | The shared representation | |
IfcMappedItem | 1 | MappingSource | IfcRepresentationMap | The block definition |
| 2 | MappingTarget | IfcCartesianTransformationOperator | Where and how it is inserted | |
IfcCartesianTransformationOperator | 1 | Axis1 | IfcDirection, opt. | Transformed X axis |
| 2 | Axis2 | IfcDirection, opt. | Transformed Y axis | |
| 3 | LocalOrigin | IfcCartesianPoint | Transformed origin | |
| 4 | Scale | IfcReal, opt. | Scale factor. Derived: Scl and Dim | |
IfcCartesianTransformationOperator3D | 5 | Axis3 | IfcDirection, opt. | Transformed Z axis. Derived: U |
IfcCartesianTransformationOperator3DnonUniform | 6 | Scale2 | IfcReal, opt. | Y scale. Derived: Scl2 |
| 7 | Scale3 | IfcReal, opt. | Z scale. Derived: Scl3 |
The 2D operators IfcCartesianTransformationOperator2D and
IfcCartesianTransformationOperator2DnonUniform complete the family.
Georeferencing
A main geometric context can be tied to a map coordinate reference system by an
IfcCoordinateOperation whose source is the context; the context finds it
through its inverse attribute HasCoordinateOperation. All main contexts
of a project must use the same operation and target system. The subtypes of
IfcCoordinateOperation are IfcMapConversion (with
IfcMapConversionScaled) and IfcRigidOperation; those of
IfcCoordinateReferenceSystem are IfcProjectedCRS and
IfcGeographicCRS.
| Entity | # | Attribute | Type | Meaning |
|---|---|---|---|---|
IfcCoordinateOperation | 1 | SourceCRS | IfcCoordinateReferenceSystemSelect | Source system, such as the project’s geometric context |
| 2 | TargetCRS | IfcCoordinateReferenceSystem | Target map system | |
IfcMapConversion | 3 | Eastings | IfcLengthMeasure | Position along the map’s easting |
| 4 | Northings | IfcLengthMeasure | Position along the map’s northing | |
| 5 | OrthogonalHeight | IfcLengthMeasure | Height relative to the vertical datum | |
| 6 | XAxisAbscissa | IfcReal, opt. | Easting component of a vector along the local X axis | |
| 7 | XAxisOrdinate | IfcReal, opt. | Northing component of that vector; together they give the X axis direction on the map | |
| 8 | Scale | IfcReal, opt. | Scale from project units to map units; 1.0 when unset, and required when the units differ | |
IfcMapConversionScaled | 9 | FactorX | IfcReal | Conversion factors, used only when factors are exchanged explicitly |
| 10 | FactorY | IfcReal | ||
| 11 | FactorZ | IfcReal | ||
IfcCoordinateReferenceSystem | 1 | Name | IfcLabel, opt. | One EPSG code qualified by its namespace, such as 'EPSG:5555'; or 'WKT' when no code exists and an IfcWellKnownText defines the system |
| 2 | Description | IfcText, opt. | Informal description | |
| 3 | GeodeticDatum | IfcIdentifier, opt. | Datum, when the name does not fix it (for example EPSG:6326, WGS84) | |
IfcProjectedCRS | 4 | VerticalDatum | IfcIdentifier, opt. | Height datum, when the name does not fix it |
| 5 | MapProjection | IfcIdentifier, opt. | Projection, such as UTM or Gauss-Krueger | |
| 6 | MapZone | IfcIdentifier, opt. | Zone of that projection, such as 32 for UTM32 | |
| 7 | MapUnit | IfcNamedUnit, opt. | Length unit of the map axes; the project’s length unit when unset |
When a map conversion is present, TrueNorth is for information only
and must not be applied on top of the conversion; where they disagree, the map
conversion wins.
Geometric representation items
Shapes are made of IfcRepresentationItems. Its direct subtypes are
IfcGeometricRepresentationItem, IfcMappedItem,
IfcStyledItem and IfcTopologicalRepresentationItem. The
direct subtypes of IfcGeometricRepresentationItem in IFC 4.3:
IfcAnnotationFillArea, IfcBooleanResult,
IfcBoundingBox, IfcCartesianPointList,
IfcCartesianTransformationOperator, IfcCsgPrimitive3D,
IfcCurve, IfcDirection,
IfcFaceBasedSurfaceModel (deprecated), IfcFillAreaStyleHatching,
IfcFillAreaStyleTiles, IfcGeometricSet,
IfcHalfSpaceSolid, IfcLightSource,
IfcPlacement, IfcPlanarExtent, IfcPoint,
IfcSectionedSpine, IfcSegment,
IfcShellBasedSurfaceModel, IfcSolidModel,
IfcSurface, IfcTessellatedItem,
IfcTextLiteral and IfcVector. The
schemas page lists every entity of the geometry,
geometric model, topology and profile schemas.
Worked example
A wall 5 m long, 0.2 m thick and 3 m high, extruded from a rectangle, in a project
measured in metres. The wall’s placement is relative to its storey’s placement
#21; the identifiers and numbers are made up for the example.
#100=IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,1.E-05,#101,$);
#101=IFCAXIS2PLACEMENT3D(#102,$,$);
#102=IFCCARTESIANPOINT((0.,0.,0.));
#30=IFCWALL('1kTvXnbbzCWw8lcMd1dR4o',$,'Wall 1',$,$,#31,#40,$,.SOLIDWALL.);
#31=IFCLOCALPLACEMENT(#21,#32);
#32=IFCAXIS2PLACEMENT3D(#102,$,$);
#40=IFCPRODUCTDEFINITIONSHAPE($,$,(#41));
#41=IFCSHAPEREPRESENTATION(#100,'Body','SweptSolid',(#42));
#42=IFCEXTRUDEDAREASOLID(#43,#44,#45,3.);
#43=IFCRECTANGLEPROFILEDEF(.AREA.,$,$,5.,0.2);
#44=IFCAXIS2PLACEMENT3D(#46,$,$);
#45=IFCDIRECTION((0.,0.,1.));
#46=IFCCARTESIANPOINT((2.5,0.1,0.));
| Instance | Reading |
|---|---|
#100 | Main 3D context: no identifier, ContextType 'Model', dimension 3, precision 1E-5, world coordinate system #101 at the origin with default axes, no true north (so +Y is north) |
#31 | PlacementRelTo the storey’s placement #21, RelativePlacement #32: same origin and axes as the storey |
#40 | The product shape, with no name or description and one representation |
#41 | In context #100, identifier 'Body', type 'SweptSolid', one item |
#42 | IfcExtrudedAreaSolid: SweptArea #43, Position #44 at (2.5, 0.1, 0), ExtrudedDirection +Z, Depth 3 |
#43 | IfcRectangleProfileDef: ProfileType AREA, no name, no position of its own, 5 × 0.2. A parameterised profile is centred on its origin, so with the solid’s position the rectangle runs from (0, 0) to (5, 0.2) in the wall’s coordinate system |
The attributes used for the solid and profile: IfcSweptAreaSolid has
SweptArea (IfcProfileDef) and Position
(IfcAxis2Placement3D, opt.); IfcExtrudedAreaSolid adds
ExtrudedDirection (IfcDirection) and Depth
(IfcPositiveLengthMeasure). IfcProfileDef has
ProfileType (IfcProfileTypeEnum) and
ProfileName (IfcLabel, opt.);
IfcParameterizedProfileDef adds Position
(IfcAxis2Placement2D, opt.); IfcRectangleProfileDef adds
XDim and YDim (IfcPositiveLengthMeasure).
IfcProfileTypeEnum has two values: AREA, a surface that sweeps into a
solid with volume, and CURVE, a closed curve (open only for
IfcArbitraryOpenProfileDef) that sweeps into a surface, used for thin
sheets such as ducts. Every parameterised profile is defined with the centre of its
bounding box at the origin of its position. The documentation advises leaving the
profile’s own Position unset when the containing solid can place it, as
here.
Not confirmed
- The members of the selects
IfcCoordinateReferenceSystemSelectandIfcGridPlacementDirectionSelectbeyond what the documentation describes in prose. - The attributes of the curve, surface, solid, tessellation and topology entities; they are listed by name only.
Sources
- IFC4.3.x-development – buildingSMART’s IFC 4.3 source repository, master branch:
schemas/IFC.xml(attribute order, types, optionality, derived attributes, generalisations and enumeration values), the entity pagesIfcObjectPlacement,IfcLocalPlacement,IfcLinearPlacement,IfcGridPlacement,IfcPlacement,IfcAxis2Placement2D,IfcAxis2Placement3D,IfcAxis2PlacementLinear,IfcCartesianPoint,IfcDirection,IfcRepresentationContext,IfcGeometricRepresentationContext,IfcGeometricRepresentationSubContext,IfcProductRepresentation,IfcProductDefinitionShape,IfcRepresentation,IfcShapeRepresentation,IfcRepresentationMap,IfcMappedItem,IfcCoordinateOperation,IfcMapConversion,IfcMapConversionScaled,IfcCoordinateReferenceSystem,IfcProjectedCRS,IfcExtrudedAreaSolid,IfcParameterizedProfileDef,IfcRectangleProfileDef,IfcProduct,IfcProject, the type pagesIfcAxis2Placement,IfcGeometricProjectionEnum,IfcProfileTypeEnum, and the concept templatesProject Representation Context,Product PlacementandProduct Geometric Representation