F1 in Schools · model block fixture

SLOTRAIL-223

Four flip-jigs for machining the 223 × 65 × 50 mm model block — one printed and screwed, one machined from 6061, one with no hardware at all, and one that turns the block on a lever. All four use the block's own tether-line groove as the datum, so the top and the underside meet on the mid-line instead of meeting somewhere near it.

4 fixtures, one datum chain
74 / 77 / 223 seat · mirror · stop
223 × 65 × 50 mm block, 6 × 6 groove
prints without supports · or mill it from 6061

01 — the idea

One accurate feature on the block. Use it.

The block is 223 × 65 × 50 mm of polyurethane tooling board. Every dimension on it carries a 1–2 % tolerance — up to half a millimetre on the thickness. A rigid pocket that grips one block will not accept the next, and a set of shims falls out the moment you pick the block up.

But the block does arrive with one feature you can trust: a 6.00 × 6.00 mm groove down the centre of its underside — the tether-line channel — machined straight and parallel over the full 223 mm.

So the groove becomes the datum. A 6 mm square rail sits in it, and the block rests on that rail by the ceiling of the groove, inside the groove, where nothing else can touch it.

Flip the block 180° about the rail and the groove goes back over the same rail. Its height above the machine table now differs by exactly the rail's height — 6.00 mm you can measure with calipers — and not by the foam's thickness, which you cannot. That single fact is why the two halves line up.

sectioned view of the jig
Sectioned at y = −1.5 mm: the rail (blue) runs through both towers, the block sits on it by its groove, and the collar (amber) pushes the block's end face against the fixed stop at the far end. Nothing touches the sides, the top or the surface being machined.

02 — datums

Six degrees of freedom, three contacts

directionlocated byrepeatability
Xfixed stop face + rail collar±0.05
Ygroove walls on the rail±0.05
Z — OP 1groove ceiling on the rail's top face±0.05
Z — OP 2groove ceiling on the rail's bottom face±0.05
roll · yaw · pitch223 mm of groove on 277 mm of rail±0.05
The fixture never touches the car. Contact is confined to the groove (which the car keeps) and the outer ~12 mm at each end (which is scrap). Every surface you machine is free of clamps, and the block lifts straight up off the rail — the groove is a prismatic fit.
section A-A
Section A–A through the rail axis. Both operations are mirror images about the rail's mid-height (z = 77) — that is the whole trick.

03 — print

Five parts, no supports (measured in §10)

the printed parts
Left bed half, right bed half, one rail half, the split collar. The second rail half is the same print with the lap on the other side.
filepartqtyprint size (mm)orientation
bed_left.stlLeft bed half — foot + tower + rail socket1150 × 110 × 92.3as exported, foot on the bed
bed_right.stlRight bed half — foot + tower + fixed stop face1135 × 110 × 92.3as exported, foot on the bed
rail_a.stlRail, left half (lower lap)1144 × 5.9 × 6.0flat, 5.9 wide × 6.0 tall
rail_b.stlRail, right half (upper lap)1153 × 5.9 × 6.0flipped 180° about X — lap on the bed
collar.stlSplit collar — X clamp on the rail126 × 22 × 12as exported, bore vertical

Print settings

Hardware

M4 × 8 socket cap — rail clamp (one over each socket)2
M4 × 16 socket cap — collar1
M6 × 20 + T-nuts — clamp the bed to the table8
Every head sits 0.3 mm inside its outer face — the printed pockets do that for you, so no screw can protrude into the tool's way
Ø8 × 25 mm wooden dowel — bed joint2
CA glue1

04 — assembly

Fifteen minutes, once

exploded assembly
Two bed halves joined at the middle by two dowels; two rail halves glued into one 277 mm bar; one collar.
  1. Join the bed. The two half-round notches at the joint face make one Ø8 mm hole. Put a drop of CA in each, press the dowels in, slide the halves together and clamp them flat while the glue sets. Check it on a flat table — if it rocks, sand the bottom until it doesn't. The two towers now sit 223 mm apart, exactly.
  2. Thread the collar on. It is a closed clamp, so it has to go onto rail_a from the inner end before anything is glued. Slide it on and leave it loose.
  3. Insert the rails. Push rail_a's outer end into the left tower's socket until it bottoms out, and rail_b into the right tower's socket the same way. They meet in the middle over a 20 mm half-lap.
  4. Glue the lap. Sight along the rail or roll it on a flat table until the two halves are flush, then CA the lap. It is now one 277 mm bar held at both ends — straightness matters, length does not.
  5. Tighten the rail clamps. One M4 over each socket, finger tight plus a quarter turn. The tower is not tapped: the screw cuts its own thread in a 3.3 mm pilot, so the first turn is stiff and the second is easy — that is normal, and it is why the hole is a pilot and not a 3.6 clearance hole. It presses the rail onto the socket floor, and that floor is the Z datum. Do not overtighten — it is printed plastic.
  6. Check the fit. Slide the block's groove over the rail. It should drop on with a light push and no rattle. If it rattles, see Troubleshooting — one turn of masking tape on the rail fixes it and is allowed to stay.

05 — machine setup

Z0 is the rail, never the foam

Bolt the bed to the table through the eight counterbored slots. Once it is clamped it does not move again — the whole point is that both operations run on the same clamped fixture.

X: the right tower's inner face is the stop. Push the block against it.
Z: touch off on the rail's top face. That is Z0, in both operations.

Then measure two things with calipers and write them down:

s = groove depth in your block (measure across the groove at both ends, average)
h = rail height (measure at three places, average)
with Z0 on the rail's top faceOP 1OP 2
block bottom face sits at Z =−ss − h
block top face sits at Z =−s + 50s − h − 50
typical (s = h = 6.00)−6.00 / +44.000.00 / −50.00
rail top face0.000.00
CAM, with zb measured from the block's bottom face:
OP 1   Z = zb − s
OP 2   Z = (s − h) − zb

