Skip to content

ifc-geometry: sectioned profile axes follow the upstream fix (X = Axis x RefDirection, left), not the printed ADD2 sentences #344

Open

Description

@GeneralPawz

IFC4.3 ADD2's printed text contradicts itself on how a cross section stands at its IfcAxis2PlacementLinear. #307 lowers IfcSectionedSolidHorizontal and IfcSectionedSurface onto Axiolid's SectionsAtStations / OpenSectionsAtStations (ADR 0082) under the reading the upstream fixes converge on: profile Y = Axis, normal = RefDirection, profile X = Axis x RefDirection (the left lateral by default). This issue records where the printed text differs, so we can revisit once buildingSMART merges a fix.

1. IfcSectionedSolidHorizontal (8.8.3.35.1)

The printed text says: "The profile X axis is the direction of RefDirection from IfcAxis2PlacementLinear, and the profile Y axis is the direction of Axis." By 8.9.3.4.3, RefDirection defaults to the curve tangent, so this lays every default profile along the directrix.

The following treat it as an error. RefDirection is the section normal and X = Axis x RefDirection:

2. IfcSectionedSurface (8.8.3.37.1)

The printed text says: "the X is derived from the cross product of Directrix and the Axis attribute". With Axis up, tangent x up points to the RIGHT.

These say left:

The same sentence says "the profile normal is derived from the associated IfcAxis2PlacementLinear", so RefDirection is the normal here as well.

Adopted

  • Profile axes: X left, Y = Axis, normal = RefDirection, for both entities. Explicit Axis and RefDirection are admitted.
  • Where the mapping lives: in one place, ifc-geometry lower::station::axes::section_orientation.
  • When upstream merges something else: the change is local to that function.

Related, not contradictory in ADD2's text

  • OffsetVertical. 8.9.3.48.3 defines it as "perpendicular to the tangent at DistanceAlong in the plane of the tangent perpendicular to the global XY plane". #1151 proposes global Z instead. The lowering follows the ADD2 text, which is Axiolid's StationFrame::Section.
  • "Sweeping ... horizontally". 8.8.3.35.1 and 8.8.3.37.1 do not define it geometrically. Sections stand in the default IfcAxis2PlacementLinear frame, the curve's own, which leans with the grade. Offsets are read in that same frame, so no frame mismatch arises.

Revisit when buildingSMART/IFC4.x-development#1151 and PRs #1162 and #1163 land.

Activity

  1. changed the title [-]ifc-geometry: IFC4.3 ADD2 contradicts itself on section profile axes at IfcAxis2PlacementLinear (RefDirection, X sign)[/-] [+]ifc-geometry: IfcSectionedSurface profile X is to the right (8.8.3.37.1) or left (8.15.3.15.1); asymmetric sections refused[/+] on Oct 4, 2026
  2. changed the title [-]ifc-geometry: IfcSectionedSurface profile X is to the right (8.8.3.37.1) or left (8.15.3.15.1); asymmetric sections refused[/-] [+]ifc-geometry: sectioned profile axes follow the upstream fix (X = Axis x RefDirection, left), not the printed ADD2 sentences; revisit on #1151[/+] on Oct 4, 2026
  3. changed the title [-]ifc-geometry: sectioned profile axes follow the upstream fix (X = Axis x RefDirection, left), not the printed ADD2 sentences; revisit on #1151[/-] [+]ifc-geometry: sectioned profile axes follow the upstream fix (X = Axis x RefDirection, left), not the printed ADD2 sentences[/+] on Oct 4, 2026
  4. GeneralPawz commented on Oct 9, 2026

    @GeneralPawz
    ContributorAuthor

    Upstream status, 2026-10-09:

    • IfcSectionedSurface: fixed upstream. buildingSMART/IFC4.x-development PR #1162 was merged on 2026-10-08 (merge commit 0a44c272efb7b7f18c1ea4f99b28fd5bc2c10f7d). The text now reads: "The profile Y axis is oriented according to Axis attribute of IfcAxis2PlacementLinear and the X is derived from the cross product of the Axis attribute of IfcAxis2PlacementLinear and the Directrix." Axis × Directrix with Axis up points to the left, which is what section_orientation already does. This was incorporated from the left-vs-right finding posted on #1151.
    • IfcSectionedSolidHorizontal: PR #1163 is approved twice (the latest approval on 2026-10-08) but not merged yet. Its text is "X is derived from the cross product of the Axis and RefDirection attributes", which is again our reading.
    • #1151 itself stays open for the OffsetVertical / IfcPointByDistanceExpression questions, which this issue doesn't depend on.

    No code change is needed: both upstream texts match the adopted mapping. When #1163 merges, the doc comments in lower/station/axes.rs, lower/sectioned.rs and the CHANGELOG get updated to cite the merged texts instead of the printed ADD2 sentences, and this issue closes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

needs-triageFiled but not yet accepted, sized, or scheduled

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions