mirror of
https://github.com/bherbruck/solidcraft.git
synced 2026-11-13 12:10:38 +00:00
d8113d096c
* Move geom's pcurve, label and check into solidcore::eval (pure git mv)
crates/geom/src/brep/{pcurve,pcurve_tests,label,check}.rs move unchanged to
solidcore/crates/solidcore/src/eval/. The next commits retype them to the kernel's evaluation
types and switch their callers; this commit is the move alone so their history follows them.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* solidcore::eval: pcurve, label and check on the kernel's evaluation types
The moved files take eval::geometry's Curve, Curve2, Surface and Frame (the record's kinds,
field for field) and the kernel's evaluator, in place of the record's types and
solidcraft-geom's evaluator. What reads a record as a record leaves: the structural checks
(counts, budgets, a use's interval in its curve's natural range), the edge and face readers
(edge_curve_interval, form_turns on a Face) and the trim request types go to solidcore-ops,
which converts. Results are unchanged: the pcurve keeps its own pole test (the evaluator's
speed rule), knot span search and B-spline cut, not the kernel's collapse; the 80 eval tests
pass, the pcurve suite among them.
Lint-driven rewrites that keep each result: checked indexing, no pre-reserving from input counts,
the loop rotation without a remainder, a clamp that cannot panic on a reversed domain. The
hostile-record cases that depend on the record's checks are kept as no-panic checks here and as
refusals in ops.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* solidcore-ops: pcurve, label and record_check over the record
The record's side of the moved kernel routines: each checks the record's structure as the
record's validation does (one budget per face, a use's interval in its curve's natural range, a
given pcurve as a 2D B-spline), converts through solidcore-convert, calls solidcore::eval and
converts back. The trim request types (TrimFace, TrimEdge, TrimUse, Trims) hold records, so they
live here. No arithmetic: ops' float-arithmetic and geometry-method lints pass unchanged.
The hostile-record refusals the record checks give (empty and non-finite intervals, a NaN
coordinate, a circle of no radius) are tested here.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Call pcurve, label and the record checks through solidcore-ops
geom, kernel, smlib and step call solidcore_ops::{pcurve, label, record_check} where they called
solidcraft_geom::brep::{pcurve, label, check}, which moved into solidcore::eval. One
implementation of each remains, in the kernel; geom's brep module no longer declares them.
solidcore-ops becomes a workspace dependency of the four crates (the seam check's public list
already allows it).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Move geom's record agreement check into solidcore::eval (pure git mv)
crates/geom/src/brep/geometry.rs moves unchanged to solidcore/crates/solidcore/src/eval/agreement.rs
(the kernel's eval already has a geometry module). The next commit retypes it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* solidcore::eval::agreement on a plain view; ops reads a record into it
The moved check reads a record through agreement::View (edges, vertices, faces and their uses,
in the kernel's evaluation types) in place of the record's Brep, which the kernel never sees.
solidcore-ops' record_check::agreement converts a record's curves, surfaces and pcurves into the
view and calls it; Mismatch, Problem and Record keep their wording. The pole test is the
pcurve's speed rule, as before.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Check record agreement through solidcore-ops
kernel, smlib, step and geom's tests call solidcore_ops::record_check::agreement where they
called solidcraft_geom::brep::geometry::check, which moved into solidcore::eval::agreement.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Leave kernel/src/tess on geom's pcurve path until the tess move
crates/kernel/src/tess is moving into solidcore-tess in its own pull request, so its three
pcurve::eval call sites are not edited here: geom::brep::pcurve re-exports
solidcore_ops::pcurve::eval for them, and goes when the tess move switches them.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* solidcore/bench/step: the STEP reader bake-off harness
fetch.sh builds the corpus at run time from pinned sources (SolidCraft's STEP tests,
dan335/step-conformance, solidcore's fixtures, cadmpeg's fixtures, the NIST PMI and STEP Tools
sets through their SHA-256 pinned fetch scripts), folded by SHA-256; nothing downloaded is
committed. run.py runs readers in the solidcraft-cli eval shape with a timeout and writes
per-file.tsv and summary.md: opened, refused, timed out, all bodies closed, reference volumes
within 0.1% (references.tsv, from formulas), and wall time.
On main cc55f59bf2: 319 files, 195 opened, 135 with every body closed, 23 of 24 reference
volumes, median 0.20 s.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Move SolidCraft's STEP reader into solidcore (pure git mv)
crates/step moves unchanged to solidcore/crates/solidcore-step, and its Part 21 parser to
solidcore-record/src/step/p21.rs, where it takes the place of record's earlier port of this same
file (from a5b71ca2). This commit is the move alone, so the files keep their history and
authors; the next commits make them build in their new places and switch SolidCraft to them.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* solidcore-record: the Part 21 parser keeps record's hardening
The moved parser takes back what record's port added in review (#2591): typed errors with the
same messages, entities in id order (BTreeMap), capped parameter and record counts, linear-time
decoding of unterminated escapes, a byte order mark skipped. The file's content is record's as
before the move; its history now runs through SolidCraft's parser.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* solidcore-step: the moved reader as a solidcore workspace crate
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* solidcore-step: evaluate and form records through the kernel
The moved reader called solidcraft-geom's record evaluator, exact forms and vector helpers. It
now calls the kernel's: solidcore::eval's CurveEval, SurfaceEval, face_flux and form, through a
private `kernel` module that converts records with solidcore-convert, and the kernel's vector
measures on the record's Vec3 (`vec`). geom's form was a copy of the kernel's, function for
function; the face box (`extent`) is the kernel's with poles taken exactly. The B-spline cut is
the kernel's (eval::pcurve::segment), the pole test the pcurve's speed rule, both made public
for this. Profiling spans, which were SolidCraft's, are left out.
The crate keeps SolidCraft's formatting (its own rustfmt.toml) and lints under solidcore's hard
rules: no unsafe, unwrap, expect, panic or unchecked indexing (the 33 indexing sites are
rewritten with iterators and checked access, results unchanged). The step-conformance test reads
SolidCraft's tests/step-conformance where the tree has it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* SolidCraft reads and writes STEP through solidcore-step
crates/kernel's STEP import (step_in), STEP export (step_out) and IGES export (iges_out) call
solidcore_step where they called solidcraft_step; crates/step is gone. The Part 21 parse error is
the record's typed error, shown with the same message. solidcore-step joins the crates
SolidCraft may use directly (xtask/solidcore-public.txt) until its build is kernel primitives
under an ops recipe (RFC 0003, 1.6).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* solidcore-step: bound faces with the pcurves' pole test (form::extent_by)
The bake-off showed the reader on the kernel's form::extent refusing 7 STEP Tools parts
(304-310 boxy_with_*: "loop encloses no (u, v) area") and reading the large parts 2-8x slower
(rear 37.8 s against 18.4 s): extent's exact collapse test classifies the boundary points
differently from the speed rule the reader's faces were always bounded with, and costs a
collapse search per point (the cost in #13655). extent's body now takes the pole test
(form::extent_by; extent keeps the exact one), and the reader passes the pcurves' speed rule.
On those files the result and time are base's again: boxy_with_cylindricity 174839.178,
nist_ftc_06 3323556.516, rear 14.0 s against 16.3 s.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Kernel rig: drop the gone crates/step paths
crates/step moved to solidcore/crates/solidcore-step, which the shared core (PATHS-ALL:
solidcore/**) already covers: the import and crash areas' PATHS and kernel-rig.yml drop it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Cargo.lock: solidcraft-step is now solidcore-step
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* io: the model cache key no longer names crates/step
The reader moved to solidcore/crates/solidcore-step, which the cache already keys as part of the solidcore tree.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* solidcore: a whole turn a rounding short of a quarter line has its form from it (#12760)
Port of #13535's fix in crates/geom's form to the kernel's form, which the STEP reader now uses: a cylinder, cone, sphere or torus face of one whole turn whose seam reads back a rounding short of a quarter line started its form a quarter early, and a tube read back through STEP measured 14 % over.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* pcurve docs: a pcurve without a closed form is refused, not fitted
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* bench/step: a malformed --reader is an error; a reader's bad JSON is a refusal, not a crash
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>