# Sheet-metal test parts for the instant quote

Real sheet-metal parts made with a CAD kernel (Open CASCADE through CadQuery), small to big, for testing an instant-quote
configurator. Each bent part comes as the bent 3D model (STEP, millimetres, one solid, cylindrical bends of inside
radius r and outside radius r + t, even thickness) and its flat pattern (DXF, inches).

- **Flat patterns** are unfolded with the K-factor in the table: each bend adds BA = θ · (r + K · t) (θ in radians, the
  angle the flange turns). The K-factors are the shop's per-material values: mild and galvanized steel 0.42,
  stainless 304 0.44, aluminum 6061-T6 0.45 (above the usual 0.33–0.44 range; it is the configured value for 6061-T6).
- **DXF layers**: `CUT` outline and holes; `BEND` bend lines (DASHED linetype, through the middle of each bend zone);
  `NOTES` text: next to every bend line its number, direction, angle and inside radius (for example
  `BEND 1 UP 90° R0.063`), and under the part the name, material, thickness, units and K-factor. UP means the flange
  comes up towards you as the flat pattern is drawn. Units: `$INSUNITS` = 1 (inches), except the millimetre problem file.
- **Shop drawings** (`<part>-drawing.dxf` and `.pdf`): an ANSI B sheet (17 × 11 in) per bent or flat part, the way a
  customer's engineer sends a part: border and title block (material spec, thickness, weight, drawing scale), tolerance
  block, the flat pattern at a stated scale (`SCALE 1:2` under the `FLAT PATTERN` label; dimensions show full size)
  with overall, bend-line and hole dimensions and a note on every bend line, front / top / right / isometric views of
  the bent part, a bend table and notes. In the DXF the flat pattern is on layers `CUT` and `BEND`; the views are on
  `VISIBLE` / `HIDDEN`, dimensions on `DIM`, the frame and title block on `BORDER` / `TITLE`. A quote engine that
  reads such a sheet must find the flat pattern and its scale, or send the file to a person.
  Two copies of one drawing test the reader on harder sheets:
  `angle-bracket-gusset-11ga-drawing-no-cut-layer.dxf`: The same shop drawing with the flat pattern on layer VISIBLE, like the bent views: no CUT or BEND layers, so the flat view must be found by its FLAT PATTERN label. Expected: read from the flat view labelled FLAT PATTERN.
  `angle-bracket-gusset-11ga-drawing-no-flat-label.dxf`: The flat pattern on layer VISIBLE and its FLAT PATTERN label renamed VIEW A: nothing on the sheet marks which view is the flat part. Expected: send it to a manual quote: a full drawing sheet whose flat part cannot be picked out.
- **Angles** are the angle the flange turns (a 45° bend leaves 135° between the faces).
- **Flat size** is the overall size of the flat blank. Bent sizes and every number here come from `parts.json`.
- Gauges: 16 ga 0.0598 in, 14 ga 0.0747 in, 11 ga 0.1196 in, galvanized 16 ga 0.0635 in.

Made by `tools/test-parts/parts.py` (CadQuery 2.8, ezdxf) in the Rainforge repo; checked by `verify.py` (ezdxf audit,
STEP re-import as one valid solid) and `engine-check.mjs` / `live-check.mjs` (the configurator reads the analytic flat
size within 0.01 in).

