diff --git a/plugins/prusa/README.md b/plugins/prusa/README.md index a6f156e..45119c7 100644 --- a/plugins/prusa/README.md +++ b/plugins/prusa/README.md @@ -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 diff --git a/plugins/prusa/com.printfins.support-fins/add_fin.lua b/plugins/prusa/com.printfins.support-fins/add_fin.lua index 781d73f..09360e2 100644 --- a/plugins/prusa/com.printfins.support-fins/add_fin.lua +++ b/plugins/prusa/com.printfins.support-fins/add_fin.lua @@ -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] diff --git a/tests/tines_realparts.test.js b/tests/tines_realparts.test.js index 6f4abd9..fd4c4b1 100644 --- a/tests/tines_realparts.test.js +++ b/tests/tines_realparts.test.js @@ -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) { diff --git a/web/prop/config.js b/web/prop/config.js index f81daba..7b0ef3d 100644 --- a/web/prop/config.js +++ b/web/prop/config.js @@ -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 diff --git a/web/prop/tines.js b/web/prop/tines.js index 280fe0e..4bf11d2 100644 --- a/web/prop/tines.js +++ b/web/prop/tines.js @@ -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;