SuperAPI AI Directory

ifc-syntax-geometry-swept-solid

Testing & quality

View repository

Updated 10-15 22:18

About this skill

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.