v0.10.0 — Frame contracts and surface-curve pairing
Frame contracts, and the surface-curve pairing that unblocks IFC surface curves.
Breaking
CurveRelation::SurfaceCurvereplacesassociated_geometry: Vec<NodeId>withsides: SurfaceSides, which pairs each p-curve with the surface it lies on. Construct withSurfaceSides::single(surface, pcurve)orSurfaceSides::two(s1, p1, s2, p2).MasterRepresentation::ParameterCurvesplits intoParameterCurveS1andParameterCurveS2.ExpectedReference::CurveOrSurfaceis removed; it had no remaining constructor once each side is checked against its own node kind.
Added
PlaneFrameandSpaceFrameinaxiolid-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_frameinaxiolid-construct, taking an explicitly authored in-plane boundary frame.
Fixed
axiolid-projectdecided 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.
invertchecked 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 hardcoded1e-9while already receiving a caller tolerance. SolidOperation::BoundedHalfSpace.placementnow 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.