mirror of
https://github.com/storytold/cadcraft.git
synced 2026-11-10 04:19:59 -06:00
Endpoint residuals rebuilt a fit spline through a dense interpolation solve on every evaluation, so many Tangent/Smooth constraints on one spline, or numerical differentiation along other objects' parameters, repeated identical O(n^3) rebuilds; solving had no budget for them. purge_invalid built a fresh model per constraint, re-sampling the same block for every reference, and an Insert naming no block scanned every block definition case-insensitively. - Models built for one operation share a Prep: block samples are taken once per block (in block coordinates, transformed per Insert), block names resolve through a lazily built case-insensitive index, and the last rebuild of each spline is reused at the same defining points. - Comp::run and the Fix redundancy check refuse a system whose per-iteration residual work, including spline rebuilds, exceeds the limit DOF analysis already applied (MAX_EVAL_WORK). - Spline templates keep only what a rebuild reads: no fit points for a control spline, no control net for a fit spline. - purge_invalid validates every constraint with one Prep.