| Part | Files | Material | Thickness | Bends | Flat size | K | What it tests |
|---|---|---|---|---|---|---|---|
| L-bracket, 2 × 2 in | `l-bracket-16ga.step` / `l-bracket-16ga-flat.dxf` / `l-bracket-16ga-drawing.dxf` / `l-bracket-16ga-drawing.pdf` | Mild steel | 0.0598 in | 1: 90° up; inside R 0.0625 in | 3.893 × 1.500 in | 0.42 | The simplest bend: one 90° bend, inside radius about the thickness, two holes per leg. |
| Angle bracket with gusset bolt holes | `angle-bracket-gusset-11ga.step` / `angle-bracket-gusset-11ga-flat.dxf` / `angle-bracket-gusset-11ga-drawing.dxf` / `angle-bracket-gusset-11ga-drawing.pdf` | Mild steel | 0.1196 in | 1: 90° up; inside R 0.125 in | 5.786 × 3.000 in | 0.42 | Heavier gauge (11 ga) and a larger inside radius (0.125 in); holes on the centre line for a bolted gusset plate. |
| Z-bracket | `z-bracket-14ga.step` / `z-bracket-14ga-flat.dxf` / `z-bracket-14ga-drawing.dxf` / `z-bracket-14ga-drawing.pdf` | Mild steel | 0.0747 in | 2: 90° up, 90° down; inside R 0.078 in | 3.733 × 2.000 in | 0.42 | Two bends in opposite directions (UP then DOWN): the unfold must turn each flange the right way. |
| U-channel, 12 in | `u-channel-11ga.step` / `u-channel-11ga-flat.dxf` / `u-channel-11ga-drawing.dxf` / `u-channel-11ga-drawing.pdf` | Mild steel | 0.1196 in | 2: 90° up, 90° up; inside R 0.125 in | 4.572 × 12.000 in | 0.42 | Two bends the same way, a 12 in long part; holes in the web and the legs. |
| Hat channel, 24 in | `hat-channel-galv16.step` / `hat-channel-galv16-flat.dxf` / `hat-channel-galv16-drawing.dxf` / `hat-channel-galv16-drawing.pdf` | Galvanized steel | 0.0635 in | 4: 90° up, 90° down, 90° down, 90° up; inside R 0.0625 in | 4.552 × 24.000 in | 0.42 | Four bends, UP, DOWN, DOWN, UP; galvanized 16 ga (0.0635 in, a different gauge table from mild steel). |
| Shelf bracket with slots | `shelf-bracket-slots-14ga.step` / `shelf-bracket-slots-14ga-flat.dxf` / `shelf-bracket-slots-14ga-drawing.dxf` / `shelf-bracket-slots-14ga-drawing.pdf` | Mild steel | 0.0747 in | 1: 90° up; inside R 0.078 in | 10.866 × 1.500 in | 0.42 | Slots (obround cut-outs) on both legs: read as cut-outs, with their cut length and pierces. |
| Electrical enclosure tray | `enclosure-tray-16ga.step` / `enclosure-tray-16ga-flat.dxf` / `enclosure-tray-16ga-drawing.dxf` / `enclosure-tray-16ga-drawing.pdf` | Mild steel | 0.0598 in | 4: 90° up, 90° up, 90° up, 90° up; inside R 0.0625 in | 10.786 × 8.786 in | 0.42 | A tray: base and four walls (four bends) with closed corners and rectangular corner reliefs; mounting holes, vent slots and a connector window in the walls. |
| Enclosure lid | `enclosure-lid-16ga.step` / `enclosure-lid-16ga-flat.dxf` / `enclosure-lid-16ga-drawing.dxf` / `enclosure-lid-16ga-drawing.pdf` | Mild steel | 0.0598 in | 4: 90° up, 90° up, 90° up, 90° up; inside R 0.0625 in | 9.036 × 7.036 in | 0.42 | Short walls (0.5 in) on four sides: the walls are close to the flange minimum; screw holes and vent slots in the top. |
| Mounting plate with countersinks | `mounting-plate-csk-316.step` / `mounting-plate-csk-316.dxf` / `mounting-plate-csk-316-drawing.dxf` / `mounting-plate-csk-316-drawing.pdf` | Mild steel | 0.1875 in | none (flat) | 6.000 × 4.000 in | n/a | Flat part, no bends, 3/16 in plate. The STEP has four 82° countersinks (cones): the reader must still see an even-thickness plate. The DXF has the through holes only. |
| Motor mount with slotted holes | `motor-mount-slotted-11ga.step` / `motor-mount-slotted-11ga-flat.dxf` / `motor-mount-slotted-11ga-drawing.dxf` / `motor-mount-slotted-11ga-drawing.pdf` | Mild steel | 0.1196 in | 1: 90° up; inside R 0.125 in | 6.036 × 3.000 in | 0.42 | Motor mount: a 1.56 in pilot bore and four belt-tension slots on the NEMA 23 square, two adjustment slots in the base. |
| Chassis rail, 48 in | `chassis-rail-48in-11ga.step` / `chassis-rail-48in-11ga-flat.dxf` / `chassis-rail-48in-11ga-drawing.dxf` / `chassis-rail-48in-11ga-drawing.pdf` | Mild steel | 0.1196 in | 4: 90° up, 90° up, 90° up, 90° up; inside R 0.125 in | 6.644 × 48.000 in | 0.42 | Long part (48 in): four bends over 48 in, the brake runs the long-part bend time; a hole every 6 in. |
| Plate bracket, 3/16 in, two bends | `plate-bracket-316-2bend.step` / `plate-bracket-316-2bend-flat.dxf` / `plate-bracket-316-2bend-drawing.dxf` / `plate-bracket-316-2bend-drawing.pdf` | Mild steel | 0.1875 in | 2: 90° up, 90° up; inside R 0.1875 in | 13.336 × 8.000 in | 0.42 | Heavy plate (3/16 in, inside radius 0.1875 in) with two bends, 8 in wide; 1/2 in bolt holes. |
| Box with flanges and hardware holes | `box-flanged-16ga.step` / `box-flanged-16ga-flat.dxf` / `box-flanged-16ga-drawing.dxf` / `box-flanged-16ga-drawing.pdf` | Mild steel | 0.0598 in | 6: 90° up, 90° down, 90° up, 90° down, 90° up, 90° up; inside R 0.0625 in | 15.786 × 13.072 in | 0.42 | Six bends: four walls with closed corners and corner reliefs, outward flanges on the long walls with holes sized for self-clinching nuts. |
| Bracket with a 45° bend | `bracket-45deg-14ga.step` / `bracket-45deg-14ga-flat.dxf` / `bracket-45deg-14ga-drawing.dxf` / `bracket-45deg-14ga-drawing.pdf` | Mild steel | 0.0747 in | 1: 45° up; inside R 0.078 in | 5.959 × 2.000 in | 0.42 | A non-90° bend: one 45° bend (the flange turns 45°, 135° included). The bend allowance uses 45°. |
| Aluminum cover, 0.090 in | `cover-al6061-090.step` / `cover-al6061-090-flat.dxf` / `cover-al6061-090-drawing.dxf` / `cover-al6061-090-drawing.pdf` | Aluminum 6061-T6 | 0.09 in | 2: 90° up, 90° up; inside R 0.09 in | 6.190 × 3.000 in | 0.45 | Aluminum 0.090 in (stocked in 6061-T6 only): another material, its own K-factor (0.45) and the 6061 bend caution. |
| Stainless guard, 14 ga | `guard-ss304-14ga.step` / `guard-ss304-14ga-flat.dxf` / `guard-ss304-14ga-drawing.dxf` / `guard-ss304-14ga-drawing.pdf` | Stainless 304 | 0.0747 in | 3: 90° up, 90° down, 90° down; inside R 0.078 in | 6.106 × 4.000 in | 0.44 | Stainless 304, 14 ga (K 0.44): three bends, a 0.5 in return lip, a slot in the face. |
| Problem: holes too close to the bend | `problem-hole-near-bend-14ga.step` / `problem-hole-near-bend-14ga-flat.dxf` / `problem-hole-near-bend-14ga-drawing.dxf` / `problem-hole-near-bend-14ga-drawing.pdf` | Mild steel | 0.0747 in | 1: 90° up; inside R 0.078 in | 3.866 × 2.000 in | 0.42 | Two 1/4 in holes whose edges sit 0.075 in from where the bend starts: they will stretch out of round. Expected: warn that the holes sit closer to the bend than 2.5 × t + t and may stretch. |
| Problem: flange too short | `problem-short-flange-11ga.step` / `problem-short-flange-11ga-flat.dxf` / `problem-short-flange-11ga-drawing.dxf` / `problem-short-flange-11ga-drawing.pdf` | Mild steel | 0.1196 in | 1: 90° up; inside R 0.125 in | 3.136 × 3.000 in | 0.42 | An 11 ga flange 0.35 in tall (outside): on the flat it is 0.24 in past the bend line, under the 4 × t (0.48 in) the brake die needs. Expected: flag the flange as shorter than 4 × thickness, too short for the brake die. |
| Problem: open hem (180° bend) | `problem-open-hem-16ga.step` / `problem-open-hem-16ga-flat.dxf` / `problem-open-hem-16ga-drawing.dxf` / `problem-open-hem-16ga-drawing.pdf` | Mild steel | 0.0598 in | 1: 180° up; inside R 0.03 in | 3.673 × 4.000 in | 0.42 | A 180° open hem (inside radius 0.03 in, half the thickness). Hems need their own tooling and are out of scope for the v1 instant price. Expected: send it to a manual quote and say it has a hem. |
| Problem: millimetre DXF with an open outline | `problem-open-outline-mm.dxf` | Mild steel | 150 × 100 mm plate | none (flat) | 5.906 × 3.937 in | n/a | A 150 × 100 mm plate saved in millimetres ($INSUNITS = 4) whose outline stops 0.8 mm short of closing. Expected: read it in millimeters (5.906 × 3.937 in) and flag the outline that does not close. |

## Machined parts (`machined/`)

Ten CNC parts, each a STEP model (millimetres, one solid) and the PDF drawing a customer sends with it (ANSI B sheet,
top, front, right and isometric views, thread and hole callouts, notes, tolerance block and title block; the PDF has a
real text layer). Threads are in the model only as tap-drill holes (a 1/4-20 hole is 0.201 in): the drawing says which
holes are tapped, the material, the tolerance, the surface finish (Ra) and the finish. `machined/machined.json` lists
each part's expected analysis: holes (diameter, count, through or blind), pockets and slots, the smallest inside radius,
setups from the six axis directions, the flags (undercut, angled hole, thin wall, deep pocket, lathe part) and where the
quote should send it (instant, indicative or the shop). Made by `tools/test-parts/machined.py` (CadQuery 2.8).
All ten in one zip: `machined-parts.zip`.
