You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: MANUAL.md
+46-17Lines changed: 46 additions & 17 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -77,16 +77,22 @@ default (or an oversize internal **cutter** with `internal=true`).
77
77
|`hand`|`"right"`|`"right"` or `"left"`. |
78
78
|`clearance`|`0.4`|**Total diametral** FDM fit gap (mm); external shrinks `clearance/2`, internal grows `clearance/2`. |
79
79
|`fit`|`undef`| Optional **ISO 965** tolerance *position* (allowance): external `"e"/"f"/"g"/"h"` or internal `"G"/"H"` (also accepts `"6g"`,`"6H"`,…; the grade digit is ignored — band width is not modelled). Applied on top of `clearance`. Case must match `internal`. This is nominal intent; M8 `6g` is only about 0.029 mm diametral shift, so tune `clearance` for real FDM fit. |
|`angle`|`60`| Included flank angle (degrees). 60 = ISO/UN; e.g. 55 ≈ Whitworth. Kept for backward compatibility. |
82
+
|`side_angle`|`undef`| Half-angle measured from the plane perpendicular to the axis; `30` gives a 60-degree included V. Overrides `angle` for V-height derivation. |
83
+
|`thread_size`|`pitch`| Axial width of one tooth/profile, independent of pitch. Must be `<= pitch`. |
84
+
|`rect_ratio`|`1` square, `1/3` rectangle | Rectangular radial depth as a fraction of `thread_size`. |
85
+
|`groove`|`false`| Invert the profile into a helical channel cut into the cylinder surface. |
openscad -o demo.stl tq_threads_heavy_tests.scad # heavy: full visual grid
450
470
```
451
471
```powershell
452
-
pwsh scripts/render-tests.ps1 # fast suite, with manifold-warning check
453
-
pwsh scripts/render-tests.ps1 -Heavy # add the heavy grid
472
+
powershell -ExecutionPolicy Bypass -File scripts\render_proof.ps1 # full proof
473
+
powershell -ExecutionPolicy Bypass -File scripts\render_proof.ps1 -Heavy # add heavy grid
454
474
```
455
-
The fast suite also runs **compile-time assertions** that every required preset
456
-
(M2…M64) resolves to the correct pitch. CI (`.github/workflows/ci.yml`) runs the
457
-
fast suite on every push.
475
+
The proof captures both stdout and stderr from OpenSCAD, runs negative/assert
476
+
tests, and checks every positive STL with the independent mesh edge-pairing
477
+
checker. `scripts/render-tests.ps1` remains only as a deprecated compatibility
478
+
alias. CI (`.github/workflows/ci.yml`) runs the same proof on every push.
458
479
459
480
---
460
481
@@ -463,6 +484,10 @@ fast suite on every push.
463
484
| Symptom | Cause / fix |
464
485
|---|---|
465
486
|`assert` failure on render | Read the message — it names the bad parameter. |
487
+
|`thread_size must be <= pitch`| Narrow-tooth profiles can be smaller than pitch, but a single tooth cannot exceed one pitch. |
488
+
|`side_angle must be > 0 and < 90`|`side_angle` is the half-angle from the plane perpendicular to the thread axis; use `30` for a conventional 60-degree V. |
489
+
|`rect_ratio must be > 0`| Rectangular depth is `thread_size * rect_ratio`; use `1` for square or about `1/3` for shallow rectangular threads. |
490
+
|`lead_ends must be none/start/end/both`| Use `lead_ends` for the common cases, or the older `lead_in` / `lead_out` booleans for compatibility. |
466
491
| Thread too tight / loose when printed | Adjust `clearance` (see [FDM](#fdm-deep-dive)); recalibrate. |
|**First-principles thread geometry**|`side_angle`, `thread_size`, square/rectangular profiles, groove inversion | DERIVED/APPROX | Generic printable forms implemented from the behavioral spec and trig; no standards fit class claimed. |
21
22
|**ISO 261** (general plan) | metric coarse + fine major Ø & pitch (presets) | EXACT | Nominal diameter/pitch series. Verified by `tq_presets_selfcheck()` + cross-checked online. |
22
23
|**ISO 262** (selected sizes) | preferred metric subset | EXACT | Informs which presets are "common". |
23
24
|**ISO 965-1 §13.1** (tolerances) |`fit=` fundamental deviation (allowance) | DERIVED (exact formula) | external e/f/g/h, internal G/H. **Position only**, not the grade/band. Formula value (unrounded); ISO tables round to whole µm. NOT metrology-grade. |
@@ -28,10 +29,31 @@ Fidelity classes: **EXACT** (nominal standard value used verbatim) ·
28
29
|**ISO 4762** (socket head cap screws) |`tq_shcs_head` (dk,k), `tq_hex_key_af`| EXACT (listed) / APPROX (fallback) ||
|**ASME B1.20.1** (NPT) | taper*context* only |—|Linear `taper` is generic; NPT's truncated profile is NOT implemented. |
32
+
|**ASME B1.20.1** (NPT) | taper-rate context only |DERIVED|`tq_npt_taper_rate()` returns the published 1:16 diameter taper reference. NPT's truncated profile is NOT implemented. |
0 commit comments