mirror of
https://github.com/gittrahan/support-fins.git
synced 2026-10-19 02:10:52 -05:00
comments: point prop.js mentions at the web/prop/ module that owns the code
finworker, solids, cutout, fins, draw, tails.test, check_stl, the Onshape port and PERFORMANCE-SPEC named prop.js for things that now live in prop/config.js, sweep.js, contact.js, surface.js or clearance.js. The dated notes in ROADMAP and IMPLEMENTATION-PLAN are left as written.
This commit is contained in:
1 parent
fdec9c9dce
commit
f5aa212db7
9 files changed
+17
-16
No files matched your search
@@ -12,9 +12,10 @@ is pure mesh math (no DOM/three.js), so it profiles and runs headless with Deno.
|
||||
|
||||
- `web/fins.js` — `buildFins()` entry; auto mode recurses to `mode:'prop'`, then
|
||||
adds wedges (`buildPerpFins`) and the bed pad (`buildPad`).
|
||||
- `web/prop.js` — `buildProps()` and the per-wall pipeline: `splitRegion`,
|
||||
`patchTracks`, `sweep`, `settleTop`/`contourTop`/`lowerSag`, `stationIsClear`,
|
||||
`stationCertified`, `emitTines`, `surfaceZAt` (already grid-accelerated).
|
||||
- `web/prop.js` — `buildProps()`, which drives the per-wall pipeline in `web/prop/`:
|
||||
`splitRegion`/`patchTracks` (tracks.js), `sweep` (sweep.js),
|
||||
`settleTop`/`contourTop`/`lowerSag` (contact.js), `stationIsClear`/`stationCertified`
|
||||
(clearance.js), `emitTines` (tines.js), `surfaceZAt` (surface.js, already grid-accelerated).
|
||||
- `web/inside.js` — `insidePart`, `nearestPart` (both grid-accelerated, 64² YZ grid).
|
||||
|
||||
Run headless: `deno run --allow-read <script.js>` (see profiling harness below).
|
||||
|
||||
@@ -174,7 +174,7 @@ const BED_EPS = 0.35 * millimeter; // a face this close to the pl
|
||||
const MIN_REGION_AREA = 12.0 * millimeter ^ 2; // ignore slivers
|
||||
const ANGLE_EPS = 1e-4; // a face exactly on the threshold is self-supporting
|
||||
|
||||
// Overhang prop -- web/prop.js PROP
|
||||
// Overhang prop -- web/prop/config.js PROP
|
||||
const PROP_TH = 1.0 * millimeter; // stem thickness
|
||||
const PROP_TIP = 0.6 * millimeter; // contact tip thickness
|
||||
const PROP_TIP_H = 1.5 * millimeter; // height of the necked tip
|
||||
|
||||
@@ -28,7 +28,7 @@ TINE_MAX_H = 0.45 # mm; a tine is one layer (tineH 0.2) -- two layers is alrea
|
||||
STANDOFF = 0.2
|
||||
# The project's own non-fusing clearance, same number as the breakaway gap: if
|
||||
# 0.2mm is enough for the part to bridge over the top without welding, it is
|
||||
# enough beside a flank. prop.js targets 0.35 so there is margin to lose.
|
||||
# enough beside a flank. PROP.sideClear targets 0.35 so there is margin to lose.
|
||||
FLANK_MIN = 0.20
|
||||
|
||||
# Mirrors web/overhangs.js constant-for-constant, same as spike_overhangs.py.
|
||||
@@ -164,7 +164,7 @@ def check(case):
|
||||
pq = trimesh.proximity.ProximityQuery(part)
|
||||
|
||||
walls = [b for b in added if b.volume > WALL_MIN_VOL]
|
||||
# A tine is ONE LAYER tall by design (prop.js tineH) -- so small AND flat.
|
||||
# A tine is ONE LAYER tall by design (PROP.tineH) -- so small AND flat.
|
||||
# Volume alone misread a short squat wall (a 5mm low-ledge wall is ~5mm3,
|
||||
# ~1mm tall) as a tine that "bites nothing, detached from wall" (torus X45).
|
||||
# Anything small but taller than a tine is wall-like: it joins `walls` for
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
// Low TAILS: a tall wall now runs on down the slope to the squat floor instead of
|
||||
// stopping at the first station >= minHeight (see prop.js withLowTails). That fix
|
||||
// stopping at the first station >= minHeight (see prop/clearance.js withLowTails). That fix
|
||||
// reached the part's bottom edge on the first try, but a sweep of every model x
|
||||
// pose x coverage against the pre-tail build turned up six side effects -- each
|
||||
// pinned here so it can't creep back. Values are what the pre-tail build did; the
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
* WALL CUTOUTS (issue #34) -- holes through a breakaway wall to save filament.
|
||||
*
|
||||
* prop.js sweeps each wall as per-station cross-sections and hands them here;
|
||||
* prop/sweep.js sweeps each wall as per-station cross-sections and hands them here;
|
||||
* cutWall either emits the wall with holes or returns false, and the caller
|
||||
* emits it solid as before. Everything is in the wall's own (s, z) plane: s runs
|
||||
* along the wall, z up. The pattern choice lives here (CUT.pattern), set by the
|
||||
@@ -313,7 +313,7 @@ function stripSolid(s0, s1, zb, zt, obst) {
|
||||
* Emit `st` (per-station wall data from sweep / sweepBetween) as a wall with
|
||||
* CUT.pattern holes, or return false to have the caller emit its solid ribbon.
|
||||
* `full` is the caller's solid sections, reused for the end posts; `wall` the
|
||||
* wall's own numbers (prop.js PROP: th, tip, minStations).
|
||||
* wall's own numbers (prop/config.js PROP: th, tip, minStations).
|
||||
*/
|
||||
export function cutWall(st, full, out, wall) {
|
||||
const kind = CUT.pattern;
|
||||
|
||||
+3
-3
@@ -13,7 +13,7 @@
|
||||
*
|
||||
* Geometry only. The interaction (picking the two endpoints, live preview, undo)
|
||||
* lives in ui/walls.js; this module turns two surface points plus the part's triangles
|
||||
* into a watertight wall, reusing prop.js's proven `sweep` and its three
|
||||
* into a watertight wall, reusing prop/sweep.js's proven `sweep` and its three
|
||||
* line-settling passes verbatim.
|
||||
*/
|
||||
import { PROP, PART_BAND, sweep, sweepBetween, floorLine, contourTop, lowerSag, settleTop, emitTines, tineStepFor } from './prop.js';
|
||||
@@ -21,7 +21,7 @@ import { PROP, PART_BAND, sweep, sweepBetween, floorLine, contourTop, lowerSag,
|
||||
/**
|
||||
* Every surface height directly above (x, y), as a list.
|
||||
*
|
||||
* `surfaceZAt` in prop.js returns only the LOWEST, which is what an auto-placer
|
||||
* `surfaceZAt` in prop/surface.js returns only the LOWEST, which is what an auto-placer
|
||||
* wants (the underside a wall props to). A hand-drawn wall instead wants the
|
||||
* surface the user actually clicked, so this keeps them all and the caller picks
|
||||
* the one nearest the line the user drew -- otherwise a wall under a shallow
|
||||
@@ -48,7 +48,7 @@ function surfaceZsAt(tris, x, y) {
|
||||
* The contact polyline for a wall drawn from `a` to `b` (both surface points in
|
||||
* PRINT space, [x, y, z]). Straight in XY by construction. Each station's height
|
||||
* is the part surface nearest the line the user drew -- not the global lowest,
|
||||
* which would jump to another feature -- and then the three prop.js passes pull
|
||||
* which would jump to another feature -- and then the three prop/contact.js passes pull
|
||||
* the top to a clean `gap` below the part exactly as the auto-placer does.
|
||||
*/
|
||||
export function drawnLine(a, b, tris, step = PROP.stationStep, band = Infinity) {
|
||||
|
||||
+2
-2
@@ -37,7 +37,7 @@ export const FIN = {
|
||||
// --- from docs/FIN-SPEC.md, stated on camera. Do not "tune" these. ---
|
||||
gap: 0.2, // standoff from the part face
|
||||
tineH: 0.2, // = slicer layer height: a tine must be ONE layer so it prints
|
||||
// as a single continuous bead (see prop.js tineH / FIN-SPEC)
|
||||
// as a single continuous bead (see prop/config.js tineH / FIN-SPEC)
|
||||
tineW: 0.5, // between one nozzle pass (0.4) and out-and-back (0.8)
|
||||
baseH: 1.0, // base disc thickness
|
||||
rowsLow: 8, // tine rows in the dense zone -- "7 or 8 low down"
|
||||
@@ -1522,7 +1522,7 @@ function propServesPatch(p, props) {
|
||||
const m = 8;
|
||||
for (const q of props) {
|
||||
for (const pt of (q.line ?? [])) {
|
||||
// A tall wall's low TAIL (prop.js withLowTails) runs down into the corner
|
||||
// A tall wall's low TAIL (prop/clearance.js withLowTails) runs down into the corner
|
||||
// where this face may meet the one the wall serves; its sub-minHeight tip
|
||||
// landing in the margin is not a wall under this face (it dropped the wedge
|
||||
// on a steep cube face). Squat props are low by design and still count.
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
// Off-main-thread support generation.
|
||||
//
|
||||
// buildFins -- and everything it imports (prop.js, inside.js, planes.js,
|
||||
// buildFins -- and everything it imports (prop.js + web/prop/, inside.js, planes.js,
|
||||
// overhangs.js) -- is pure mesh math with no DOM or three.js dependency; that is
|
||||
// exactly why prototype/verify_fins.js can run it headless. So the whole build
|
||||
// moves into a Worker. On a large or badly-posed part a single build can take a
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* Closed-solid emitters shared by the wall builders (prop.js) and the wall
|
||||
* Closed-solid emitters shared by the wall builders (web/prop/) and the wall
|
||||
* cutouts (cutout.js). Pure mesh math: each takes cross-sections or a polygon
|
||||
* and pushes outward-wound triangles, as vertex triples, onto `out`.
|
||||
*/
|
||||
|
||||
Reference in new issue
Block a user