Correctness boundary

Geometry interpretation

The invariants that keep comparison and single-model inspection results interpretable.

Preserve source meaning

Importers normalize geometry into typed arrays while preserving declared units, transforms, warnings, provenance, and uncertainty. They do not silently recenter, rescale, align, repair, or reinterpret a model.

Methods have preconditions

Boolean, voxel, and distance methods answer different questions. A result identifies the selected method, validates its preconditions, and reports when an answer is approximate or indeterminate.

Sampled distance has a spacing bound

Surface comparison measures sampled points on each triangle against the opposite surface. Every reported distance is exact for the points it measured, but a feature smaller than the spacing between samples can fall between them and go unreported.

Each result states the worst-case sample spacing in millimetres next to the tolerance you requested. When the spacing is larger than the tolerance, the result carries an explicit warning that features below that size can be missed. Finding no changed regions therefore means no change was observed at that sampling density, which is not the same as proving two models identical.

Inspecting one model alone

Inspect reports on one model without a baseline: bounds and dimensions, surface area, volume (or the reasons volume is withheld), placed vertex/triangle/mesh/instance/component counts, a bounded list of topology findings, a watertightness verdict, and a per-mesh breakdown, alongside the file's provenance and the unit/axis interpretation actually applied.

Topology findings and the watertightness verdict use the same exact-coordinate adjacency as comparison: two triangle corners are the same point only when their coordinates are bit-for-bit identical, with no tolerance-based welding anywhere in the pipeline. A model assembled from parts that are geometrically touching but not exactly coincident can therefore report open boundary edges even though it looks closed when rendered.

File Forensics (/tools/file-forensics/) complements Inspect rather than duplicating it: instead of geometric measurements, it reports the file's own structural and provenance truth -- the format this importer detected, mesh and instance structure, the declared-vs-resolved unit and axis with the exact applied transform, and every warning, note, or refused input the importer recorded. It reports what this importer saw, not a general verdict on the file: a file it accepts may still be rejected elsewhere, and vice versa.

Checking clearance between two parts

Clearance & Fit (/tools/clearance-fit/) checks two independently placed parts against each other: the minimum surface-to-surface distance with its closest-point pair, regions below a desired clearance, and interference evidence. Each part's placement transform is an explicit, deliberate input -- both parts start at the identity placement and this tool never auto-positions or auto-aligns either one.

Two different kinds of precision live in one result. Interference (intersecting triangle pairs) is detected with an exact triangle-triangle intersection test, independent of tessellation. The minimum distance and tight regions are sampled the same way surface comparison is, so they carry the same sample-spacing bound described above: when that spacing exceeds the desired clearance, a small feature can violate it without being reported, and a “clear” verdict is flagged as not a geometric guarantee at that tessellation. No interference volume is computed for either verdict -- only concrete intersecting triangle pairs are ever reported as interference evidence.

Measuring and sectioning one model

Measure & Section (/tools/measure-section/) answers click-to-measure and cross-section questions against one loaded model's own tessellated surface: exact snap-to-vertex/edge/face results, exact point-to-point distances, and exact cross-section loops from an exact triangle/plane intersection -- none of it sampled, unlike Compare's or Clearance & Fit's surface-distance methods.

“Exact” there is still a claim about the mesh as imported, not about any original curved or CAD geometry that mesh approximates: a section through a part that was originally a cylinder still returns straight polyline segments through its triangulated facets, not a reconstructed arc. A plane that lies exactly in one or more faces contributes no segment from those faces on its own -- reported as a coincident-triangle count and a warning rather than a guessed outline.

Checking printability evidence

Printability (/tools/printability/) reports evidence for a human decision, never a print/no-print verdict: approximate directional wall-thickness findings, exact overhang region area, exact disconnected-island evidence, and axis-aligned build-volume fit across every orientation. Slicer settings, material, and printer calibration decide whether a model actually prints, and this tool has no access to any of them -- every result it returns carries an explicit disclaimer saying so.

Its checks carry different kinds of precision and are never combined into one badge. Wall thickness is sampled and directional: it probes a bounded set of triangles along each one's own inward normal, so it reports a sample-spacing bound, an unsampled-triangle count, and a missed-probe count alongside every finding, and a thin feature outside that coverage goes unreported rather than being assumed absent. Overhang area and island connectivity are exact for the tessellated mesh, the same exact-coordinate connectivity Inspect's watertightness and Clearance & Fit's region grouping already use. Build-volume fit checks only the six axis-order permutations of the model's own bounding box, never an arbitrary rotation search, so a model that fits only when reoriented is reported as such rather than as a plain failure.

Simplifying and exporting a model

Convert (/tools/convert/) composes two steps against one loaded model: an optional simplification (`simplifyModel`, @voxelspy/analysis) to a triangle-count or reduction-ratio target, and an export (`exportModel`, @voxelspy/importers) to binary STL, ASCII STL, or OBJ. Simplification's own point is not the decimation -- a commodity -- but the certified, measured deviation it reports: the maximum and mean sampled distance between the original and simplified surfaces, in both directions, always shown next to its disclaimer rather than as a bare number, with `targetReached: false` reported plainly rather than hidden when the requested target could not be fully reached.

Export never guesses a unit or axis: format, output unit, and output up-axis are all explicit choices with no default, because neither STL nor OBJ can declare a unit or axis inside the file itself -- every export states that plainly, alongside the exact interpretation a later re-import must declare to recover equivalent geometry. Binary STL's coordinates are IEEE-754 float32, so its round trip is bounded by float32 precision regardless of unit; the text formats (ASCII STL, OBJ) round-trip exactly at millimetre and to ordinary floating-point tolerance at any other unit.

Prefer reproducible evidence

Fixtures, deterministic outputs, hostile-input limits, cancellation, and recovery behavior are acceptance evidence. A convincing render cannot substitute for correct data.