IFC Syntax : Swept Solid Geometry
IFC carries most building geometry parametrically : a 2D cross-section (a profile) is swept through 3D space to form a solid. This skill covers the swept-solid entities, their attributes, their WHERE rules, and how the result maps to a shape representation.
Applies to IFC2x3, IFC4, and IFC4.3. The directrix family was restructured across versions : see Version Differences.
Quick Reference
The swept-solid idea
A swept solid pairs a profile with a sweep operation. The profile is the
cross-section ; the sweep moves it. The profile entities (IfcProfileDef and its
subtypes) are covered by ifc-syntax-geometry-profiles ; this skill covers the
sweep.
A profile (IfcProfileDef, ProfileType = AREA)
+
A sweep operation (extrude / revolve / sweep along a curve)
=
A solid --> placed in an IfcShapeRepresentation, type SweptSolid or AdvancedSweptSolid
IfcSweptAreaSolid : the abstract supertype
Verified verbatim (IFC4.3) :
ENTITY IfcSweptAreaSolid
ABSTRACT SUPERTYPE OF (ONEOF
(IfcDirectrixCurveSweptAreaSolid
,IfcExtrudedAreaSolid
,IfcRevolvedAreaSolid))
SUBTYPE OF (IfcSolidModel);
SweptArea : IfcProfileDef;
Position : OPTIONAL IfcAxis2Placement3D;
WHERE
SweptAreaType : SweptArea.ProfileType = IfcProfileTypeEnum.Area;
END_ENTITY;
Supertype chain : IfcRepresentationItem to IfcGeometricRepresentationItem to
IfcSolidModel to IfcSweptAreaSolid.
SweptArea: the profile (the cross-section).Position: an OPTIONALIfcAxis2Placement3Dthat repositions the solid.SweptAreaTyperule : the profile MUST haveProfileType = AREA.
ALWAYS give an IfcSweptAreaSolid a profile whose ProfileType is AREA. NEVER
sweep a CURVE-type profile into a solid : a CURVE profile sweeps a surface, not a
solid, and SweptAreaType rejects it.
IfcExtrudedAreaSolid : the workhorse
The most common solid in any IFC model : walls, slabs, beams, columns, footings. Verified verbatim (IFC4.3) :
ENTITY IfcExtrudedAreaSolid
SUPERTYPE OF (ONEOF
(IfcExtrudedAreaSolidTapered))
SUBTYPE OF (IfcSweptAreaSolid);
ExtrudedDirection : IfcDirection;
Depth : IfcPositiveLengthMeasure;
WHERE
ValidExtrusionDirection : IfcDotProduct(IfcRepresentationItem() ||
IfcGeometricRepresentationItem() || IfcDirection([0.0,0.0,1.0]),
SELF.ExtrudedDirection) <> 0.0;
END_ENTITY;
ExtrudedDirection: the direction the profile is moved.Depth: the distance moved.ValidExtrusionDirection: the dot product ofExtrudedDirectionwith the local Z axis[0,0,1]must be non-zero, that isExtrudedDirectionis NOT perpendicular to local Z.
ALWAYS keep a non-zero Z component in ExtrudedDirection ; the standard value is
(0.,0.,1.). NEVER set ExtrudedDirection perpendicular to local Z : the extrusion
would have zero projected height and ValidExtrusionDirection rejects it.
IfcRevolvedAreaSolid : revolving a profile
Verified verbatim (IFC4.3) :
ENTITY IfcRevolvedAreaSolid
SUPERTYPE OF (ONEOF
(IfcRevolvedAreaSolidTapered))
SUBTYPE OF (IfcSweptAreaSolid);
Axis : IfcAxis1Placement;
Angle : IfcPlaneAngleMeasure;
DERIVE
AxisLine : IfcLine := ... ;
WHERE
AxisDirectionInXY : Axis.Z.DirectionRatios[3] = 0.0;
AxisStartInXY : ('IFC4X3_DEV.IFCCARTESIANPOINT' IN TYPEOF(Axis.Location))
AND (Axis.Location\IfcCartesianPoint.Coordinates[3] = 0.0);
END_ENTITY;
Axis: the axis the profile is revolved around.Angle: the revolution angle.AxisLine: DERIVED, never serialized.AxisDirectionInXY: the axis direction has zero Z ratio.AxisStartInXY: the axis start point has zero Z coordinate.
ALWAYS keep the revolution Axis entirely in the profile's XY plane : both its
direction and its start point must have a zero Z component. Used for arches, circular
footings, dome-like elements.
The directrix family : sweeping along a curve
A profile can be swept along a 3D curve (a directrix). In IFC4.3 the two directrix-driven sweeps share an abstract supertype. Verified verbatim (IFC4.3) :
ENTITY IfcDirectrixCurveSweptAreaSolid
ABSTRACT SUPERTYPE OF (ONEOF
(IfcFixedReferenceSweptAreaSolid
,IfcSurfaceCurveSweptAreaSolid))
SUBTYPE OF (IfcSweptAreaSolid);
Directrix : IfcCurve;
StartParam : OPTIONAL IfcCurveMeasureSelect;
EndParam : OPTIONAL IfcCurveMeasureSelect;
WHERE
DirectrixBounded : (EXISTS(StartParam) AND EXISTS(EndParam)) OR
(SIZEOF(['IFC4X3_DEV.IFCCONIC', 'IFC4X3_DEV.IFCBOUNDEDCURVE'] * TYPEOF(Directrix)) = 1);
END_ENTITY;
IfcSurfaceCurveSweptAreaSolidaddsReferenceSurface(IfcSurface) : the directrix lies on this surface, which orients the profile. Used for curved walls following terrain, road and bridge geometry.IfcFixedReferenceSweptAreaSolidaddsFixedReference(IfcDirection) : a constant direction that orients the profile so it does not twist with the curve. Used for curved beams, handrails, ducts.
DirectrixBounded : if StartParam or EndParam is omitted, the Directrix must
be a bounded or conic curve.
IfcDirectrixCurveSweptAreaSolid is NEW IN IFC4.3 : see Version Differences.
IfcSweptDiskSolid : pipes and rebar
IfcSweptDiskSolid is NOT an IfcSweptAreaSolid : it is a separate subtype of
IfcSolidModel. It sweeps a circular disk, not a profile, along a 3D directrix.
Verified verbatim (IFC4.3) :
ENTITY IfcSweptDiskSolid
SUPERTYPE OF (ONEOF
(IfcSweptDiskSolidPolygonal))
SUBTYPE OF (IfcSolidModel);
Directrix : IfcCurve;
Radius : IfcPositiveLengthMeasure;
InnerRadius : OPTIONAL IfcPositiveLengthMeasure;
StartParam : OPTIONAL IfcParameterValue;
EndParam : OPTIONAL IfcParameterValue;
WHERE
DirectrixBounded : (EXISTS(StartParam) AND EXISTS(EndParam)) OR
(SIZEOF(['IFC4X3_DEV.IFCCONIC', 'IFC4X3_DEV.IFCBOUNDEDCURVE'] * TYPEOF(Directrix)) = 1);
DirectrixDim : Directrix.Dim = 3;
InnerRadiusSize : (NOT EXISTS(InnerRadius)) OR (Radius > InnerRadius);
END_ENTITY;
Radius: the outer radius of the disk.InnerRadius: present makes a hollow tube.DirectrixDim: the directrix MUST be 3-dimensional.InnerRadiusSize:RadiusMUST be strictly greater thanInnerRadius.
ALWAYS use IfcSweptDiskSolid for pipes, ducts, and reinforcing bars. ALWAYS give
its Directrix a 3D curve.
Mapping to RepresentationType
A swept solid sits in an IfcShapeRepresentation whose RepresentationType is one
of two labels :
SweptSolid: theItemsareIfcExtrudedAreaSolidand / orIfcRevolvedAreaSolidinstances. The standard label for walls, slabs, beams.AdvancedSweptSolid: theItemsareIfcSurfaceCurveSweptAreaSolid,IfcFixedReferenceSweptAreaSolid,IfcExtrudedAreaSolidTapered,IfcRevolvedAreaSolidTapered, orIfcSweptDiskSolid. Introduced with IFC4.
ALWAYS label a tapered or directrix-driven sweep AdvancedSweptSolid, never
SweptSolid. See ifc-syntax-geometry-representations.
Version Differences
| Item | IFC2x3 | IFC4 | IFC4.3 |
|---|---|---|---|
IfcSweptAreaSolid.Position |
mandatory | OPTIONAL | OPTIONAL |
IfcSweptAreaSolid WHERE rule |
WR22 |
SweptAreaType |
SweptAreaType |
IfcExtrudedAreaSolidTapered, IfcRevolvedAreaSolidTapered |
absent | present | present |
IfcFixedReferenceSweptAreaSolid |
absent | present | present |
IfcDirectrixCurveSweptAreaSolid (abstract supertype) |
absent | absent | present (refactor) |
IfcSurfaceCurveSweptAreaSolid parent |
IfcSweptAreaSolid |
IfcSweptAreaSolid |
IfcDirectrixCurveSweptAreaSolid |
IfcSweptDiskSolid.StartParam / EndParam |
mandatory | OPTIONAL | OPTIONAL |
AdvancedSweptSolid representation type |
absent | present | present |
ALWAYS give IfcSweptAreaSolid.Position a value in an IFC2x3 file : it is mandatory
there, OPTIONAL only from IFC4. The IFC4.3 IfcDirectrixCurveSweptAreaSolid refactor
moved Directrix / StartParam / EndParam into a shared supertype ; the attribute
set a reader sees is unchanged.
Decision Trees
Which swept-solid entity?
How is the solid formed?
|
+-- Move a profile in a straight line --> IfcExtrudedAreaSolid
| The profile changes along the way (taper)? --> IfcExtrudedAreaSolidTapered
|
+-- Rotate a profile around an axis --> IfcRevolvedAreaSolid
| The profile changes along the way? --> IfcRevolvedAreaSolidTapered
|
+-- Move a profile along a 3D curve
| +-- The curve lies on a reference surface --> IfcSurfaceCurveSweptAreaSolid
| +-- The profile keeps a fixed up-direction --> IfcFixedReferenceSweptAreaSolid
|
+-- Sweep a circular disk along a 3D curve (pipe, duct, rebar)
--> IfcSweptDiskSolid (NOT an IfcSweptAreaSolid)
SweptSolid or AdvancedSweptSolid?
What entities are in the IfcShapeRepresentation Items?
|
+-- Only IfcExtrudedAreaSolid and / or IfcRevolvedAreaSolid
| --> RepresentationType = 'SweptSolid'
|
+-- Any tapered, directrix-driven, or swept-disk solid
--> RepresentationType = 'AdvancedSweptSolid'
Does the directrix need start and end parameters?
Is the Directrix a bounded or conic curve (IfcPolyline, IfcTrimmedCurve, IfcCircle)?
|
+-- YES --> StartParam / EndParam are optional ; DirectrixBounded is satisfied.
|
+-- NO, the directrix is unbounded (a plain IfcLine)
--> StartParam AND EndParam are BOTH required, or DirectrixBounded fails.
Patterns
Pattern : Extrude a profile into a solid
ALWAYS model a wall, slab, beam, or column as an IfcExtrudedAreaSolid : set
SweptArea to an AREA-type profile, ExtrudedDirection to the sweep direction
(standard (0.,0.,1.)), and Depth to the distance.
ALWAYS keep a non-zero Z component in ExtrudedDirection : the
ValidExtrusionDirection rule rejects a direction perpendicular to local Z.
NEVER feed a CURVE-type profile : the SweptAreaType rule requires AREA.
See ifc-syntax-geometry-profiles for the profile entities.
Pattern : Revolve a profile
ALWAYS model an arch or a circular footing as an IfcRevolvedAreaSolid : set
SweptArea to an AREA profile, Axis to an IfcAxis1Placement, and Angle to
the revolution angle.
ALWAYS keep the Axis direction and start point in the profile's XY plane : both
AxisDirectionInXY and AxisStartInXY require a zero Z component.
Pattern : Sweep a profile along a curve
ALWAYS use IfcSurfaceCurveSweptAreaSolid when the sweep follows a curve lying on a
surface (a wall following terrain) : set ReferenceSurface to that surface.
ALWAYS use IfcFixedReferenceSweptAreaSolid when the profile must keep a constant
up-direction along the sweep (a curved handrail) : set FixedReference to that
direction.
ALWAYS supply StartParam and EndParam when the Directrix is an unbounded curve :
DirectrixBounded requires it.
Pattern : Model a pipe or rebar with IfcSweptDiskSolid
ALWAYS model a pipe, duct, or reinforcing bar as an IfcSweptDiskSolid : set
Directrix to the 3D centre-line curve and Radius to the outer radius.
ALWAYS set InnerRadius for a hollow tube, and keep Radius > InnerRadius :
InnerRadiusSize rejects an inner radius equal to or larger than the outer.
ALWAYS give the Directrix a 3-dimensional curve : DirectrixDim requires
Directrix.Dim = 3.
Pattern : Label the representation correctly
ALWAYS set RepresentationType to SweptSolid when the Items are only
IfcExtrudedAreaSolid and IfcRevolvedAreaSolid.
ALWAYS set RepresentationType to AdvancedSweptSolid when the Items include a
tapered solid, a directrix-driven solid, or an IfcSweptDiskSolid.
NEVER label an advanced sweep SweptSolid : an MVD-conformant consumer rejects the
mismatched type. See ifc-syntax-geometry-representations.
Pattern : Honour the version differences
ALWAYS give IfcSweptAreaSolid.Position a value in an IFC2x3 file : the attribute is
mandatory in IFC2x3 and OPTIONAL only from IFC4.
ALWAYS supply StartParam and EndParam on an IfcSweptDiskSolid in an IFC2x3
file : they are mandatory in IFC2x3 and OPTIONAL from IFC4.
NEVER use IfcExtrudedAreaSolidTapered, IfcRevolvedAreaSolidTapered, or
IfcFixedReferenceSweptAreaSolid in an IFC2x3 file : they were added in IFC4.
Reference Links
references/methods.md: the verified EXPRESS definitions of every swept-solid entity, the complete WHERE-rule table, the supertype chains, and the per-version difference detail.references/examples.md: worked STEP scenarios : an extruded wall, a revolved arch, a swept-disk pipe, a tapered extrusion, and the shape-representation wrapping.references/anti-patterns.md: the failure modes this skill prevents, each with the WHERE rule it breaks and the reason it fails.
Official sources
- IfcSweptAreaSolid : https://ifc43-docs.standards.buildingsmart.org/IFC/RELEASE/IFC4x3/HTML/lexical/IfcSweptAreaSolid.htm
- IfcExtrudedAreaSolid : https://ifc43-docs.standards.buildingsmart.org/IFC/RELEASE/IFC4x3/HTML/lexical/IfcExtrudedAreaSolid.htm
- IfcRevolvedAreaSolid : https://ifc43-docs.standards.buildingsmart.org/IFC/RELEASE/IFC4x3/HTML/lexical/IfcRevolvedAreaSolid.htm
- IfcDirectrixCurveSweptAreaSolid : https://ifc43-docs.standards.buildingsmart.org/IFC/RELEASE/IFC4x3/HTML/lexical/IfcDirectrixCurveSweptAreaSolid.htm
- IfcSurfaceCurveSweptAreaSolid : https://ifc43-docs.standards.buildingsmart.org/IFC/RELEASE/IFC4x3/HTML/lexical/IfcSurfaceCurveSweptAreaSolid.htm
- IfcFixedReferenceSweptAreaSolid : https://ifc43-docs.standards.buildingsmart.org/IFC/RELEASE/IFC4x3/HTML/lexical/IfcFixedReferenceSweptAreaSolid.htm
- IfcSweptDiskSolid : https://ifc43-docs.standards.buildingsmart.org/IFC/RELEASE/IFC4x3/HTML/lexical/IfcSweptDiskSolid.htm
Related skills
ifc-syntax-geometry-profiles: theIfcProfileDefcross-section entities a swept solid sweeps.ifc-syntax-geometry-representations:IfcShapeRepresentationand theRepresentationTypevaluesSweptSolidandAdvancedSweptSolid.ifc-syntax-geometry-placement:IfcAxis2Placement3D, used forPosition.ifc-syntax-geometry-brep: explicit boundary-representation geometry, the alternative to a parametric sweep.