Set OP 2 up by rotating the stock 180° about X. For a left–right symmetric car that is identical to mirroring about Z = −h/2 (i.e. the rail's mid-plane put at Z = −3 with a 6 mm rail).
Do not assume s = 6.00. A block whose groove is 6.2 mm deep with a 6.00 mm rail puts the two halves 0.4 mm out of register — that is a step you can feel with a fingernail. Two caliper readings remove it completely.

06 — the two operations

Top, flip, underside

OP 1

OP 1 — top half

Block in its shipping orientation, groove down, sitting on the rail. Machine the nose, cockpit, halo bosses and wing mounts — everything above zb ≈ 26.

The block's bottom face hangs 6 mm below the rail's top face, 62 mm above the bed plate, so nothing under the work gets in the way. The only obstacles are the two towers, standing 12 mm above the rail's top face.

OP 2

OP 2 — underside

Loosen the collar, lift the block straight up off the rail, turn it 180° about its long axis, drop it back on the rail, push it against the stop, slide the collar to the end face and tighten.

The underside now faces up. Machine everything except the middle: the rail is still sitting in the groove.

The 6 mm channel has to survive OP 2. The rail is in it — cut the groove's walls away and the block loses its datum and drops onto the tool. Machine everything else as deep as the design wants; the two walls of that channel are the only protected strip. This is not a compromise: the tether line needs a channel anyway.

Use a Ø3 mm ball nose for the fine detail and keep at least 14 mm of tool stickout (18 mm gives full clearance) so the collet nut clears the towers when you machine within 10 mm of either end.

07 — rules your car design has to follow

Four numbers

rulewhy
Length ≤ 203 mm, car kept ≥ 10 mm inside each end of the block the end bands are the only stock the fixture is allowed to touch — and the regulations cap the body at 203 mm of the 223 mm block anyway
Keep the 6 mm channel along the whole underbody, centred, ceiling flush with the block's bottom face it is the datum and it is what the rail sits in during OP 2 — and the no-go zone includes it, so cutting its walls fails scrutineering as well as the fixture
Nothing below zb = 0 the block's bottom face is the OP 2 datum and has to stay a single plane
Axle holes 11 mm above the body's bottom face, drilled from machined faces after OP 2 the halo notch has to sit 34.0 ±1.0 mm above the track, which is what the 11 mm axle height buys you — and the bottom face is a fixture datum, so it is the one height you can measure honestly

Inside those four numbers you can machine whatever the rules allow. The fixture has no opinion about your car.

08 — compliance

What the regulations ask for that a fixture cannot give you

The fixture is not a scrutineered part — the technical regulations say nothing about how you hold the block. But several regulated features live on the same faces this fixture and your CAM touch, so they are worth stating once, in order.

regulation (2024-25 Development Class)what it means for you
D1.4 / Appendix ii — block 223.00 × 65.00 × 50.00, tether slot 6.00 × 6.00, chamber Ø18.00 × 52.00 deep at 29.00 above the bottom face the fixture is built to these numbers exactly; there is nothing here to design around. The slot is cut into the 50 mm, not added below it.
D1.6 / Appendix iv — two Ø6 halo holes, 40.00 apart, through the halo platform, drilled with the printed jig that sits in the tether slot Drill these first, with the slot empty. The holes land at y = ±20, 17 mm clear of the rail, so the fixture never argues with them — but it cannot drill them, because its rail is occupying the slot the official jig needs.
D4.2 — the no-go zone must be preserved as one continuous piece of model block; the only permitted modification is the two axle holes start your CAD from the official no-go-zone part, not from a bare block. It includes the 6.00 sub-floor channel, which is why the channel survives OP 2: it is a rule, not a preference.
D3.1.3 — an official holographic sticker from the model block, one per car a piece of the block's original surface has to end up on the car. The fixture touches only the ends and the inside of the slot, so a sticker on a side face survives both operations — check where yours is before you cut.
D9 — two tether line guides, one on or within 15.0 mm of the front, both closed loops added parts, not machined from the block. The fixture does not touch them, but leave room at the nose: a guide bonded on the centreline needs the channel's ceiling intact under it.
The official method uses the same two datums. F1 in Schools' own downloadable halo drilling jig "is placed in the tether line slot and pressed tightly against the chamber hole" (Appendix iv, stage 2). SLOTRAIL-223 locates in the same slot and against the same face. That is not a coincidence: the slot and the chamber bore are the only two features on a moulded foam block that were cut by a machine, so they are the only two worth trusting.

The order to do things in

  1. Drill the halo holes with the official printed jig. Slot empty, block loose.
  2. OP 1 — block on the rail, groove down, top half machined.
  3. Flip — 180° about the rail, collar up against the end face.
  4. OP 2 — underside machined, 6 mm channel untouched.
  5. Axle holes — 11 mm above the bottom face, drilled from the machined sides.
  6. Fit halo, tether guides, wheels, sticker.

09 — what has been checked

Numbers, not adjectives

Every figure below comes from the solid model in jig.py, which rebuilds and re-runs these checks on every run (report.json).

block dimensions vs Appendix ii (2024-25) — 9 values, checked in code9 / 9 exact
screw heads inside their outer face — 11 sites, probed on the solid0.3 mm each
fixture ↔ block interference, OP 1 / OP 20.000 / 0.000 mm³
fixture ↔ tool envelope, OP 1 / OP 20.000 / 0.000 mm³
pairwise interference, all five parts assemblednone
groove ceiling ↔ rail face, OP 1 / OP 20.000 / 0.000 mm
block to bed clearance, OP 218 mm
tower tops above the rail's top face12.3 mm
footprint285 × 110 × 92.3 mm
largest printed part153 mm → any 180 mm bed
block position, OP 1 / OP 2 (world Z)74–124 / 30–80 mm
mirror planeZ = 77 mm
overhang above the 45° threshold, all five parts95 mm² · none of it load bearing
sloped faces on the machined parts (8 solids)0 — pure 2.5D
machined screw heads inside their outer face — 10 sites0.3 mm each

10 — can you print it?

Yes. Here is the arithmetic, not the opinion.

Every STL was re-opened and every triangle measured against the build plate. A face needs support when it points downward and lies flatter than 45°. Across all five parts that total is 95 mm² — and none of it is an overhang you would actually support. The three parts that carry the tolerances come out at zero.

partfinished size mmfirst layer needs supportof that, bridgingPLA
left bed half150 × 110 × 92.315 812 mm² 0 mm²0 mm²146 g
right bed half135 × 110 × 92.314 162 mm² 40 mm²40 mm²138 g
rail a144 × 5.9 × 6.0850 mm² 0 mm²0 mm²5 g
rail b153 × 5.9 × 6.0903 mm² 0 mm²0 mm²5 g
collar26 × 22 × 12456 mm² 55 mm²13 mm²4 g
total674 cm³ of part32 183 mm² 95 mm²53 mm²298 g

the socket roof was a real overhang

It was drawn at 43° to the plate — three degrees under the support threshold, so every slicer would paint it, and you would have printed a 205 mm² ceiling with support scars where the rail has to seat. The ridge is now at Z 83.5, a 49.4° roof. It clears the threshold, and it still leaves 4.5 mm of thread above it for the M4 that presses the rail down.

rail b printed the wrong way up

The half-lap joint keeps the upper half of the section on rail b, so as exported its 20 mm of lap hung over air: a 118 mm² bridge, which sags, and a sagged lap makes a kinked rail. It is now printed flipped 180° about X — the lap sits on the bed and the number is 0 mm². The STL in stl/ is already in that orientation; load it and print it, do not re-orient it.

The two places the slicer will still show something

Look at the eleven head pockets in the slicer's section view before you commit. They are 4.3 mm and 6.3 mm deep with exactly 0.3 mm of margin on the head, and they are the first thing a 0.28 mm layer closes up. If the preview shows a pocket filled in, drop to 0.2 mm layers rather than printing it and finding out with a screw.

Settings this geometry was drawn for

  1. 0.2 mm layers, 0.4 mm nozzle. The 49.4° roof and the 1.6 mm slit both live comfortably at 0.2; at 0.28 the slit starts to close.
  2. 4 perimeters on the rails, 3 elsewhere. The rails are 5.9 × 6.0 mm and they are the datum — perimeters, not infill, are what makes them stiff.
  3. 15% infill is enough for the bed halves: the feet are pocketed, the towers are solid, and nothing on this jig is in bending except the towers, which are 24 mm thick.
  4. No supports anywhere. If your slicer wants to add some, it is painting the head pockets or the rim relief — turn support off rather than letting it fill a pocket.
  5. Print the beds with the tower up, exactly as exported. Laying a bed half down would put the socket roof and the foot pockets into mid-air.
largest part153 mm
tallest part92.3 mm
bed required180 × 180 mm
supportsnone
parts5
filament~298 g PLA
print time, 0.2 mm12–20 h

What this section is not. It is a measurement of the geometry, not a photograph of a finished part: no physical print of the current model exists yet. What is proved is that no surface exceeds the support threshold, that every part fits a 180 mm bed with its lowest face flat on the plate, and that the thinnest feature in the set is the 1.6 mm slit — four extrusion widths. The rest is your printer's calibration.

11 — the machined version

SLOTRAIL-223-M. Same three numbers, cut on a 3-axis mill.

You cannot hand the printed parts to a machinist and expect them back as drawn. Three features are print-only: the V-shaped socket roof lives inside the tower where no end mill can reach it from above; the collar's 1.6 mm slit is a saw cut; and each bed half is a 92.3 mm block with a tunnel along X, which is a fourth-axis part. So the machined version is a different set of parts that arrives at the same datum chain — seat 74.000, mirror 77.000, stop 223.000 — so a car cut on either jig comes out the same.

machined fixture assembled
The machined fixture assembled: a base plate, two saddles, two clamp caps and the 6 × 6 mm ground bar that both saddles carry. The caps bear on the bar only, 1 mm clear of the saddle faces — that gap is what makes them clamps instead of shims.

What it is made of

partqtyfinishedstock setupswhat it does
base plate1285 × 110 × 12 288 × 113 × 152 ties the saddles together; its eight T-slots hold the fixture to the table
saddle224 × 110 × 67.5 27 × 113 × 70.52 carries the rail at 74.000; the right one is the X stop
clamp cap224 × 110 × 8 27 × 113 × 111 two M5s pull it onto the bar — the machined version of the printed clamp screw
collar body112 × 22 × 12 15 × 25 × 151 clamps the bar and presses the block's end face at x = 0
collar cap112 × 22 × 6 15 × 25 × 91 closes the collar; two M4s
rail16 × 6 × 279 6 × 6 ground key stockbought the datum itself. Ground stock is straighter than anything you will mill

Why a 3-axis machine can cut all of it

Every face on the seven machined parts is either vertical or horizontal — measured, not intended: 0 sloped faces across all seven solids, against 18–86 faces each. That is the definition of 2.5D work. Every pocket is a plunge from one side, every wall is a side cut, and the only thing that changes between setups is which face is up. No part needs a fourth axis, a fixture plate or a sine table.

partsetup 1setup 2
base plate +Z: face to 12.000, two locator shoulders 0.500 deep, eight table slots and their pockets −Z: four ⌀7 through, four ⌀12 × 6.300 counterbores — heads 0.3 inside the underside
saddle ×2 +Z: face to 67.500 so the top lands at 79.000, rail pocket 6.2 × 5.0, two M5 tapped 12 deep, machine the stop face −Z: face to 11.500, two M6 tapped 15 deep
clamp cap ×2 +Z: two ⌀5.5 through, two ⌀9 × 5.300 counterbores. Underside left flat—
collar body +Z: pocket 10.0 × 5.0 open at the top, two M4 tapped 7 deep—
collar cap +Z: two ⌀4.5 through, two ⌀7.5 × 4.300 counterbores—

The two details that make it work

  1. The bar sits 1.0 mm proud of its pocket. Rail pocket 5.0 deep, bar 6.0 tall, so the bar's top stands 1.0 above the saddle's top face. The cap bears on the bar and never reaches the saddle face, so the clamp force is the screw's tension instead of a stack of tolerances fighting each other. It also means the cap cannot pinch the rail seat up or down: the seat is a machined surface, and the bar presses on it.
  2. The bar's bottom corners are relieved 1.5 × 45°. A 6.2 mm pocket cut with a ⌀3 cutter leaves R1.5 fillets in the floor corners, and a square-cornered bar would sit on those fillets 0.75 mm above the seat — the Z datum would be fiction. Relieving the bar's two bottom edges costs one pass with a chamfer tool on bought stock and puts the bearing surface back on a true flat.
# the stack, as machined — this is the whole jig
base plate underside 0.000 ← 12.000 plate, sits on the table
+ 12.000 locator shoulder floor (0.5 deep, locates the saddle in X and Y)
+ 67.500 saddle top face — machined in the same setup as the pocket
+ 5.000 rail pocket floor = 74.000 · the seat
+ 6.000 the bought bar's own height, measured with a micrometer
= 80.000 rail top face → the block's groove ceiling sits here
mirror plane 77.000 = 80.000 − 6.000/2, set by the bar, not by foam

Tools

One dimension decides the whole fixture: the bar's height. Everything above is derived from 6.00 mm. Check the ground stock with a micrometer before you cut anything else; if it is 5.95, the mirror plane moves to 76.975 and your two halves will meet 0.05 mm off the centreline. That is why this version buys ground stock instead of milling a rail.

Order of work

  1. Machine the base plate both sides, then check that the shoulder floor to the underside is 12.000 all round. The saddles hang off that face.
  2. Machine both saddles, top first: the pocket floor and the stop face come off the same setup, so they are square to each other by construction. Then flip and tap the M6s.
  3. Bolt it together loose, drop the bar in, fit both caps. Do not tighten the saddles yet — they locate on the shoulders, so they can only go where the plate puts them.
  4. Indicate the seat. Height gauge or a dial on the spindle: the pocket floor must read 74.000 from the base plate's underside at both saddles, and 223.000 from the left saddle's inner face to the right one's stop face. If they disagree by more than 0.05, the shoulder has a burr — clean it, do not shim it.
  5. Fit the collar on the bar, slide it to the block's end, tighten. That is the only adjustment in the fixture, exactly as in the printed version.
machined fixture exploded
Apart: caps up, collar clear of the saddles. Six machined parts, one bought bar, ten screws — and every screw head 0.3 mm inside the face it passes through, on both versions.

What this section is not. There is no CAM file here and no machined part has been cut yet: what is proved is that the geometry can be cut by a 3-axis machine — every face axis-aligned, every pocket reachable from +Z in its own setup, two setups maximum per part, standard cutters, no undercuts. The toolpaths, feeds and workholding are still yours to set: clamp the base plate on parallels, hold the saddles in a vice on the 110 mm face, and leave 0.3 mm on the pocket floor until you have indicated the vice flat.

12 — the zero-hardware version

SLOTRAIL-223-ZH. Five printed parts, nothing to buy, nothing to lose.

Both versions above depend on hardware: eleven screws and eight T-nuts in the printed one, cap screws and a bought 6 × 6 mm ground bar in the machined one. This version does the same job with zero purchased parts and zero fasteners — and it keeps all three datum numbers: seat 74.000, mirror 77.000, stop 223.000. A car cut on any of the three jigs comes out the same.

rail in the groove, pusher on the end face
OP 1 with the foam ghosted so the engagement shows: the rail (blue) sitting in the 6 × 6 tether groove, and the two amber prongs of the pusher straddling it, bearing on the block's end face. The right tower is the fixed stop. The amber part is the only clamp in the design, and you drive it with your hand.

What it takes out

the screwed version needsthis one uses instead
2 × M4 × 8 rail clamps, self-tapped into the towers a pusher running on a 10° self-locking incline — hand-set, hand-released
1 × M4 × 16 collar screw + the split collar the same pusher. It bears on the same end face at x = 0 in both ops
8 × M6 × 20 + T-nuts to bolt the bed to the table the machine vice, gripping the bed's 110 mm width
2 × Ø8 dowels (or printed notches + glue) to join the halves a plan-view dovetail at plate level: the right half drops over the left's tongue
the rail, glued at a 20 mm half-lap the same two rails, pressed together — no glue needed
11 screw sites0 — zh/report.json has fastener_sites: 0 and an empty hardware list

How the block is held without a screw

Z — the same trick. The 6 × 6 groove nests over the rail. In OP 1 the groove ceiling rests on the rail's top face; in OP 2 the block is rolled 180° about the rail and hangs from its underside. Nothing new here, and that is the point.

X — a wedge you push with your thumb. The right tower is a fixed stop at x = 223. The pusher's back face runs on a 10° incline cut into the left tower, so pushing it down walks it towards the block. 10° is under the friction angle of PLA on PLA (19.3°), so it is self-locking: the block cannot push it back, and lifting it 11.52 mm releases the block. A 40 N push becomes 76 N of clamp force; the two prongs bear on 665 mm² of the block's end face, i.e. 0.114 MPa even at that worst-case push. You should not need it: the clamp only has to beat a couple of newtons of cutter load, and it brings 27 N of friction to do it. Push until it stops moving, no harder. The take-up is 2.0 mm over a 225.0 mm loading gap, so a block anywhere in the official ±0.2 mm on length loads freely and still gets clamped.

The two halves — a dovetail that carries tension. The pusher pushes the left half away from the right half; that load has to go somewhere. A plan-view dovetail at plate level takes it: 38 mm of engagement, a 11.89° undercut, 0.15 mm of clearance. It is checked the only way that proves anything — move the right half 1 mm and measure the interference. Separating them costs 86.7 mm³ of solid collision, so the joint cannot pull apart; lifting the right half costs 0 mm³, so it drops on in seconds. The dovetail carries load only. It never sets a datum — the wedge absorbs any slack.

OP 2 — the improvement, honestly. In the screwed version the flipped block hangs from a 6 × 6 mm printed bar spanning 236 mm, and beam theory says that bar deflects about 0.4 mm under a 50 g foam block (simply supported, E = 3 GPa, I = 108 mm⁴ — calculated, not measured). In OP 1 the block rests on the bar's high ends near the sockets, which is nominal; in OP 2 it hangs from the bar's underside and therefore finds the bar's lowest point at mid-span. The two operations would sit about 0.4 mm apart in Z. That is a real flaw in the screwed version, and it is the one thing this variant fixes: the block rests on plate ribs at Z = 30 mm, so in OP 2 the rail carries none of the block's weight and only ever touches the groove ceiling near its supported ends, where its height is nominal. The pocket floors between the ribs are the same 4 mm plate the model already has.

zero-hardware fixture assembled, OP 1
OP 1, solid. The block nests on the rail and floats 44 mm above the bed on the groove alone — that gap is why the towers are the only thing standing between the tool and the table. The prongs straddle the rail without touching it: 0.45 mm of clearance either side.

The parts

filewhat it isqtysize PLAsupport
bed_left.stlfoot, tower, socket, pusher guide, dovetail tongue 1188 × 110 × 100 233 gnone
bed_right.stlfoot, tower, stop face, dovetail socket 1135 × 110 × 100 181 gnone
pusher.stlthe clamp: two prongs on a 10° wedge back 125 × 60 × 30 15 g 49 mm² bridge
rail_a.stlrail, lower half of the lap 1144 × 5.9 × 6.0 5 gnone
rail_b.stlrail, upper half — printed flipped 180° about X 1153 × 5.9 × 6.0 5 gnone

439 g of PLA, about 18–24 h, tallest part 100 mm, largest 188 mm — still inside a 180 mm bed. Total unsupported area across all five parts: 49.1 mm², and it is one 7.1 mm bridge over the slot the rail passes through, which FDM spans without support. Print the pusher as exported — rolling it upright was measured at 476 mm² of unsupported face and rejected.

Using it

  1. Print the five parts. No supports, no raft.
  2. Press the two rails together at the 20 mm lap.
  3. Slide the rail into the right tower until it butts the blind end (0.4 mm of clearance), then lay it into the left tower's socket.
  4. Drop the right bed's dovetail hooks over the left bed's tongue.
  5. Drop the pusher into the left tower's guide channel from above.
  6. Grip the bed across its 110 mm width in the machine vice. No bolts, no T-nuts, no clamps.
  7. OP 1 — lift the pusher, lower the block onto the rail, push the pusher down by the block's rear face until it is firm.
  8. OP 2 — lift the pusher, lift the block clear of the towers, roll it 180° about the rail, lower it back onto the rail and the ribs, push the pusher down again.
zero-hardware parts exploded
The five parts, exploded: two bed halves joined by the dovetail, the two rails that press together into one 277 mm bar, the pusher, and the block. Every part of this is printed; the only tool you need is the vice.

What this version cannot do

13 — the over-engineered version

SLOTRAIL-223-X. Ten printed parts, nine pieces of hardware, and the flip is a lever throw.

Every version above asks the same thing of you: pick the block up, turn it over, and put it back on the rail. That lift is the biggest error in the whole process — bigger than any tolerance in the fixture, because it is unmeasured and unrepeatable. This version never lets go of the rail. The rail is the axle. Turn the lever 180°, drop a pin, and you are in OP 2 with the rail still sitting in the same two bearings it started in. Same datum chain: seat 74.000, mirror 77.000, stop 223.000 — a car cut on any of the four jigs comes out the same.

SLOTRAIL-223-X, OP1
OP 1. The block sits on the rail between two bearing stands; the lever (amber) is on the rail's outboard end, the clamp jaw hangs on the left, and the right stand's inner face is the X stop. The rail's ends run through two 46 mm hubs that ride in open U-cradles, closed by the two caps.

What the extra parts buy

 SLOTRAIL-223-ZHSLOTRAIL-223-X
the fliplift the block off the rail, turn it, seat it again by hand a lever throw with a 5 mm detent pin; the block never leaves the rail
X clampa wedge driven by your thumb, self-locking on friction 2 × M6 grub screws — set by torque, not by feel
block length223 mm only 203–223 mm: the full block down to the shortest legal car, by screwing the jaw in 20 mm
the railprinted, 5.9 mm, one length glued printed or a bought 6 × 6 mm ground bar — and the sag numbers below say buy the bar
deckplain tool-setting steps (3 and 6 mm), a Z 80 reference ledge, a hex-key holster, two bolt trays
printed mass439 g448 g
hardwarenone9 pieces, about HK$90

How it works

  1. The rail is the axle. Its two ends pass through 46 mm hubs that sit in U-cradles cut into the stands. The cradle is the lower half of the bore, so the whole axle lifts out in one piece when you want to change the rail, and the caps only stop it lifting while you work.
  2. The lever sets the angle. It clamps on the rail's outboard end with two M4 grubs, and carries two 5 mm holes in its boss, 180° apart. A 5 mm dowel drops through the cap's arm into whichever hole is on top. That is the whole index: no scale, no setting.
  3. The clamp pushes along X. Two M6 grubs thread through the left stand and their plain tips sit 8 mm inside sockets in the jaw, so the jaw hangs on them and slides on them. Set the block against the stop, wind both in, done.
  4. The stop is a face, not a bolt. The right stand's inner face is at 223.000 and carries a single full-height pad; the rail passes through it in a Ø9 round hole, because a square hole in a square bar jams at 45° when the bar turns.
mid-flip
Halfway through the flip: the block is vertical, still keyed to the rail, still between the stands. Nothing has been unclamped and nothing has been re-seated. This is the figure that justifies the part count.
OP2 after the flip
OP 2, after 180°. The groove is now on top and the underside is presented at Z 80. The rail has not moved relative to the block or to the machine.
engagement
With the foam ghosted: the rail in the 6 × 6 groove, the jaw's pad on the end face at x = 0, and the stop's pad on the other end at x = 223. The clamp touches the block in exactly two places, both of them end faces that are never machined.

What the checks say

checkresulthow it was measured
the flip, all the way through0.000 mm³ 37 poses from 0° to 180°, axle + block rolled about the rail axis against every static part. Zero at every angle, so the block clears the stands, the caps, the jaw and the deck for the whole arc.
part against part, assemblednone every pair of the ten parts intersected
block, both poses0.000 mm³ fixture against the 223 × 65 × 50 block in OP 1 and after the roll
capacity203–223 mm jaw at 0, 10 and 20 mm of travel: pad gap 0.000 mm, stop gap 0.000 mm, no block contact
index repeatability0.19 mm 5 mm dowel in a 5.05 hole at R17 → 0.17° of index error → the two machined faces meet 0.19 mm out of parallel across the 65 mm width, against a 1.00 mm rules tolerance. Five-to-one inside it.
rail sag in OP 20.61 mm printed
0.01 mm steel
the block hangs from the rail in OP 2, so the rail's own deflection lands straight in the seam between the two ops. Beam theory over a 291 mm span, 45 g block: PLA droops 0.61 mm, a 6 × 6 steel bar 0.01 mm. This is why the BOM says buy the bar.
the bed joint14.0 mm³ the dovetail from 12 inherited unchanged: pull the halves 1 mm apart and they collide, lift them 1 mm and they come free (0 mm³)
print448 g 1058 cm³ of part, 429 mm² needing support, 18–24 h at 2 perimeters and 15 % infill
Appendix ii compliance9 / 9 block bbox 223 × 65 × 50, volume 703,490 mm³ against 703,490 predicted
exploded
The ten unique parts. Two bed halves, two hubs pressed onto the rail's ends, two caps, the lever, the jaw, the detent pin and the two rail halves — or one bought bar instead of the rails. Nothing here needs support beyond the detent pin's head.

What this version cannot do

14 — which one do you build?

Four fixtures, one datum chain, four different bills

All four hold the block by the same 6.00 × 6.00 mm tether groove, put the bottom face at Z 74.000, the mirror plane at Z 77.000 and the X stop at 223.000. A car cut on any of them comes out the same, so choose on cost and on the one error you are most likely to make — not on accuracy.

SLOTRAIL-223
printed, screwed
-223-M
machined
-223-ZH
zero hardware
-223-X
over-engineered
what you needa printera 3-axis mill + 6061a printera printer + the bar
parts you make5 printed7 machined + 1 bought bar5 printed10 printed (11 pieces)
what you buy11 screws, 8 T-nuts, 2 dowels, CA18 fasteners, 6 × 6 ground bar, T-nutsnothing at all9 fasteners, 6 × 6 ground bar
tools you use3 / 4 mm hex, 3.3 drillmill, 3.3/4.2/5.0 drills, M4–M6 taps, 4/5 mm hexthumb, calipers4 / 5 mm hex, 5 mm reamer
how the block turnslift it off, turn it, drop it back onlift it off, turn it, drop it back onlift it off, turn it, drop it on the ribslever + detent pin — the block never leaves the rail
how the block is held in Xsliding collar, M4sliding collar, 2 × M410° self-locking wedge, hand pushtravelling jaw, 2 × M6 grubs, set by torque
capacityany block up to 223any block up to 223any block up to 223203 – 223 mm, set by the jaw
everything you make298 g PLA2.0 kg of 6061439 g PLA448 g PLA
time on the machine12 – 20 h printing9 setups, no estimate given18 – 24 h printing18 – 24 h printing
largest single part153 mm → any 180 mm bed288 mm of stock → 300 mm of X travel188 mm → needs a 220 mm bed179 mm → any 180 mm bed
support in the slicer94 mm², none of it load bearingnone — it is metal49 mm², one 3 mm bridge429 mm², 93 mm² of it the detent pin's head
the error it deletesthe foam's own thickness, from the flipprinted-plastic creep and how hard you turned the screwscrew torque and every stripped boss you would have hadthe lift itself: OP 2 sits 0.19 mm from OP 1, measured on the index
what it cannot dono fine length adjustment; foam-onlycannot be made at home without a millno screws means no fine clamp pressure — the wedge is a hand push0°/180° only; heaviest; no machined version
The default answer: build -ZH. It is the only one that needs nothing but filament, it has the least support of the three printed versions, and it deletes the two things that actually wreck student fixtures — a stripped screw boss and a clamp you set by feel. The price is a 220 mm print bed, because its left bed half is 188 mm.

Then the three exceptions, in the order they usually apply:

None of the four has been printed or cut. Everything on this page is measured on the solid model, which is a real and repeatable claim, and it is not the same claim as "a part exists". The first print is the first physical test; the settling tests are listed at the end of 19.

15 — bills of materials, all four

What to put on the bench before you start

These are the complete lists. The printed parts have no hidden extras: if it is not on the list, the fixture does not need it. Quantities come from the same models that export the STLs, and every screw site is one the model probed for a head clearance of 0.3 mm.

A · SLOTRAIL-223 — printed, screwed

itemqtyspecgoes where
bed_left1150 × 110 × 92.3 printleft half, carries the rail socket
bed_right1135 × 110 × 92.3 printright half, is the X stop
rail_a / rail_b1 + 1144 / 153 × 5.9 × 6.0 printglued into one 277 mm bar at a 20 mm half-lap
collar126 × 22 × 12 printslides on the rail, pushes the end face at x = 0
M4 × 8 socket cap2self-tapping into a 3.3 pilotone over each rail socket — presses the rail onto its floor
M4 × 16 socket cap1self-tapping into a 3.3 pilotcloses the collar
M6 × 20 + T-nuts8for the table's T-sloteight counterbored slots, 4 per bed half
Ø8 × 25 wooden dowel2or printed pinsthe bed joint — the only thing holding the halves
CA glue1mediumdowels + the rail lap

B · SLOTRAIL-223-M — machined

itemqtyfinishedstocknote
base plate1285 × 110 × 12288 × 113 × 152 setups
saddle ×2224 × 110 × 67.527 × 113 × 70.52 setups
clamp cap ×2224 × 110 × 827 × 113 × 111 setup
collar body112 × 22 × 1215 × 25 × 151 setup
collar cap112 × 22 × 615 × 25 × 91 setup
6 × 6 ground key steel1279 mm282 mm of stockbought — do not mill this, check it with a micrometer
M6 × 45 T-bolt + T-nut8table—through the base plate's eight T-slots
M6 × 25 socket cap4saddles—up from under the base into the saddle's tapped M6
M5 × 12 socket cap4cap clamps—two per clamp cap
M4 × 10 socket cap2collar—through the collar cap into the body
Ø3.3 / 4.2 / 5.0 drill—tapping—M4, M5, M6 respectively

Finished sizes are what the model exported; stock is the smallest convenient oversize. The collar is a two-part split clamp — thread it onto the bar before the bar goes near the saddles, because its bore is closed.

C · SLOTRAIL-223-ZH — zero hardware

itemqtynote
bed_left1188 × 110 × 100 — needs a 220 mm bed
bed_right1135 × 110 × 100 — carries the dovetail hooks
pusher125 × 60 × 30 — the sliding wedge, printed rolled 90°
rail_a / rail_b1 + 1144 / 153 × 5.9 × 6.0 — press together at the 20 mm lap
everything else0no screws, no T-nuts, no bought bar, no glue. The dovetail and the wedge are printed in.

D · SLOTRAIL-223-X — rotary carrier

itemqtyspec
base left1174 × 110 × 100
base right1175 × 110 × 122
hub246 × 46 × 18
cap left142 × 92 × 12
cap right120 × 92 × 12
lever134 × 72 × 16
jaw192 × 100 × 30
detent pin112 × 12 × 30 (5 mm spigot)
rail a1164 × 5.9 × 6
rail b1179 × 5.9 × 6
6 × 6 ground key steel1 off325 mm
M6 grub2 off60 mm
M4 grub2 off8 mm
M4x12 cap4 off—
5 mm dowel1 off30 mm

Printed rail sags 0.6 mm in op2; steel sags 0.01 mm.

Fasteners, once

threadpilot / tapcounterborehead recesswherehow tight
M43.3 mm pilot, self-tapping in PLA (measured 3.28)⌀7.4 – 7.5, 4.3 deep0.3 mm insiderail clamps, collar, lever, X capssnug plus an eighth turn — stop at the first creak
M54.2 mm tap drill, M5 tap⌀9.0, 5.3 deep0.3 mm insidethe two clamp caps on -Mnormal machine torque, it is in aluminium
M65.0 mm tap drill, M6 tap⌀10.5 (print) / ⌀12.0 (−M), 6.3 deep0.3 mm insideeight bed clamps / four table boltsbed only — it holds the fixture, not the block
M6 grub5.0 pilot—none — headlessthe X jaw1.5 N·m is plenty; it is pushing foam
The 0.3 mm recess is not cosmetic. It is the difference between a screw head that is inside the fixture's envelope and one that a collet nut finds at 12,000 rpm. Every printed pocket is printed at that depth and every machined counterbore is cut at it; if you ream a pocket deeper to "make the screw sit flush", you have just removed the clearance that the tool envelope check depends on.

16 — every printed part, in one place

Twenty STL files, twenty-one pieces, no raft anywhere

Three of the four fixtures are printed. This is the complete set: what each part measures, what it weighs at 15 % infill, and where the slicer will put support. Sizes are bounding boxes of the exported, print-oriented solids — the same files that are in each stl/ folder — so they are what your slicer will report, not what the design intended.

A · SLOTRAIL-223 — 5 parts, 298 g

partsize (mm)cm³PLA gsupport mm²bridge mm²how to print it
bed left150 × 110 × 92.3338.71460.00.0as exported, foot on the bed
bed right135 × 110 × 92.3320.513840.040.0as exported, foot on the bed
rail a144 × 5.9 × 64.750.00.0flat, 5.9 across × 6.0 tall — the 6.0 is the datum
rail b153 × 5.9 × 65.150.00.0flipped 180° about X — lap on the bed, do not re-orient
collar26 × 22 × 125.2454.112.5bore vertical, prints with no support
total674.129894.152.5

B · SLOTRAIL-223-ZH — 5 parts, 439 g

partsize (mm)cm³PLA gsupport mm²bridge mm²how to print it
bed left188 × 110 × 100636.62330.00.0188 mm — needs a 220 mm bed. Hooks down
bed right135 × 110 × 100491.41810.00.0as exported — tongue up, no support under the dovetail
pusher25.04 × 60 × 3029.01549.149.1rolled 90° as exported — the 3 mm leg bridges 7 lines
rail a144 × 5.9 × 64.750.00.0flat, same as 223's rail
rail b153 × 5.9 × 65.150.00.0flat, lap on the other side
total1166.843949.149.1

C · SLOTRAIL-223-X — 10 unique, 11 pieces, 448 g

partsize (mm)cm³PLA gsupport mm²bridge mm²how to print it
base left174 × 110 × 100366.81480.00.0as exported — U-cradle up
base right175 × 110 × 122443.817572.016.6as exported — cradle and stop up
hub45.96 × 45.98 × 1829.2130.00.0on its flat face, bore vertical
cap left42 × 92 × 1226.61568.768.7as exported, detent arm up (69 mm² of bridge inside the bore)
cap right20 × 92 × 1221.61268.768.7as exported
lever34 × 72 × 1623.213126.323.3on its side — 126 mm² of support, the most of any part here
jaw92 × 100 × 30134.1590.00.0as exported, pad down
detent pin11.99 × 11.99 × 301.0193.293.2print lying down — upright its head needs 93 mm² of support
rail a164 × 5.9 × 65.460.00.0flat — or buy the bar and print neither
rail b179 × 5.9 × 65.960.00.0flat — or buy the bar
total1057.6448428.9270.5

Settings that matter

Beds and stands (223, ZH, X)0.4 nozzle · 0.2 layers · 3 perimeters · 15 % gyroid
Rails, all three variants4 perimeters · 100 % infill · measure the 6.0 mm face after printing
Hub, lever, caps (X)4 perimeters · 40 % — these carry the block's weight and the index
Detent pin (X)4 perimeters · 100 % · print lying down
Layer height, everywhere0.2 mm. The screw pockets are 4.3 mm deep; 0.28 layers close them

Thin features, and why they are survivable

Three things you can get wrong at the slicer. 1. rail_b is exported flipped; re-orient it and the half-lap hangs over air. 2. The ZH pusher is exported rolled 90°; stand it up and the 10° face becomes a 100 mm overhang. 3. Every screw pocket is a blind hole that a coarse layer height will bridge over — check them in the slicer's section view before you commit 20 hours.

17 — assembly, all four

The same eight steps, four different mechanisms

Start with the comparison: each column is a complete build, and the row you are on is the same decision in all four. Then the numbered sequence for the fixture you are actually building — 04 has the printed version's in full, with the exploded view, and the other three are below it on this page.

stepSLOTRAIL-223−M machined−ZH zero hardware−X rotary carrier
1 · benchDeburr the sockets; check the rail halves roll flat on a tableStone every edge; check the bar with a micrometerSnap the two rail halves together at the 20 mm lapPress a hub onto each end of the joined rail
2 · the bedCA the two Ø8 dowels, press the halves together, clamp flat while it setsBase plate on the table, four M6s loose; saddles onto their locator shouldersDrop the right half's dovetail hooks over the left half's tongue from aboveJoin the two deck halves the same way — hooks over tongue, straight down
3 · the railrail_a into the left socket, rail_b into the right, CA the lap, sight it straightBar into the left saddle pocket, right saddle over it, two M5 caps on, 1 mm proudSlide the rail into the right tower until it butts the blind end, then lay it into the left socketLay the rail into both U-cradles; the hubs sit in the cradles, not the deck
4 · the clampCollar threaded onto rail_a before the lap is gluedCollar threaded onto the bar end with the block removed — closed boreNothing to thread: the wedge is already in the tower's guide channelTwo M4 caps over each cradle, and the lever clamped onto the left hub with its M4 grubs
5 · the blockGroove over the rail, pushed against the right tower's stop faceGroove over the bar, against the right saddle's machined stop faceGroove over the rail, then push the wedge down by the block's rear faceGroove over the rail, jaw behind it, two M6 grubs to the pad
6 · measures = groove depth, h = rail height, both with calipersh = bar height with a micrometer — this is the mirror planes and h as 223, plus the rail's blind-end gap (0.4 mm)s and h, plus the detent's seat: pin should drop 8 mm into the lever
7 · OP 1 → OP 2Loosen the collar, lift the block off, turn it 180°, drop it on, re-clampLoosen the collar, lift, turn, drop, re-clampLift the wedge, lift the block clear of the towers, roll 180°, lower onto the rail and the ribs, push the wedge downBack the clamp off two turns, throw the lever, drop the pin, two turns in — the block never leaves the rail
8 · never againThe bed joint, the rail lap, the tower spacingThe base-to-saddle interface once indicated at 74.000The dovetail — it lives assembled, it is meant to come apart only to storeThe cradle alignment and the lever's hub clamp
The one step you cannot undo later. Every version has a closed clamp that must go onto the rail before the rail is captured at both ends: the collar on 223 and −M, the hubs on −X. Put a rail in first and you will be taking it out again. This is not a mistake the drawings show — it is a property of a circular bore around a square bar, and it is the reason the assembly order in every section starts with the clamp.

Build sequences, one per fixture

Eight steps is enough to compare, not enough to build from. Each fixture's own section carries the reasoning and the figures; below is the same order written for the bench — parts listed first, then one numbered sequence with the check that catches that step going wrong written into it. The printed version's full sequence with the exploded view is 04. If you skip the checks you are not building a jig, you are guessing at the datum with extra steps.

B · SLOTRAIL-223-M — machined, 6061

You need: base, 2 saddles, 2 clamp caps, collar body + cap, one 6 × 6 × 325 mm ground bar, 8 × M6 T-bolts + T-nuts (table), 4 × M6 × 25 (saddles), 4 × M5 × 12, 2 × M4 × 10. Figure: 11.

  1. Stone every edge first. All seven parts. A burr on the base's top face is a Z error that no offset can fix, because the saddle sits on it and the bar sits in the saddle.
  2. Bar and collar before anything else. Thread the collar body onto the bar and park it at the far end — its bore is closed, so it cannot go on later. Chamfer the bar's two bottom edges 1.5 × 45° now, while there is room to hold it.
  3. Base onto the table, snug only. Eight M6 T-bolts through the base's eight slots. Leave them loose: the saddles are about to define where the base actually sits.
  4. Saddles onto the base. Each drops onto its machined 0.5 mm locating shoulder, then four M6 × 25 come up from underneath through the base's counterbores into the saddles' tapped holes. Torque in pairs — one screw fully home tilts the saddle and the shoulder stops being a shoulder. Then tighten the eight table bolts.
  5. The bar. Its pockets are open at the top, so lay the bar down into both saddles at once. The bar must finish 1.0 mm proud of the pocket floor; if it sits high or rocks, the pocket's R1.5 floor fillets are holding it — go back to step 2 and check the chamfer. Then the two clamp caps, two M5 each, snugged in pairs.
  6. Close the collar on the block's end face with the cap and two M4 × 10. It must slide on the bar with no detectable rock.
  7. Indicate it before you cut. Sweep a dial test indicator along the bar's top face over its full length and write the number down. That number, not the drawing, is the Z repeatability of the fixture — it is the measurement 19 asks for.

C · SLOTRAIL-223-ZH — no hardware at all

You need: 2 bed halves, pusher, 2 rail halves. No fasteners, no bar, no glue. Figure: 12.

  1. Knock the elephant's foot off the dovetail. 240 grit on the tongue's two flanks, four or five strokes. A printed vertical wall is 0.1–0.2 mm fat at the bottom and the joint will not drop together until it is not.
  2. Press the two rail halves together at the 20 mm lap. Dry fit first: they should go together with thumb pressure and come apart with a firm pull. A drop of CA is allowed; a hammer is not.
  3. Drop the halves together. Right half's hooks over the left half's tongue, straight down — never slid in from the end. Check: lift either half 1 mm and they come apart freely; push them sideways and they do not.
  4. The rail. Push it into the right tower's blind end until it butts — there is a designed 0.4 mm gap — then lay the left end down into the left tower's socket. If your rail feels loose in the socket, that is the 0.1 mm designed clearance and it is fine.
  5. First fit. Slide the block's groove over the rail, push the end face against the stop, and drop the pusher into the tower's channel behind it. The pusher's two prongs should straddle the rail with 0.45 mm to spare on each side.
  6. Load it. Press the wedge down with a thumb. Test the self-lock properly: push the block forward (the direction the cutter will push it) and let go. If it creeps back, the incline has dust on it — wipe both faces and rub pencil graphite on the ramp.
  7. OP 2. Lift the wedge, lift the block 11.5 mm clear of the towers, roll it 180°, and lower it back onto the rail. It now rests on the seven ribs at Z 30, and the rail only locates. Wedge down again.

D · SLOTRAIL-223-X — rotary carrier

You need: 2 bases, 2 hubs, 2 caps, lever, jaw, detent pin, 2 rail halves (or one bought 6 × 6 × 325 bar), 4 × M4 × 12 caps, 2 × M4 × 8 grubs, 2 × M6 × 60 grubs, 5 mm dowel. Figure: 13.

  1. Press a hub onto each rail end before the rail goes anywhere near a cradle. Both hubs, one end each, square to the rail. Roll the assembly on a flat table: a hub that shows runout is a wobbling flip, and no detent will fix it.
  2. Join the deck. Same dovetail as ZH: hooks over tongue, straight down. Lift-test it — 1 mm of lift must free it.
  3. Lay the rail into both U-cradles. The hubs sit in the cradles, not on the deck. Sight along the deck edge: the rail should be parallel to it within a millimetre over its length.
  4. Cap the cradles — two M4 × 12 per cap. Snug one, then the other, then torque in pairs. The test is by hand, not by torque wrench: the hub must spin with a finger and have no visible play. Pinched caps are the most common −X build fault.
  5. The lever onto the left hub with its two M4 × 8 grubs. Set it so the pin hole lines up with the cap's arm at both 0° and 180° — the arm is the stop, and it should be the arm that stops the lever, never the lever's boss.
  6. The detent pin through the cap's arm into the lever's boss. It should drop 8 mm under its own weight. If it stops at the mouth, run a 5.0 drill through by hand and try again.
  7. The jaw into the left deck's guide, then the two M6 grubs, a quarter turn at a time each. The jaw must slide without cocking — alternate the grubs and it will.
  8. First fit. Block's groove over the rail, end face against the jaw's pad, grubs in until the pad bears. Snug, not tight: these pads push on balsa foam.
  9. Flip drill. Two turns out on the grubs, lever through 180°, pin, two turns back in. Do it five times and watch the Z: put a dial indicator on the rail's top face across a flip. A number that repeats within 0.19 mm is the design claim in 19 being true on your bench — a number that does not is the fixture telling you which step is wrong.
  10. Never touch again: the cradle alignment and the lever's clamp. Everything else in this list is meant to be undone and redone; those two are the fixture.

18 — the numbers, all four

What is identical, and what each version changes

This is the table to keep open at the machine. The first four rows are the datum chain and they are the same in all four fixtures — that is the whole point of building four of them. Where a row differs, the difference is a design decision, not a tolerance.

quantitySLOTRAIL-223−M machined−ZH zero hardware−X rotary carrier
seat (rail bottom face)74.00074.00074.00074.000
rail top face80.00080.00080.00080.000
mirror plane77.00077.00077.00077.000
X stop223.000223.000223.000223.000
block, OP 1 (world Z)74 – 12474 – 12474 – 12474 – 124
block, OP 2 (world Z)30 – 8030 – 8030 – 8030 – 80
what holds the block in OP 2the rail alonethe bar alonethe rail locates, seven ribs at Z 30 carry itthe rail alone — which is why it wants steel
overall length, X285285285301
overall width, Y110110110110
height above the table92.388100124
clamp travel / capacitycollar, unlimited up to 223collar, unlimited up to 223wedge, 2 mm of pushjaw, 20 mm → 203 – 223
parts to make5 printed7 machined + 1 bought5 printed10 printed / 11 pieces
mass298 g PLA2.0 kg 6061439 g PLA448 g PLA
# one CAM setup for all four — Z0 on the rail's top face, x0 on the block's left end
OP 1   Z = zb − s
OP 2   Z = (s − h) − zb
s = your block's groove depth, h = your rail's height, zb measured up from the block's bottom face. Change fixture and the CAM does not change: only the mechanism that moves the block between the two operations does.

What you touch off on, per fixture

fixtureX zeroZ zerothe number you must measure first
223right tower's stop face at 223.000 rail top face, both operationsrail height h, at three places
−Mright saddle's machined stop face bar top face — the bar sits 1.0 mm proud, so it is reachable with a probe bar height with a micrometer: ground stock is 5.95–6.00, and the mirror plane moves with it
−ZHright tower's stop facerail top face rail height, plus the 0.4 mm blind-end gap so the rail cannot creep in X
−Xright deck's stop face at 223.000, with the jaw set to your block length rail top face — the same face in both index positions rail height, and whether your block is short: the jaw covers 20 mm of it
Z0 does not move when you flip. On all four fixtures the rail's top face is at the same height in OP 1 and OP 2, because the block turns about the rail. A fixture that asked you to re-touch off after the flip would put every error in your probe arm straight into the seam between the two machined faces.

19 — the evidence, in one table

Twenty-two claims, each with the number that backs it

Every row is produced by a script that raises and exports nothing if the check fails, so a STL in these folders is a STL whose numbers passed. The last column says where to look if you want to argue with one.

claimwhichmeasured valuepasses ifwhere it is proved
block model vs Appendix iiall four9 / 9 exact, bbox 223 × 65 × 50every official dimension within 0.01each report: compliance_block
block volume vs predictedall four703,490 mm³ vs 703,490error under 0.1 %index/report.json · compliance
fixture ∩ block, OP 1 / OP 2all four0.000 / 0.000 mm³exactly zerointerf_op1/op2_mm3 on every part
fixture ∩ tool envelopeall four0.000 / 0.000 mm³nothing in the cutter's waytool_op1/op2_mm3
part against partall fournone intersectno pair overlapspairs empty
groove ceiling on the rail223 · −ZH · −X0.000 / 0.000 mmcontact, not a gapop1/op2_groove_gap
the flip, all the way through−X only0.000 mm³ over 37 poseszero at every angle from 0° to 180°index/report.json · sweep
block drop corridor−ZH0.000 mm³ with the pusher retracted 2 mmthe block lowers on without touchingdrop_path_op1/op2_mm3
capacity 203 / 213 / 223−Xpad gap 0.000, stop gap 0.000, no block contactjaws touch without interferingcapacity
index error after a flip−X0.17° → 0.19 mminside the 1.00 mm rules tolerancedetent.parallelism_err_mm
hex key reaches every screw223 · −X11 / 11 sites · 0.000 mm³ corridor with a 59.5 mm keyno blocked fastenerstress.py · index hexkey
screw heads inside the outer face223 · −M · −X11 · 10 · 4 sites, 0.3 mm each0.3 mm minimum, probed tightenedscrews[].recess_mm
the pilot is a pilot223 · −X3.28 mm measured, target 3.3 ± 0.2the screw bites, it does not spinscrew_pilot_dia_mm
printable223 · −ZH · −X94 · 49 · 429 mm² of supportno part needs a raft or a redesignprint_report.json
fits a printer223 · −Xlargest part 153 / 179 mminside a 180 mm bedfits_180_bed
fits a printer−ZH188 mm — does notneeds a 220 mm bedfits_180_bed: false
3-axis machinable−M172 faces, 0 slopedevery face horizontal or verticalplanar_2_5d
cutter and depth−Mdeepest pocket 5.0 mm = 1.7 × ⌀3, min radius 1.65 mmno tool smaller than ⌀3, no 4th axisplan.planar_2_5d
the bed joint cannot pull apart−ZH · −X86.7 · 14.0 mm³ on 1 mm separationlocks sideways, free verticallyjoint_check
the wedge holds without a screw−ZH10.0° wedge < 19.29° friction → holds 76 N, 26.6 N of frictionfriction exceeds the 20 N cutter loadpusher_wedge
rail sag in OP 2−X0.61 mm printed, 0.01 mm steelunder 0.05 mm for a good seamrail_sag
why not 90°−X0.95° droop → 0.83 mmwould need a clevis with no playwhy_not_90

What is not proven — and how to settle each one

open questionwhy the model cannot answer itthe test that settles it
does the rail fit the real groove? the block's groove is 6.00 ± 0.20 and the printed rail is 5.9; 0.1 mm of clearance lives inside the printer's own error print the two rails, measure the 5.9 face, slide a block on. If it rattles, print again at your measured groove width − 0.1
is the glued 277 mm rail straight? straightness is a property of how you clamped the lap, not of the model roll it on a granite plate or a glass table and sight it; 0.05 mm of bow over 277 mm is what the seam can absorb
does the flip repeat? the 0.19 mm index number on −X is arithmetic on a 5.05 mm hole, not a measurement machine a flat on both sides, flip, and indicate the first face: the reading is your real repeatability
does the fixture survive a season? creep, wear and screw-boss fatigue are time-dependent assemble and disassemble 20 times, then re-measure the seat. −M is the version to trust here
is any of it printable at all? slicer behaviour differs from a support-area calculation slice it and look at the section view around every screw pocket and the rail socket

20 — the files, and what to re-run

Every file in the folder, and what to re-run after you touch it

Nothing here is a one-off export: every STL is regenerated by a script that first re-proves the geometry. If you change a number, the checks re-run and a failure means nothing is exported — a broken fixture cannot silently reach your slicer.

filewhat it iswritesrun it if…
jig.pythe printed fixture, parametric build123dstl/, step/, report.jsonyou changed a block dimension or a rail width
cnc.pythe machined fixturecnc/stl, cnc/step, cnc_report.jsonyou are making the metal version
zero.pythe zero-hardware fixturezh/stl, zh/step, zh/report.jsonyou are printing ZH
index.pythe rotary-carrier fixtureindex/stl, index/step, index/report.jsonyou are printing X
render.py · cnc_render.py · zero_render.py · index_render.pythe figures on this pageimg/*.pngyou moved a part and want the picture to agree
stress.pythe adversarial pass: corridors, hex keys, screw biteconsole outputyou want to know whether a human can assemble it
print_check.pyoverhang, bridging, bed fit, filament estimateprint_report.jsonafter any geometry change
make_guide.pythis documentguide.htmlafter any report changes
verify_guide.pymeasures the rendered page: anchors, overflow, ragged tablesconsole outputafter editing this document

Changing a parameter

you wantchange thisinthen run
a different block sizeBLOCK_L / BLOCK_W / BLOCK_H, and STOP_Xthe P block at the top of each scriptall four scripts + make_guide.py
a bought 6 × 6 bar instead of printed railssocket_w → 6.2, rail_w → your measured barjig.py / zero.py / index.pythe script, then print_check.py
to fit a block whose groove is tightrail_w → measured groove − 0.1the same three scriptsthe script
more X capacityJAW_X travel (X) or the collar's slide (223 / −M)the script's parameter blockthe script — capacity checks re-run
a steel rail on the printed fixturerail_h → your bar height, rail_w → 6.2jig.pythe script
a taller tower for a long toolTOWER_TOP / STAND_TOPthe script's parameter blockthe script — the clearance checks are geometry, so they follow
This page is generated, not written. make_guide.py reads the six report files and builds every table from them, then inlines each figure as base64 so the result is one 420 kB file you can email. verify_guide.py then measures the rendered page in a headless browser: every nav link resolves, no element overflows, no table has ragged columns, and the document is 1240 px wide with no horizontal scroll. Change a report, rebuild, and the numbers here move with it.

21 — troubleshooting

Each symptom, one cause

symptomcausefix
block rattles or rocks on the rail groove wider than the rail by more than 0.2 mm one wrap of masking tape on the rail's top face, or print the rail again at rail_w = your measured groove width − 0.1
block slides along the rail while cutting collar loose, or not touching the end face push the block against the stop, slide the collar up to it, tighten
halves offset at the seam in X or Y block not pushed against the stop the second time, or the rail is bowed re-seat; check the rail with a straight edge — a glued lap that was clamped crooked is the usual culprit
seam step in Z of ~0.3 mm s assumed to be 6.00 measure s and h, use the table in 05
tool or collet nut hits a tower stickout under 12 mm, or the car runs into the end band ≥ 14 mm stickout, car ≤ 203 mm
block drops during OP 2 the groove's walls were machined away re-design so the 6 mm channel survives; there is no second datum
a rail clamp screw turns freely and never bites it is in a clearance hole, not a pilot the tower is self-tapping: the hole must measure Ø3.3, and jig.py now refuses to export unless it does. If you printed from an older STL, drop a 3.3 mm drill through it

Problems that only happen on the later versions

symptomversioncausefix
the detent pin will not drop into the lever−X the 5.05 hole was printed with a blob at its mouth, or the cap's arm is 0.2 mm off the lever's boss run a 5.0 drill through by hand, then check the arm: with the pin out, the lever should rock against the cap's stop, not the arm
the jaw binds and jumps instead of sliding−X the two M6 grubs are at different depths, so the jaw is being cocked in its guide back both out two turns, push the jaw home by hand, then bring the grubs in alternately a quarter turn at a time
the lever turns but feels notchy−X the cradle caps are pinching the hubs — the caps clamp the deck, and the hub should be a slip fit back each cap screw an eighth of a turn; the hub should spin with a finger and have no visible play
the block scores on its end face after a few flips−X you flipped with the clamp on two turns out, lever, pin, two turns in — see 13
the two bed halves will not drop together−ZH · −X the dovetail's 11.9° flanks printed 0.2 mm fat, which is normal on a vertical wall with elephant's foot sand the tongue's flanks with 240 grit until the halves drop on by their own weight, then check that lifting them 1 mm still frees them
the wedge slips back while cutting−ZH dust on the 10° face, or you pushed it down at an angle so only one flank is loaded wipe both faces, rub a pencil on the incline (graphite is a dry lubricant that keeps the self-locking angle honest), and push straight down on the crown
the pusher's prongs hit the rail end−ZH the rail is not fully into the right tower's blind end push the rail in until it butts — there is a 0.4 mm designed gap, and the prongs clear the rail by 0.45 mm only when it is home
the block still rocks after the wedge is down−ZH the wedge has taken up its 2 mm and your block is short that is the designed limit: cut a 3 mm spacer from the same filament and put it behind the pusher, or use 223 / −X, which have 20 mm of travel
the machined bar is not 1.0 mm proud−M the pocket floor has R1.5 fillets from the ⌀3 cutter and the bar is sitting on them relieve the bar's two bottom edges 1.5 × 45° — that is what the chamfer pass in 11 is for
the machined cap pulls the bar off centre−M one M5 was tightened before the other, so the cap tilted and walked the bar snug both M5s, then torque in pairs, alternating sides