# ErgoPoint42 TrackPoint clearance caps

These eight printable STL files adapt the actual **KLP Lamé MX-size, MX-stem** keycaps by **Nikita Shirokov / braindefender**, retaining their sculpted top and MX socket. Modifications: sculpt orientation, a vertical corner relief where needed, and reflection for the mirrored right half. They are prototype CAD parts, not physically validated caps.

Original source: [KLP Lamé](https://github.com/braindefender/KLP-Lame-Keycaps/tree/4a67a824232d3054c61599ea047c56a340faaba2), pinned commit `4a67a824232d3054c61599ea047c56a340faaba2`. Original and adapted models are **CC BY-SA 4.0**. Preserve this attribution, identify changes and retain the applicable share-alike license when distributing adaptations. The full license is in `LICENSE-CC-BY-SA-4.0.txt`. Adapted for Curt's ErgoPoint42 project by Codex on 2026-09-07.

## Files and placement

All dimensions are millimetres. Each output stays centered on its own switch stem. Geometry already has the required sculpt orientation; **translate these eight special caps to the corresponding switch center without another rotation**. The right STL is the left STL reflected across its local YZ plane, preserving the symmetric MX-cross attachment geometry.

| Left file | Position and profile | Corresponding right file |
|---|---|---|
| `L04_R_trackpoint_clearance.stl` | R, Normal Tilted, high side toward rear | `R04_U_trackpoint_clearance.stl` |
| `L05_T_trackpoint_clearance.stl` | T, Normal Tilted, high side toward rear | `R05_Y_trackpoint_clearance.stl` |
| `L09_F_trackpoint_clearance.stl` | F, flat Saddle Homing | `R09_J_trackpoint_clearance.stl` |
| `L10_G_trackpoint_clearance.stl` | G, flat Saddle | `R10_H_trackpoint_clearance.stl` |

Rear means **negative y in the board coordinate system**. The author’s tilted mesh has its high side at positive y, so the R/T meshes have an existing, baked 180° rotation around z. The tilt itself remains the source’s authored 15° sculpt. A Blender scene using `world_y = -board_y` must reflect the complete board geometry consistently; do not add another 180° cap rotation afterward.

`manifest.json` contains exact source/output hashes, key centers, per-cap TrackPoint offsets, measured mesh bounds, socket datums and validation results. `trackpoint_cap_preview.blend` and its PNG show the actual four exported left meshes with a nominal 6 mm burgundy nub for inspection. Nub color and displayed height are presentation choices, not additional manufactured parts.

## Complete pair cap quantities

For the selected 42-key sculpt profile, print one of each of the eight adapted files above, plus 16 unmodified MX-size Normal Tilted caps, 6 unmodified MX-size Saddle caps, and 12 unmodified MX-size Thumb caps. This totals 42. The unmodified STLs are preserved in `research/keyball-reference/reference-assets/`. Rotate the remaining top-row tilted caps 180° around z for high-rear orientation; keep the bottom letter row tilted caps in the source orientation for high-front orientation. Thumb-position rotations follow the mechanical layout. These stock-profile counts assume the two black homing positions are F/J and use the adapted homing files.

## Clearance result

The requested TrackPoint reference is **(66.675, 13.275) mm** in the left layout. The cutter is a vertical cylinder with minimum radius **3.4 mm**, leaving **0.4 mm radial / 0.8 mm diametral clearance** around a nominal 6 mm pointing cap. The cylinder uses 256 segments, circumscribed so its flat faces do not reduce the specified minimum radius. Maximum outward faceting error is about 0.00026 mm.

Because the two finger columns are staggered, only **T and F** need material removal. R and G already clear that cylinder. Their exported meshes intentionally retain the original geometry after orientation.

| Left position | Removed material mm³ | Minimum clearance to nominal 6 mm nub |
|---|---:|---:|
| R | 0 | 0.526 mm |
| T | 12.556 | 0.400 mm |
| F | 7.153 | 0.400 mm |
| G | 0 | 0.590 mm |

All eight exported STLs were reopened and verified as watertight, consistently oriented, positive-volume, single connected solids. Boolean comparison confirms no stem material changed in the central 6 × 6 mm region. The cutter stays at least **4.975 mm** outside a conservative radius enclosing that stem region. These are shallow skirt/corner reliefs, not cuts into the mounting socket.

The complete specified left 21-cap profile was also checked: high-rear Normal Tilted top row, flat Saddle home row with Saddle Homing on F, high-front Normal Tilted bottom letter row, and flat Thumb caps on the additional bottom/three thumb positions. The minimum separation of projected cap convex hulls is **1.057 mm** across all **210 pairs**. Because their xy projections are disjoint, independent vertical depression over the complete **0–3.3 mm travel** cannot cause cap-to-cap contact. The vertical relief bore likewise clears the nominal nub through this continuous motion. Right-half reflection preserves these distances.

This check does not include lateral switch wobble, print shrinkage, soft-nub deformation, incorrect orientation, switch housing fit, or variation in a real supplier's rubber cap. Print and fit the four-cap cluster before committing to a complete cap run.

## Correct vertical assembly datum

Do not place all source STL origins at one z value. Direct triangle intersection through the stem center gives:

| Profile | Socket roof z in STL | Socket bottom z in STL | Roof-to-bottom depth |
|---|---:|---:|---:|
| Normal / Saddle / Saddle Homing / Thumb | 3.300 mm | 0 mm | 3.300 mm |
| Normal Tilted | 2.800 mm | −0.500 mm | 3.300 mm |

Assuming a PCB top at z=3.8 mm and switch stem top 9.0 mm above that PCB, the assembled stem top is z=12.8 mm. The correct **tentative** cap origins are therefore **z=9.5 mm for flat caps** and **z=10.0 mm for tilted caps**. Tilted peak height becomes approximately **18.841 mm**, and flat Saddle Homing peak approximately **15.090 mm**, before external feet. The 0.6 mm external feet raise the overall tilted peak to about 19.441 mm. The latest electronics review found a related manufacturer family drawing implying 8.6 mm above PCB; 9.0 mm is the conservative P0 assumption for the retail Whale variant until measured. These values are model-derived; the switch's actual stem height, insertion fit and round dust-wall clearance still need a sample. The historical “3.3 mm insertion” description was a depth, not a common STL roof coordinate.

## Reproduce

From the repository root:

```bash
uv venv tools/caps/.venv
uv pip install --python tools/caps/.venv/bin/python -r tools/caps/requirements.txt
tools/caps/.venv/bin/python tools/caps/generate_trackpoint_caps.py
blender --background --python tools/caps/render_caps.py
```

The generator reads only the preserved reference assets and layout, then writes this directory. `tools/caps/qa_assembly.py` separately compares these caps with the assembly meshes and writes `assembly_qa.json`. The final check passes for the stored nominal geometry; `ASSEMBLY_QA.md` describes its coverage and remaining physical measurements. `tools/caps/qa_pcb_alignment.py`, run with a Python environment containing KiCad's `pcbnew`, compares both actual boards with the mechanical layout and writes `pcb_mechanical_alignment.json`.
