| name | ifc-syntax-geometry-profiles |
| description | Use when you need to define, choose, or debug a 2D cross-section profile in an IFC model : a rectangle or circle profile, a standard steel section (I, L, U, T, C, Z), a hollow section, an arbitrary free-form outline, a profile with holes, or a composite or derived profile. Prevents feeding a CURVE-type or open profile into a solid sweep, using an IfcLine as a profile boundary, declaring a hollow wall thicker than its radius, nesting a composite profile inside another composite, and mixing AREA and CURVE profiles in one composite. Covers IfcProfileDef and IfcProfileTypeEnum, IfcParameterizedProfileDef and the eleven concrete parameterized profiles, IfcArbitraryClosedProfileDef, IfcArbitraryOpenProfileDef, IfcArbitraryProfileDefWithVoids, IfcCompositeProfileDef, IfcDerivedProfileDef, and the IFC2x3 / IFC4 / IFC4.3 version differences. Keywords: IFC profile, IfcProfileDef, IfcProfileTypeEnum, AREA, CURVE, IfcParameterizedProfileDef, IfcRectangleProfileDef, IfcCircleProfileDef, IfcIShapeProfileDef, IfcLShapeProfileDef, IfcUShapeProfileDef, IfcTShapeProfileDef, IfcCShapeProfileDef, IfcZShapeProfileDef, IfcEllipseProfileDef, IfcRectangleHollowProfileDef, IfcCircleHollowProfileDef, IfcArbitraryClosedProfileDef, IfcArbitraryOpenProfileDef, IfcArbitraryProfileDefWithVoids, IfcCompositeProfileDef, IfcDerivedProfileDef, cross-section, steel section, hollow section, profile with a hole, how do I model a beam section, my extrusion fails, profile is not closed, swept area, 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 : Geometry Profiles
A profile is the 2D cross-section that an IFC swept solid moves through space to
produce a 3D shape. Walls, slabs, beams, columns, footings, and pipes are nearly all
modelled as a profile plus a sweep. This skill covers the profile entities, the
required-versus-optional attributes, the WHERE rules they must satisfy, and the
IFC2x3 / IFC4 / IFC4.3 version differences.
Applies to IFC2x3, IFC4, and IFC4.3. A few attributes and subtypes changed across
versions : see the Version Differences section.
A profile carries the shape only; the sweep that turns it into a solid is covered by
ifc-syntax-geometry-swept-solid.
Quick Reference
IfcProfileDef : the supertype
IfcProfileDef is the abstract supertype of every profile. Verified verbatim
(IFC4.3) :
ENTITY IfcProfileDef
SUPERTYPE OF (ONEOF
(IfcArbitraryClosedProfileDef
,IfcArbitraryOpenProfileDef
,IfcCompositeProfileDef
,IfcDerivedProfileDef
,IfcOpenCrossProfileDef
,IfcParameterizedProfileDef));
ProfileType : IfcProfileTypeEnum;
ProfileName : OPTIONAL IfcLabel;
INVERSE
HasExternalReference : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;
HasProperties : SET [0:?] OF IfcProfileProperties FOR ProfileDefinition;
END_ENTITY;
ProfileType is required and is an IfcProfileTypeEnum value : AREA (the
profile encloses a region and can be swept into a solid) or CURVE (the profile
is a 1D outline, swept only into a surface).
ProfileName is an optional human-readable designation (e.g. 'HEA200').
HasProperties (inverse) links the profile to IfcProfileProperties carrying
structural section properties.
ALWAYS set ProfileType = AREA for a profile that feeds a solid sweep. NEVER feed a
CURVE-type profile into an IfcSweptAreaSolid : the SweptAreaType WHERE rule
rejects it.
IfcOpenCrossProfileDef is an IFC4.3 addition and is out of scope for this skill.
IfcParameterizedProfileDef : standard sections
IfcParameterizedProfileDef is abstract. It adds one attribute and is the supertype
of the eleven standard sections. Verified verbatim (IFC4.3) :
ENTITY IfcParameterizedProfileDef
ABSTRACT SUPERTYPE OF (ONEOF
(IfcAsymmetricIShapeProfileDef
,IfcCShapeProfileDef
,IfcCircleProfileDef
,IfcEllipseProfileDef
,IfcIShapeProfileDef
,IfcLShapeProfileDef
,IfcRectangleProfileDef
,IfcTShapeProfileDef
,IfcTrapeziumProfileDef
,IfcUShapeProfileDef
,IfcZShapeProfileDef))
SUBTYPE OF (IfcProfileDef);
Position : OPTIONAL IfcAxis2Placement2D;
END_ENTITY;
Position is the 2D placement coordinate system in which the named parameters are
interpreted. In IFC4 and IFC4.3 it is OPTIONAL; in IFC2x3 it is required.
See Version Differences.
The concrete parameterized profiles
Every profile below also inherits ProfileType, ProfileName, and Position. The
required-attribute summary (IFC4.3) :
| Profile | Required attributes | Use |
|---|
IfcRectangleProfileDef | XDim, YDim | rectangular sections, walls, slabs |
IfcCircleProfileDef | Radius | round bars, columns, pipes |
IfcEllipseProfileDef | SemiAxis1, SemiAxis2 | elliptical sections |
IfcIShapeProfileDef | OverallWidth, OverallDepth, WebThickness, FlangeThickness | I / H steel beams |
IfcLShapeProfileDef | Depth, Thickness | steel angle sections |
IfcUShapeProfileDef | Depth, FlangeWidth, WebThickness, FlangeThickness | channel / U sections |
IfcTShapeProfileDef | Depth, FlangeWidth, WebThickness, FlangeThickness | tee sections |
IfcCShapeProfileDef | Depth, Width, WallThickness, Girth | cold-formed lipped channels |
IfcZShapeProfileDef | Depth, FlangeWidth, WebThickness, FlangeThickness | Z / zed sections |
IfcRectangleHollowProfileDef (subtype of IfcRectangleProfileDef) adds
WallThickness. IfcCircleHollowProfileDef (subtype of IfcCircleProfileDef) adds
WallThickness. Full attribute lists, optional attributes, and WHERE rules : see
references/methods.md.
The arbitrary profiles
For cross-sections that no parameterized profile describes :
IfcArbitraryClosedProfileDef : a single closed outline. Attribute OuterCurve
(IfcCurve). Subtype of IfcProfileDef directly, so it has no Position.
IfcArbitraryProfileDefWithVoids : subtype of IfcArbitraryClosedProfileDef,
adds InnerCurves (SET [1:?] OF IfcCurve) for holes.
IfcArbitraryOpenProfileDef : an open outline. Attribute Curve
(IfcBoundedCurve). Its WHERE rule forces ProfileType = CURVE.
Verified verbatim (IFC4.3) :
ENTITY IfcArbitraryClosedProfileDef
SUPERTYPE OF (ONEOF (IfcArbitraryProfileDefWithVoids))
SUBTYPE OF (IfcProfileDef);
OuterCurve : IfcCurve;
WHERE
WR1 : OuterCurve.Dim = 2;
WR2 : NOT('IFC4X3_DEV.IFCLINE' IN TYPEOF(OuterCurve));
WR3 : NOT('IFC4X3_DEV.IFCOFFSETCURVE2D' IN TYPEOF(OuterCurve));
END_ENTITY;
ALWAYS give OuterCurve a closed 2D curve (IfcPolyline, IfcCompositeCurve, or
IfcIndexedPolyCurve). NEVER use an IfcLine : WR2 rejects it because a line is
not closed.
Composite and derived profiles
IfcCompositeProfileDef : two or more profiles combined into one. Attribute
Profiles (SET [2:?] OF IfcProfileDef), optional Label.
IfcDerivedProfileDef : a profile produced by applying a 2D transformation to a
parent. Attributes ParentProfile (IfcProfileDef), Operator
(IfcCartesianTransformationOperator2D), optional Label.
Verified verbatim (IFC4.3) :
ENTITY IfcCompositeProfileDef
SUBTYPE OF (IfcProfileDef);
Profiles : SET [2:?] OF IfcProfileDef;
Label : OPTIONAL IfcLabel;
WHERE
InvariantProfileType : SIZEOF(QUERY(temp <* Profiles |
temp.ProfileType <> Profiles[1].ProfileType)) = 0;
NoRecursion : SIZEOF(QUERY(temp <* Profiles |
'IFC4X3_DEV.IFCCOMPOSITEPROFILEDEF' IN TYPEOF(temp))) = 0;
END_ENTITY;
Version differences (compact)
| Item | IFC2x3 | IFC4 | IFC4.3 |
|---|
IfcParameterizedProfileDef.Position | required | OPTIONAL | OPTIONAL |
| Fillet / edge radius measure type | IfcPositiveLengthMeasure | IfcNonNegativeLengthMeasure | IfcNonNegativeLengthMeasure |
| Optional edge-radius / slope attributes on I / U / T / L / Z profiles | absent | present | present |
IfcAsymmetricIShapeProfileDef | subtype of IfcIShapeProfileDef | direct subtype of IfcParameterizedProfileDef | direct subtype |
IfcMirroredProfileDef | absent | present | present |
IfcCraneRailFShapeProfileDef, IfcCraneRailAShapeProfileDef | present | removed | removed |
IfcOpenCrossProfileDef | absent | absent | present |
Full per-version detail : see references/methods.md.
Decision Trees
Which profile entity do I need?
What cross-section are you modelling?
|
+-- A simple rectangle or square
| --> IfcRectangleProfileDef (XDim, YDim).
|
+-- A circle, a round bar, a solid column
| --> IfcCircleProfileDef (Radius).
|
+-- A standard hot-rolled steel section
| --> I/H beam --> IfcIShapeProfileDef
| angle --> IfcLShapeProfileDef
| channel --> IfcUShapeProfileDef
| tee --> IfcTShapeProfileDef
| cold C --> IfcCShapeProfileDef
| zed --> IfcZShapeProfileDef
|
+-- A hollow section (tube)
| --> rectangular --> IfcRectangleHollowProfileDef
| circular --> IfcCircleHollowProfileDef
|
+-- A free-form closed outline (no parameters fit)
| --> IfcArbitraryClosedProfileDef (OuterCurve).
|
+-- A free-form outline with holes in it
| --> IfcArbitraryProfileDefWithVoids (OuterCurve + InnerCurves).
|
+-- An open outline to sweep a SURFACE (not a solid)
| --> IfcArbitraryOpenProfileDef (Curve, ProfileType = CURVE).
|
+-- Two or more profiles acting as one section
| --> IfcCompositeProfileDef (Profiles).
|
+-- A copy of an existing profile, transformed
--> IfcDerivedProfileDef (ParentProfile + Operator).
AREA or CURVE for ProfileType?
Will this profile be swept into a SOLID?
|
+-- YES --> ProfileType = AREA. The profile must be a CLOSED region.
| Required for every profile feeding an IfcSweptAreaSolid.
|
+-- NO, it sweeps a SURFACE only --> ProfileType = CURVE.
| Used with IfcArbitraryOpenProfileDef.
|
+-- A profile with voids --> ProfileType = AREA always (WR1 enforces it).
Closed or open profile?
Does the cross-section enclose an area?
|
+-- YES, it is a closed loop
| --> IfcArbitraryClosedProfileDef (or a parameterized profile).
| OuterCurve is a closed 2D curve, never an IfcLine.
|
+-- NO, it is an open strip (e.g. a sheet-metal centre line)
--> IfcArbitraryOpenProfileDef. ProfileType MUST be CURVE.
This profile can NEVER feed an IfcSweptAreaSolid.
Patterns
Pattern : Match the profile entity to the section
ALWAYS use the dedicated parameterized profile for a standard section : an
IfcIShapeProfileDef for an I or H beam, an IfcLShapeProfileDef for an angle, an
IfcCircleProfileDef for a round bar.
ALWAYS reach for IfcArbitraryClosedProfileDef only when no parameterized profile
fits the section. A parameterized profile carries semantic meaning (a downstream
tool reads OverallDepth); an arbitrary profile carries only an outline.
NEVER approximate a circle or rectangle with an arbitrary polyline when the exact
parameterized profile exists.
Pattern : Set ProfileType to AREA for a solid sweep
ALWAYS set ProfileType = AREA on any profile that becomes the SweptArea of an
IfcExtrudedAreaSolid, IfcRevolvedAreaSolid, or any other IfcSweptAreaSolid.
NEVER set ProfileType = CURVE on such a profile : the SweptAreaType WHERE rule
on IfcSweptAreaSolid states SweptArea.ProfileType = IfcProfileTypeEnum.Area and a
CURVE profile fails it.
See ifc-syntax-geometry-swept-solid for the sweep entities that consume the
profile.
Pattern : Give arbitrary profiles a valid closed curve
ALWAYS give IfcArbitraryClosedProfileDef.OuterCurve a closed, 2-dimensional curve :
an IfcPolyline whose last point equals its first, an IfcCompositeCurve, or an
IfcIndexedPolyCurve.
NEVER use an IfcLine for OuterCurve or for any InnerCurves member : WR2
rejects an IfcLine because a single line is not a closed region. NEVER use an
IfcOffsetCurve2D for OuterCurve : WR3 rejects it.
Pattern : Model holes with IfcArbitraryProfileDefWithVoids
ALWAYS model a cross-section with one or more holes as an
IfcArbitraryProfileDefWithVoids : a closed OuterCurve plus an InnerCurves set
of closed 2D curves. The holes in the profile become voids in the swept solid.
ALWAYS set ProfileType = AREA on a profile with voids : its WR1 rule requires it.
NEVER model a hole with an open curve : every InnerCurves member must itself be
closed, 2D, and not an IfcLine.
Pattern : Keep hollow-section wall thickness valid
ALWAYS keep the WallThickness of IfcCircleHollowProfileDef strictly smaller than
the Radius : the WR1 rule states WallThickness < Radius.
ALWAYS keep the WallThickness of IfcRectangleHollowProfileDef smaller than half
of both XDim and YDim : the ValidWallThickness rule enforces it.
NEVER declare a hollow profile whose wall consumes the whole section : a wall as
thick as the radius leaves no void and fails schema validation.
Pattern : Build composite profiles without recursion
ALWAYS make every member of an IfcCompositeProfileDef.Profiles set share one
ProfileType : the InvariantProfileType rule rejects a set that mixes AREA and
CURVE profiles.
NEVER place an IfcCompositeProfileDef inside another IfcCompositeProfileDef : the
NoRecursion rule forbids a composite that contains a composite.
Pattern : Honour the version differences
ALWAYS supply IfcParameterizedProfileDef.Position in an IFC2x3 file : there the
attribute is required, not optional. In IFC4 and IFC4.3 it may be omitted.
ALWAYS type fillet and edge radii as IfcNonNegativeLengthMeasure in IFC4 and
IFC4.3, and as IfcPositiveLengthMeasure in IFC2x3.
NEVER write the IFC4 optional edge-radius or slope attributes (FlangeEdgeRadius,
FlangeSlope, WebSlope, LegSlope) into an IFC2x3 profile : those attributes did
not exist in IFC2x3. See ifc-impl-version-migration.
Reference Links
references/methods.md : the complete verified attribute lists and WHERE rules
for every profile entity, the inherited attributes, and the per-version difference
detail.
references/examples.md : worked STEP scenarios : a rectangle profile, an I-shape
steel section, a hollow section, an arbitrary outline, a profile with a void, a
composite profile, and a derived profile.
references/anti-patterns.md : the failure modes this skill prevents, each with
the WHERE rule or version rule it violates.
Official sources
Related skills
ifc-syntax-geometry-swept-solid : the sweep entities that consume an AREA
profile to produce a 3D solid.
ifc-syntax-geometry-representations : how the resulting solid is wrapped in an
IfcShapeRepresentation.
ifc-syntax-materials : IfcMaterialProfileSet binds a material to a profile.