IFC (IFC4X3_ADD2) under development IfcSectionedSolidHorizontal Semantic definition

An IfcSectionedSolidHorizontal is a solid model constructed by sweeping potentially varying cross sections along a curve horizontally.

The solid is generated by sweeping the CrossSections between CrossSectionPositions with linear interpolation between profile points with the same tag along the directrix. The profile normal is derived from the associated IfcAxis2PlacementLinear, not necessarily the tangent of the Directrix. The profile X axis is the direction of RefDirection from IfcAxis2PlacementLinear, and the profile Y axis is the direction of Axis.

For sections having cross-section rotated according to a single super-elevation, IfcDerivedProfileDef may be used to indicate such rotation with each ParentProfile referring to the same underlying profile. For sections having cross-section transformed according to multiple super-elevations with points varying independently, each profile may be of a different instance but of same type (e.g. IfcArbitraryClosedProfileDef), and may optionally have cross section points associated to string lines ("guide curves") by matching labels using IfcIndexedPolyCurve with IfcCartesianPointList2D.TagList.

Figure illustrates four girders of a bridge having a constant parameterized profile, two guardrails having a constant arbitrary profile (one of them mirrored), and a bridge deck having a variable arbitrary profile.

spatial structure
Figure — Sectioned solid horizontal
Figure — Side View showing multiple CrossSectionPositions
Figure — Example Shape in red based on two Cross Sections both not starting at the beginning or end and different in shape.

Informal Propositions

  1. No two consecutive sections shall intersect.
  2. If the type of sections is not IfcParameterizedProfileDef (i.e. an arbitrary profile), then the number of points and edges should be the same for two consecutive profiles
  3. If the directrix is not tangent continuous, the resulting solid is created by a miter at half angle between the two segments.
  4. Very sharp edges may result in nearly impossible miter; implementer agreements may define acceptable limits for tangent discontinuity or require the directrix to be tangent continuous.
  5. The directrix shall not intersect Entity inheritance Attributes

# Attribute Type Description
IfcRepresentationItem (2)
LayerAssignment SET [0:1] OF IfcPresentationLayerAssignment FOR AssignedItems

Assignment of the representation item to a single or multiple layer(s). The LayerAssignments can override a LayerAssignments of the IfcRepresentation it is used within the list of Items.

StyledByItem SET [0:1] OF IfcStyledItem FOR Item

Reference to the IfcStyledItem that provides presentation information to the representation, e.g. a curve style, including colour and thickness to a geometric curve.

IfcSolidModel (1)
* Dim IfcDimensionCount

This attribute is formally derived.


The space dimensionality of this class, it is always 3.

IfcSectionedSolid (2)
1 Directrix IfcCurve

The curve used to define the sweeping operation.

2 CrossSections LIST [2:?] OF IfcProfileDef

List of cross sections in sequential order along the Directrix.

Click to show 5 hidden inherited attributes Click to hide 5 inherited attributes
IfcSectionedSolidHorizontal (1)
3 CrossSectionPositions LIST [2:?] OF IfcAxis2PlacementLinear

Position coordinate systems in sequentially increasing order paired with CrossSections, indicating the position of the corresponding section along the Directrix.

Table Formal propositions

Name Description

The set of cross sections and the set of cross section positions shall be of the same size.

SIZEOF(CrossSections) = SIZEOF(CrossSectionPositions)

Distance expressions must not use longitudinal offsets.

SIZEOF(QUERY(temp <* CrossSectionPositions | EXISTS(temp.Location.OffsetLongitudinal))) = 0
Table Examples Formal representation

ENTITY IfcSectionedSolidHorizontal
 SUBTYPE OF (IfcSectionedSolid);
	CrossSectionPositions : LIST [2:?] OF IfcAxis2PlacementLinear;
	CorrespondingSectionPositions : SIZEOF(CrossSections) = SIZEOF(CrossSectionPositions);
	NoLongitudinalOffsets : SIZEOF(QUERY(temp <* CrossSectionPositions | EXISTS(temp.Location.OffsetLongitudinal))) = 0;
END_ENTITY; References

Edit on Github

Is this page difficult to understand? Let us know! Changelog IFC4.1

  • New resource IFC4.3_DEV_70ee25e8

  • attribute, FixedAxisVertical
  • attribute CrossSectionPositions type, Changed from "list[2:?] of IfcDistanceExpression" to "list[2:?] of IfcAxis2PlacementLinear"
  • where rule NoLongitudinalOffsets definition, Changed from "sizeof(query(temp <* CrossSectionPositions | exists(temp.OffsetLongitudinal))) = 0" to "sizeof(query(temp <* CrossSectionPositions | exists(temp.Location.OffsetLongitudinal))) = 0"