| name | ifc-syntax-geometry-swept-solid |
| description | 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 / IFC4.3 version differences. Keywords: IFC swept solid, IfcExtrudedAreaSolid, IfcSweptAreaSolid, IfcRevolvedAreaSolid, IfcSweptDiskSolid, IfcSurfaceCurveSweptAreaSolid, IfcFixedReferenceSweptAreaSolid, IfcDirectrixCurveSweptAreaSolid, ExtrudedDirection, SweptArea, Directrix, extrude a profile, revolve a profile, sweep along a curve, pipe geometry, rebar geometry, SweptSolid, AdvancedSweptSolid, ValidExtrusionDirection, how do I model a wall solid, wall has no geometry, solid is flat, extrusion failed, IFC2x3, IFC4, IFC4.3.
|
| license | MIT |
| compatibility | Designed for Claude Code. Requires IFC IFC2x3, IFC4, IFC4.3. |
| metadata | {"author":"OpenAEC-Foundation","version":"1.0"} |
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
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.