# Ifc Syntax Geometry Swept Solid

> Use when you need to build, read, or debug parametric solid geometry in an IFC model : extruding a profile into a wall or slab, revolving a profile into an arch, sweeping a profile along a curve, or modelling a pipe or rebar as a swept disk, and when deciding the RepresentationType label for the shape. Prevents feeding a CURVE-type (open) profile into a solid sweep, an extrusion direction perpendicular to Z, a revolution axis outside the XY plane, an unbounded directrix with no parameters, an InnerRadius larger than the Radius, and mislabelling an advanced sweep as plain SweptSolid. Covers IfcSweptAreaSolid, IfcExtrudedAreaSolid, IfcRevolvedAreaSolid, IfcExtrudedAreaSolidTapered, IfcRevolvedAreaSolidTapered, IfcDirectrixCurveSweptAreaSolid, IfcSurfaceCurveSweptAreaSolid, IfcFixedReferenceSweptAreaSolid, IfcSweptDiskSolid, the SweptArea / Position / ExtrudedDirection / Depth / Axis / Angle / Directrix / Radius attributes, the WHERE rules, the SweptSolid versus AdvancedSweptSolid mapping, and IFC2x3 / IFC4 / IF

- Skill: `impertio-studio/ifc-syntax-geometry-swept-solid` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add impertio-studio/ifc-syntax-geometry-swept-solid`
- Raw SKILL.md: https://api.skillmd.com/api/skills/impertio-studio/ifc-syntax-geometry-swept-solid/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- License: MIT
- Author: Impertio-Studio (https://skillmd.com/u/impertio-studio)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/impertio-studio/ifc-syntax-geometry-swept-solid

---


# 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 OPTIONAL `IfcAxis2Placement3D` that repositions the solid.
- `SweptAreaType` rule : the profile MUST have `ProfileType = 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 of `ExtrudedDirection` with the local
  Z axis `[0,0,1]` must be non-zero, that is `ExtrudedDirection` is 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;
```

- `IfcSurfaceCurveSweptAreaSolid` adds `ReferenceSurface` (`IfcSurface`) : the
  directrix lies on this surface, which orients the profile. Used for curved walls
  following terrain, road and bridge geometry.
- `IfcFixedReferenceSweptAreaSolid` adds `FixedReference` (`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` : `Radius` MUST be strictly greater than `InnerRadius`.

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` : the `Items` are `IfcExtrudedAreaSolid` and / or
  `IfcRevolvedAreaSolid` instances. The standard label for walls, slabs, beams.
- `AdvancedSweptSolid` : the `Items` are `IfcSurfaceCurveSweptAreaSolid`,
  `IfcFixedReferenceSweptAreaSolid`, `IfcExtrudedAreaSolidTapered`,
  `IfcRevolvedAreaSolidTapered`, or `IfcSweptDiskSolid`. 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` : the `IfcProfileDef` cross-section entities a
  swept solid sweeps.
- `ifc-syntax-geometry-representations` : `IfcShapeRepresentation` and the
  `RepresentationType` values `SweptSolid` and `AdvancedSweptSolid`.
- `ifc-syntax-geometry-placement` : `IfcAxis2Placement3D`, used for `Position`.
- `ifc-syntax-geometry-brep` : explicit boundary-representation geometry, the
  alternative to a parametric sweep.

