How to model crest/sag vertical curves?

How is the direction of a vertical curve specified (crown/crest, convex/concave)?

The docs for IfcAlignmentVerticalSegment say that the end direction (EndGradient) can be calculated from start direction (StartGradient), segment length (HorizontalLength), and curve parameter (RadiusOfCurvature).

I understand this to mean that EndGradient is redundant, isn’t required (not exchanged), and should be neglected (except to maybe do a check calculation). Additionally, the RadiusOfCurvature attribute is of type IfcPositiveLengthMeasure. The RadiusOfCurvature needs a sign to indicate sag or crest curve, or it can be omitted and the EndGradient would be nonredundant and required. The signs and relative slope of the StartGradient and EndGradient alone are sufficient to define a crest or sag curve and would eliminate the need for RadiusOfCurvature.

In the 4.1 specification, IfcAlignment2DVerSegParabolicArc and IfcAlignment2DVerSegCircularArc had an IsConvex attribute to deal with the curve direction.

For 4x3 RC3 things were totally changed and made RadiusOfCurvature positive only.
So yes EndGradient is no longer redundant but is needed to decide whether a curve is a crest or a sag curve.

I don’t know why the change happened but no doubt there was a good reason.

How do I view the 4x3 RC3?

We’ll post the link to the publicly-available version of RC3 on the Technical website when the IFC4.3 implementation team has decided it’s ready to go.

There is a draft version here

In the meantime, I think you can view the development versions in GitHub