Documentation
Feature generators
Involute gears, ISO metric threads, helices and sheet-metal strips with flat patterns: exact profiles and meshes from a few numbers.
Feature generators
Feature generators turn a few engineering numbers into exact profiles or meshes: an involute gear from module and tooth count, an ISO thread from diameter and pitch, a helix from radius and pitch, a bent strip from a centre line and a thickness. Each is a pure function in packages/core/src/cad; the editor, the assistant and the CAM model call the same function, so all three see the same part.
| Generator | File | Main exports |
|---|---|---|
| Involute spur gear | gear.ts | gearDimensions, gearOutline, MIN_GEAR_TEETH = 6 |
| ISO metric thread | thread.ts (124 lines) | threadSizes, threadProblem, threadTool, threadGroove |
| Helix / coil | helix.ts (41 lines) | coilGeometry, stepsPerTurn, COIL_STEPS_PER_TURN = 32, COIL_MAX_TURNS = 60 |
| Sheet metal | sheet-metal.ts (235 lines) | sheetOutline, developedLength, withHems, flatPatternDrawing, flatPatternDxf |
Involute gears
Pitch radius m·z/2, tip radius pitch + m, root radius pitch − 1.25·m, flanks the involute of the base circle r_p·cos α (ISO 53 / DIN 867). The outline is one counter-clockwise ring about the origin with tooth 0 centred on +X. When the teeth would come to a point before the tip circle (few teeth, a large pressure angle), the tip is pulled in by bisection to where the tooth is still 2 % of a pitch wide.
| Spec | pitch | base | tip | root |
|---|---|---|---|---|
| m 2, z 18, 20° | 18 | 16.914 | 20 | 15.5 |
| m 2, z 12, 20° | 12 | 11.276 | 14 | 9.5 |
| m 2, z 18, 25° | 18 | 16.314 | 20 | 15.5 |
gearOutline({ moduleValue: 2, teeth: 5 })
// RangeError: A gear needs a module > 0 and at least 6 whole teeth
gearOutline({ moduleValue: 2, teeth: 18, pressureAngle: 50 })
// RangeError: The pressure angle must be between 0 and 45 degrees ISO metric threads
A modelled thread is real helical geometry: a core cylinder at the root united with a ridge swept along a helix with the profile kept radial, clipped to the thread length. External threads have their core at d₃ = d − 1.22687·P and a ridge up to d; internal ones are the tool that cuts a tapped hole, core at D₁ = D − 1.08253·P (the tap drill) and a groove out to D. The flank is cut square to the helix and the axial widths are corrected by the cosine of the helix angle so pitch and crest widths are exact.
| Thread | ext. minor d₃ | ext. height h₃ | int. minor D₁ | root width | crest width |
|---|---|---|---|---|---|
| M6 × 1 | 4.7731 | 0.6134 | 4.9175 | 0.8333 | 0.125 |
| M8 × 1.25 | 6.4664 | 0.7668 | 6.6468 | 1.0417 | 0.1563 |
| M10 × 1.5 | 8.1597 | 0.9201 | 8.3762 | 1.25 | 0.1875 |
| M12 × 1.75 | 9.853 | 1.0735 | 10.1056 | 1.4583 | 0.2188 |
Values are threadSizes(d, P, internal) output. Heights are 0.61343·P (external) and 0.54127·P (internal); the crest is P/8.
threadProblem({ diameter: 6, pitch: 4, length: 10, internal: false })
// "A pitch of 4 mm is too coarse for a 6 mm thread" (pitch > d/2)
threadProblem({ diameter: 6, pitch: 0.1, length: 10, internal: false })
// "A thread has at most 58 turns (this one is 100.0 long: 10 mm at a pitch of 0.1 mm)"
threadProblem({ diameter: 6, pitch: 1, length: 10, internal: false }) // undefined: buildable The 58-turn limit is COIL_MAX_TURNS − 2: the ridge starts one pitch before the thread and ends one after, so the flat end cuts meet the full profile.
Helices
coilGeometry returns the centre line and the first profile ring of a wire wound about Z, for sweepSolid. Points per turn follow from the radius so chords stay within 0.01 mm of the true helix: stepsPerTurn(r) = clamp(⌈π / acos(1 − 0.01/r)⌉, 32, 128).
| radius | stepsPerTurn |
|---|---|
| 1 | 32 |
| 5 | 50 |
| 50 | 128 |
Sheet metal
A sheet-metal profile is a centre line thickened to a strip of constant thickness, with the material on the left, right or both sides, and inside bend radius r on every corner. developedLength unbends it with a K-factor (default 0.44): each bend contributes (r + K·t)·θ and each straight run loses the setback of its neighbouring bends.
{"straight":70,
"bends":[{"angle":1.5707963267948966,"allowance":6.094689747964199},
{"angle":1.5707963267948966,"allowance":6.094689747964199}],
"length":82.18937949592839} | Segment | Flat-pattern span, mm |
|---|---|
| flat | 0 → 25 |
| bend 90° | 25 → 31.095 (allowance 6.0947) |
| flat | 31.095 → 61.095 |
| bend 90° | 61.095 → 67.189 |
| flat | 67.189 → 82.189 |
Check: (3 + 0.44 × 2) × π/2 = 6.0947 per bend, and 70 + 2 × 6.0947 = 82.189 mm.
Troubleshooting
| Message | Fix |
|---|---|
| A gear needs a module > 0 and at least 6 whole teeth | use z ≥ 6 and an integer tooth count |
| The pressure angle must be between 0 and 45 degrees | 20° is standard; 14.5° and 25° are common alternatives |
| A pitch of P mm is too coarse for a D mm thread | pitch must be at most half the diameter |
| A thread has at most 58 turns | split the thread into shorter features, or use a coarser pitch |
| The sheet thickness must be positive (it is 0) | pass a thickness > 0 |
| The path is too tight for this thickness: its offset curve breaks up | increase the bend radius or reduce the thickness |