Files
2026-06-11 17:00:04 +02:00

121 lines
5.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Wargame Accessory Box & Dice Tray
A parametric OpenSCAD box for carrying tabletop wargaming accessories.
Four printable parts:
| Part | Purpose |
|----------|--------------------------------------------------------------------|
| `box` | Open tray. With the insert removed it doubles as a dice tray. |
| `lid` | Fully detachable lid, held shut by snap latches hinged on filament pins (or a classic friction fit). |
| `latch` | One-piece snap latch — print two per latch position. |
| `insert` | Removable compartment tray for tokens, measuring tapes, etc. |
![Assembly](docs/assembly.png)
## Quick start
Open `wargame_box.scad` in OpenSCAD and set the three `total_*` values to
the free space in your backpack — they are **outer** dimensions and
`total_z` already includes the closed lid, so the printed result fits the
measured space exactly.
Pick what to render with the `part` variable (or the customizer):
`assembly` (exploded preview), `box`, `lid`, `insert`, `latch`, `print`.
Or export everything from the command line:
```sh
make # exports stl/box.stl, stl/lid.stl, stl/insert.stl, stl/latch.stl
```
## The latch lid
By default (`lid_style = "latch"`) the lid is held shut by snap
latches that hinge on short pieces of filament:
* The **lid** carries pairs of lugs along its front and back edges.
* Each **latch** is a single printed part with a pivot barrel that
fits between a lug pair. Its window snaps over a chamfered catch
bar on the box wall; pull the flared tip outward to open.
* To assemble one latch: cut a ~23 mm piece of 1.75 mm filament,
slide it through lug → latch barrel → lug, and fix it with a drop
of glue **on the outer lug holes only** — the lug holes are sized
tight and the barrel hole loose, so the latch keeps pivoting
freely. Trim the pin flush.
Tuning knobs (all per side unless noted):
* `latches_per_side` — how many latches on each long wall
(default 2, evenly spread).
* `catch_proud` — how far the catch bar sticks out = how hard the
snap is (default 1.4 mm).
* `latch_play` — vertical play between latch and catch bar
(default 0.1 mm). Use a small negative value to preload the lid
shut.
* `filament_d` — hinge pin diameter, in case you want to use
2.85 mm filament or a piece of wire instead.
Note: lugs and latches stick out about 7 mm beyond the box on the
front and back, so allow `total_y + 14` of space in the backpack.
With latches doing the holding, a looser lip (`lid_clearance` around
0.30.4) makes the lid pleasant to take off.
Prefer the original hinge-free push-fit lid? Set
`lid_style = "friction"` and you get the old behaviour, including
the thumb grooves for prying the lid off.
## Configuring the insert layout
Compartments are defined by the `layout` list, one entry per row
(front to back):
```
layout = [
[1.0, [1, 1, 1, 1]], // front row: 4 equal token bins
[1.0, [2, 1, 1]], // middle row: 1 double-width + 2 small
[0.8, [1]] // back row: full-width slot (tapes etc.)
];
```
* The first number is the **row depth weight**.
* The list is the **column width weights** within that row.
Weights are relative, so the layout always fills the insert exactly no
matter what box size you choose. A row weight of `2` is twice as deep as
a row of weight `1`; a column weight of `2` is twice as wide as `1`.
To print a second insert variant (e.g. for a different game system), just
change `layout`, re-export, and swap inserts as needed. Two half-height
stacked inserts are possible too: set `insert_h_override` to about half
of the automatic height and print two with different layouts.
## How the parts work together
* The **lid** is a flat plate with a lip that plugs into the box opening.
With the latch lid the lip just aligns the lid (and keeps tokens in
their compartments); with `lid_style = "friction"` it carries the
whole fit. `lid_clearance` (default 0.2 mm per side) controls how
snug it is — print a test fit and adjust for your printer/material.
In friction mode, shallow thumb grooves on the box's front and back
walls let you pry the lid off; they do **not** pierce the wall, so
the dice tray stays fully closed.
* The **insert** sits below the lid's lip, so the lip also keeps loose
tokens from jumping compartments in the bag. Finger notches on its
short walls let you lift it straight out; then the empty box is your
dice tray. `tray_chamfer` puts a 45° bevel around the floor edges so
dice don't lodge in the corners.
## Printing notes
* No supports needed for any part. Print all parts flat side down
(the lid prints plate-down, lip and lugs up). The latch prints
standing on its flat side — that gives a clean pivot hole and puts
the layer lines along the strip, where the snap stress is.
* PLA or PETG, 23 perimeters, ~10 % infill (the parts are mostly walls).
* If the lid is too tight/loose, tune `lid_clearance` in steps of 0.05 mm.
Same for the insert with `insert_clearance` (looser is fine there —
it just needs to drop in and lift out easily).
* A piece of felt glued into the box floor makes dice rolling quieter;
if you plan this, add the felt thickness to nothing — the inner depth
is generous — but you may want `tray_chamfer = 0` for a flat floor.