Skip to content

v0.10.0 — Frame contracts and surface-curve pairing

Choose a tag to compare

@GeneralPawz GeneralPawz released this 05 Sep 13:39
· 16 commits to main since this release

Frame contracts, and the surface-curve pairing that unblocks IFC surface curves.

Breaking

  • CurveRelation::SurfaceCurve replaces associated_geometry: Vec<NodeId> with sides: SurfaceSides, which pairs each p-curve with the surface it lies on. Construct with SurfaceSides::single(surface, pcurve) or SurfaceSides::two(s1, p1, s2, p2).
  • MasterRepresentation::ParameterCurve splits into ParameterCurveS1 and ParameterCurveS2.
  • ExpectedReference::CurveOrSurface is removed; it had no remaining constructor once each side is checked against its own node kind.

Added

  • PlaneFrame and SpaceFrame in axiolid-core: validated in-plane and 3D orthonormal frames with private fields, so an invalid basis is unrepresentable rather than merely rejected. Both own their mappings (project/lift, to_local/to_world).
  • bounded_half_space_in_frame in axiolid-construct, taking an explicitly authored in-plane boundary frame.

Fixed

  • axiolid-project decided plane orthonormality with the LINEAR tolerance. Orthonormality is a dot product of unit vectors and so is dimensionless; deciding it with a length tolerance made the same 0.5 mrad skewed basis valid in millimetres and invalid in metres, silently producing wrong coordinates for every projected point.
  • Surface evaluation accepted a LEFT-handed frame. invert checked unit length and perpendicularity but never handedness, and a mirrored basis satisfies both -- returning reflected parameters that round-trip through their own bad frame and look correct. It also validated against a hardcoded 1e-9 while already receiving a caller tolerance.
  • SolidOperation::BoundedHalfSpace.placement now orients the boundary profile rather than only the finished mesh, so a source format that places the boundary independently of the base surface round-trips.

Notes

Three call sites previously carried their own frame validity rules under three different tolerance policies, and only two of the three checked handedness. All now delegate to SpaceFrame; no hand-rolled orthonormality checks remain in production code.

Closes #90, #93, #94, #95.