* test: reproduce #261 (Rectangular pattern of a hole cut scales super-linearly) * Patterns of many hole cuts scale near-linearly (#261) Two quadratic costs: - Meshing a face tested every point against every segment of every boundary loop, so a plate face with hundreds of holes meshed in quadratic time. The vendored truck-meshalgo inside test now skips loops whose parameter box is clear of the point (they wind zero times around it). - A pattern cut each copy in turn, rebuilding and re-checking an ever more complex target per copy. Copies whose boxes are clear of each other are now one tool of many pieces (kernel::union_apart, no intersection work), cut once. 512 holes now take ~7 s instead of not finishing. The test's volume tolerance is widened from 1e-6 relative to 0.1 % of each hole: the measure meshes the bores and reads each hole ~0.06 % small, on main too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Hole-pattern test: a budget CI can meet; coarser apart-box meshes (#261) CI runs every test binary at once and is about ten times slower than a machine running this test alone (15 tests passed 60 s in the last run), so the 512-hole pattern (about 6 s alone) hit the 60 s timeout there. The budget now only has to tell linear from the quadratic hang: 300 s timeout, 120 s budget. union_apart meshes each copy coarsely (2 % of its size, box grown by twice that). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Hole-pattern test checks the scaling, not a wall-clock time (#261) CI runs every test binary at once: the 512-hole pattern (about 6 s alone, 10 s CPU single-threaded) took 177 s there, so no fixed time is reliable. The test now patterns 128 and then 512 holes and requires the second to take under 8x the first (linear is 4x, measured 3.5-4.2x here; the old quadratic cost was 16x or more), each with the volume check and a 900 s hang guard. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: bherbruck <brennen.herbruck@gmail.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
81 lines
4.9 KiB
Markdown
81 lines
4.9 KiB
Markdown
# Vendored third-party crates
|
|
|
|
Copies of third-party crates that SolveCraft builds with local fixes, wired in with
|
|
`[patch.crates-io]` in the workspace `Cargo.toml`. They keep their own licence; changed lines
|
|
are marked `SolveCraft:` in the source.
|
|
|
|
## truck-shapeops 0.4.0 (Apache-2.0, © RICOS Co. Ltd., https://github.com/ricosjp/truck)
|
|
|
|
Changes:
|
|
- `transversal/intersection_curve/mod.rs`: reject empty/single-point polylines and
|
|
collapsed or non-finite segments before endpoint indexing and normalization. A hidden
|
|
constructor re-export lets the kernel workspace tests exercise the actual vendored code.
|
|
- `transversal/integrate/mod.rs`: mesh both shells with `robust_triangulation` (faces made by
|
|
earlier booleans have boundaries that lie on their surface only within tolerance).
|
|
- `transversal/divide_face/mod.rs`: when projecting a loop onto a face's surface, fall back to
|
|
the nearest parameter when the exact search fails (intersection curves are approximations).
|
|
- `transversal/integrate/mod.rs`: the result's shells and faces keep the order of the shell
|
|
they come from (truck's connected components followed hash order of face addresses, so a
|
|
boolean's faces came out in a different order on every run).
|
|
- `lib.rs`: `tr!` reports where an operation gives up when `SHAPEOPS_TRACE` is set; compiler
|
|
warnings no longer fail the build.
|
|
|
|
## truck-stepio 0.3.0 (Apache-2.0, © RICOS Co. Ltd., https://github.com/ricosjp/truck)
|
|
|
|
Only the writer (`out`) is used; SolveCraft reads STEP with its own reader.
|
|
|
|
Changes:
|
|
- `out/geometry.rs`: an `INTERSECTION_CURVE`'s second surface was written at the first
|
|
surface's entity index, so every boolean-made edge produced duplicate entity ids.
|
|
- `out/geometry.rs`: surfaces of revolution carry the right `same_sense` for inverted and
|
|
mirrored revolutions (ISO 10303-42 parameterises them by angle then profile, so their normal
|
|
is the opposite of truck's; a mirroring transform reverses it again), and the modeling-surface
|
|
wrapper passes the revolution's sense through instead of always `true`.
|
|
- `lib.rs`: compiler warnings no longer fail the build. Example and test targets are dropped
|
|
(their sources are not vendored).
|
|
|
|
## truck-meshalgo 0.4.0 (Apache-2.0, © RICOS Co. Ltd., https://github.com/ricosjp/truck)
|
|
|
|
Changes:
|
|
- `tessellation/triangulation.rs`: the inside test of a face's boundary skips loops whose
|
|
parameter box is clear of the point (it tested every segment of every loop, so a face with
|
|
hundreds of holes meshed in quadratic time).
|
|
- `tessellation/triangulation.rs`: meshed faces and edges are built unchecked: faces whose loop
|
|
runs along a seam edge both ways and closed edges (a full circle on one vertex) are valid,
|
|
but the debug-build checks rejected them (debug builds could not mesh them).
|
|
- `tessellation/triangulation.rs`: parameter searches that land outside a surface's bounded,
|
|
non-periodic domain are rejected (a hinted B-spline search can run off and extrapolate to
|
|
thousands of parameter units, and meshing that grid never finishes); the last-resort nearest
|
|
search is clamped into the domain.
|
|
- `tessellation/triangulation.rs`, bounded work (hostile files must not hang): edge polylines
|
|
and surface grids come from our own bounded divisions (at most 20 000 points per edge, a
|
|
grid budget per face shared out of 10 million points per shell, 24 refinement rounds; a
|
|
point that does not evaluate counts as flat instead of recursing). Surface grids refine only
|
|
the direction that bends, and a ruling left undivided gets cells comparable to the other
|
|
direction (long triangles from a trim loop to the grid's far ends cut through cylinders).
|
|
- `lib.rs`: compiler warnings no longer fail the build. Example, test and bench targets are
|
|
dropped (their sources are not vendored).
|
|
|
|
## matext4cgmath 0.1.0 (Apache-2.0, © RICOS Co. Ltd., https://github.com/ricosjp/matext4cgmath)
|
|
|
|
truck-geometry uses it for a matrix's operator norm (an intersection curve scales its tolerance
|
|
by it whenever it is moved).
|
|
|
|
Changes:
|
|
- `solver.rs`: the Newton refinement of cubic and quartic roots stops after 100 steps. Near a
|
|
double root it could cycle forever: moving a body whose edges a boolean made (the retries
|
|
move both bodies and the result back) hung the app.
|
|
- `lib.rs`: compiler warnings no longer fail the build. Test targets are dropped (their sources
|
|
are not vendored).
|
|
|
|
## egui-wgpu 0.36.2 (MIT OR Apache-2.0, Emil Ernerfeldt and contributors)
|
|
|
|
Original package sources from https://github.com/emilk/egui/tree/0.36.2/crates/egui-wgpu,
|
|
with both original licence texts retained. No images or bundled documentation are copied.
|
|
|
|
SolidCraft changes:
|
|
- `src/lib.rs`: use 1x MSAA on the selected OpenGL adapter before creating pipelines,
|
|
exposing the effective sample count so host paint callbacks can match it.
|
|
- `src/winit.rs`: use that same effective count for depth and resolve attachments.
|
|
- Other backends retain requested MSAA, without another adapter or device probe.
|