Files
OneCAD/vendor/truck-meshalgo
c7f0139ad4 test: failing regression test for #261: Rectangular pattern of a hole cut scales super-linearly (#276)
* 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>
2026-10-12 11:18:28 -04:00
..

truck-meshalgo

Crates.io Docs.rs

Mesh algorigthms, include tessellations of the shape.

Sample Codes

filleted-cube

An experiment to decompose a mesh into elements for future NURBS-shape approximation of the mesh. Contains doc(hidden) methods.

  • Input: filleted_cube.obj
  • Output: planes.obj, lower.obj, upper.obj

irregular-sphere

Add the normal to the sphere containing the irregular normal generated from the NURBS containing the critical point.

  • Input: irregular_sphere.obj
  • Output: regular_sphere.obj

octahedron-subdivision

Apply loop subdivision to regular octahedron.

  • Input: hardcoded octahedron
  • Output: octahedron.obj, subdivision-octahedron.obj

requadrangulate-buddha

A benchmark that reads in heavy mesh data, applies triangulation and quadrangulation, and writes it out.

  • Input: happy-buddha.obj
  • Output: requadrangulated-buddha.obj

smoothing-bunny

Adds smooth normals to the stanford bunny.

  • Input: bunny.obj
  • Output: smooth_bunny.obj

splitting-sample

An experiment to decompose a mesh into elements for future NURBS-shape approximation of the mesh.

  • Input: sample.obj
  • Output: planes_parts_#.obj, others_parts_#.obj

teapot

Adds smooth normals to and quadrangulate the famous teapot.

  • Input: teapot.obj
  • Output: quaded_pot.obj

tessellate-shape

Tessellate a shape and output an obj file.

usage: tessellate-shape <input json file> <output json file>

The default <output file> is output.obj.