SuperAPI AI Directory

ifc-syntax-geometry-profiles

Coding & development

View repository

Updated 10-15 22:18

About this skill

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.