IFC 4.3.1.0 (IFC4X3_ADD1) development

# 8.8.3.36 IfcSectionedSurface

## 8.8.3.36.1 Semantic definition

A surface constructed by sweeping potentially varying open cross sections along a curve horizontally (or near horizontally). The surface is generated by sweeping the CrossSections between CrossSectionPositions; linear interpolation is assumed, unless transitions curves between cross section points are indicated by OpenCrossProfileDef.Tags.

The profile normal is derived from the associated IfcAxis2PlacementLinear, not necessarily the tangent of the Directrix. The profile Y axis is oriented according to Axis attribute of IfcAxis2PlacementLinear and the X is derived from the cross product of Directrix and the Axis attribute of IfcAxis2PlacementLinear.

Figure 8.8.3.36.A illustrates an IfcSectionedSurface defined using IfcOpenCrossProfileDef.

In case of branching longitudinal breaklines, the IfcSectionedSurface shall use IfcOpenCrossProfileDef instances with varying number of cross section points. In that case, the point in two consecutive cross sections that are connected are identified by the same tag value.

Figure 8.8.3.36.B illustrates an IfcSectionedSurface featuring branching longitudinal breaklines.

Informal Propositions:

1. No two consecutive sections shall intersect.
2. If the directrix is not tangent continuous, the resulting surface is created by a miter at half angle between the two segments.
3. 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.
4. The directrix shall not intersect

## 8.8.3.36.5 Formal representation

ENTITY IfcSectionedSurface
SUBTYPE OF (IfcSurface);
Directrix : IfcCurve;
CrossSectionPositions : LIST [2:?] OF IfcAxis2PlacementLinear;
CrossSections : LIST [2:?] OF IfcProfileDef;
WHERE
AreaProfileTypes : SIZEOF(QUERY(temp <* CrossSections | temp.ProfileType = IfcProfileTypeEnum.CURVE)) = 0;
CorrespondingSectionPositions : SIZEOF(CrossSections) = SIZEOF(CrossSectionPositions);
DirectrixIs3D : Directrix.Dim = 3;
NoOffsets : SIZEOF(QUERY(temp <* CrossSectionPositions | EXISTS(temp.Location.OffsetLateral) OR EXISTS(temp.Location.OffsetVertical) OR EXISTS(temp.Location.OffsetLongitudinal))) = 0;
SectionsSameType : SIZEOF(QUERY(temp <* CrossSections | TYPEOF(CrossSections[1]) :<>: TYPEOF(temp))) = 0;
END_ENTITY;

## 8.8.3.36.6 References

Is this page difficult to understand? Let us know!

• New resource