At a tangent discontinuity of a composite base, the neutral evaluators take the next piece. ElevationLaw::piece_at says "seams belong to the piece that starts there", and the polyline span does the same. ADR 0082 states no rule for stations, so a station that lands exactly on a seam gets an unstated frame. Some consumers need the previous piece's tangent to govern there. One example is IFC4X3 ADD2 8.9.3.48.3.
Needed
- A stated seam rule in ADR 0082, plus a seam-side selector on
CurveStation / OrientedCurveStation: incoming (previous piece) or outgoing (next piece). The default must be the documented current behaviour, so existing results don't change.
- Mitred runs across seams:
SectionsAtStations, OpenSectionsAtStations and OffsetByStations runs that cross a seam get a mitre. That means the bisector plane of the incoming and outgoing tangents (IFC 8.8.3.35.1 is one consumer rule), not a section in one side's frame. A seam whose mitre degenerates (near-reversal) is refused with a typed error.
- Seam positions without evaluating: a query that returns the seam parameters / arc lengths of a composite or relation curve from stored data, exactly where the data is exact. Today a consumer cannot place stations on a plain composite base without evaluating it, so it refuses all of them.
Done when
- ADR 0082 states the seam rule, and every station evaluator follows it.
- Stations on a seam give the incoming or outgoing frame as selected, with tests at G1 and non-G1 seams.
- Section and offset runs across a non-G1 seam are mitred, with a test that the cross-section lies in the bisector plane.
- Seam positions can be read for composite and relation curves, with typed refusal for any curve whose seams cannot be located exactly.
Consumer: openbimrs/ifc#346.
At a tangent discontinuity of a composite base, the neutral evaluators take the next piece.
ElevationLaw::piece_atsays "seams belong to the piece that starts there", and the polyline span does the same. ADR 0082 states no rule for stations, so a station that lands exactly on a seam gets an unstated frame. Some consumers need the previous piece's tangent to govern there. One example is IFC4X3 ADD2 8.9.3.48.3.Needed
CurveStation/OrientedCurveStation: incoming (previous piece) or outgoing (next piece). The default must be the documented current behaviour, so existing results don't change.SectionsAtStations,OpenSectionsAtStationsandOffsetByStationsruns that cross a seam get a mitre. That means the bisector plane of the incoming and outgoing tangents (IFC 8.8.3.35.1 is one consumer rule), not a section in one side's frame. A seam whose mitre degenerates (near-reversal) is refused with a typed error.Done when
Consumer: openbimrs/ifc#346.