tine knobs cleanup: comments say 'at' the reach, the bead width is likely, TINE_REACH in the real-parts test, Prusa port notes the old name (review)

This commit is contained in:
matthewtrahan authored and Matthew Trahan committed 2026-10-03 13:52:03 -05:00
1 parent e05199e409
commit ec7475a9ea
5 files changed
+10 -10

No files matched your search

+1 -1
View File
@@ -11,7 +11,7 @@ flat directory with a single menu entry:
runs from a low tip on the plate up to the top of a straight back edge, **0.2 mm under the
part**, on a thin foot with a round back end. A **comb of tines** runs along the slope: one-layer
horizontal nubs, one bead (0.5 mm) wide, each top on the print preset's layer grid, that
reach across the gap and **0.5 mm into the part** at mid-layer (`PROP.tineBite`), so each prints as one
reach across the gap and **0.5 mm into the part** at mid-layer (the site's old `PROP.tineBite`; the site's tines now stop at the surface), so each prints as one
strand that fuses in and snaps clean (`docs/FIN-SPEC.md`). The top of the slope ends in a
short flat (1.2 mm, a little more when steep), never a point. Params: **Slope Angle** (20–70°, default 45), **Fin Height**,
a **Gripping Tines** toggle, and **Tine Spacing** (default 6 mm, the sway braces' printed
@@ -53,7 +53,7 @@ local BASE_H = 0.6 -- foot thickness, snapped to whole layers (PROP.bas
local BASE_W = 9.0 -- foot width across the fin [mm]
local BASE_PAD = 3.0 -- foot runs this far past the back edge [mm]
local GAP = 0.2 -- slope to part clearance, square to the slope (PROP.gap) [mm]
local BITE = 0.5 -- how far a tine reaches horizontally into the part (PROP.tineBite) [mm]
local BITE = 0.5 -- how far a tine reaches horizontally into the part (the site's old PROP.tineBite; its tines now stop at the surface, local issue 028) [mm]
local TINE_GRIP = 0.4 -- how far a tine sinks back into the fin [mm]
local TINE_W = 0.5 -- tine width: one nozzle bead (PROP.tineW) [mm]
local MIN_STEP = 1.0 -- Tine Spacing never tighter than this [mm]
+2 -2
View File
@@ -16,7 +16,7 @@
import { loadModel, analyze, fins, prop, insidePart, nearestFaceInwardH, rotX, rotY, assert } from './_util.js';
const TINE_BITE = prop.PROP.tineReach; // how far the nub reaches in -- read from source, don't drift
const TINE_REACH = prop.PROP.tineReach; // how far a tine looks for the part -- read from source, don't drift
const CASES = [
['plate', rotX(45)], ['plate', rotY(40)], ['plate', rotY(-40)],
@@ -36,7 +36,7 @@ Deno.test('tines on real parts: every tine bites INTO the nearest face, none lie
const caps = globalThis.__TINECAP;
for (const c of caps) {
total++;
const bx = c.x + c.biteX * TINE_BITE, by = c.y + c.biteY * TINE_BITE;
const bx = c.x + c.biteX * TINE_REACH, by = c.y + c.biteY * TINE_REACH;
if (!insidePart(topo, rot, res.offset, bx, by, c.z)) { noGrip++; airCases.add(name); }
const inw = nearestFaceInwardH(topo, rot, res.offset, [c.x, c.y, c.z]);
if (inw) {
+3 -3
View File
@@ -189,14 +189,14 @@ export const PROP = {
// built the tine `th` (1.0mm) wide, ~2x spec, a fat divot Matthew caught by eye.
tineW: 0.5,
// (A 'point' tip and a tineWidth knob were tried on the tine coupon, 2026-10-03:
// no visible difference -- a 0.3-0.5 wide tine or a point all print as about one
// bead -- so both knobs are gone. prototype/calibration/README.md tine/ v1.)
// no visible difference -- a 0.3-0.5 wide tine or a point likely all print as about
// one bead -- so both knobs are gone. prototype/calibration/README.md tine/ v1.)
// Tines per wall, EXACT, overriding spacing and the minGripTines floor: the comb is
// spaced wall-length / n. 0 = off (the default; spacing rules decide). Calibration
// knob (tunables.tinesPerWall), the tine coupon's how-few-still-hold row.
tinesPerWall: 0,
tineReach: 0.5, // how far out a tine looks for the part, horizontally: a tine is
// placed only if solid lies within this reach (the slope gate is
// placed only if solid lies at this reach (the slope gate is
// gap/reach), and kissEnds searches up to 2x it for the surface the
// tine's end stops on (#168: no tine runs into the part). Was
// `tineBite`, when tines ran this far INTO the part. Shrinking it
+3 -3
View File
@@ -144,14 +144,14 @@ export function tineStepFor(density) {
* through those four corners, so on a sloped or curved underside the end leans with
* the surface and no part of the tine sits inside the part.
*
* A tine used to run the full reach (0.5, then `tineBite`) on into the part. A slicer unions that
* A tine used to run full `tineReach` (then called `tineBite`) on into the part. A slicer unions that
* buried stretch away (the site's 3MF and STL put part and supports in one object),
* so the print is the same; the tine just stops poking through, and is ready for an
* export that keeps the two apart (local issue 027). Placement is unchanged: the
* tine still has to reach solid within `tineReach`.
*
* Per corner: no solid within reach on that line and height -> the full bite (the
* old shape); solid already back over the wall end -> TRIM_MIN past it.
* Per corner: no solid within reach on that line and height -> the full tineReach
* (the old shape); solid already back over the wall end -> TRIM_MIN past it.
* Returns { bot: [left, right], top: [...] }.
*/
const TRIM_KISS = 0.01, TRIM_MIN = 0.05, TRIM_Z = 0.01;