Skip to content
Batch B11 › After the kit-day measurements11 / 14

Step B11.11 — Regenerate a piece whose gap differs

Step 11 of 14 · Batch B11 — Bay ducting (PETG V0)

(no image — see text)

Do:

  1. Stub length: the 12 mm step at or below the SSR gap minus 90. Run the recipe only if that is 22 or more.
  2. Make the three edits in its comments.
  3. Run its last line.
# once: python3 -m venv ~/.venv-remix && ~/.venv-remix/bin/pip install trimesh manifold3d numpy
# the MSS parents are committed in slicer/stl/bayducts/mss/502306/ (Printables 502306 was withdrawn)
# L = new length, 22, 34, 46 … (10 + 12n). P = parent: 82 for L up to 70, 142 up to 130, else 154.
REPO=$PWD L=22 P=82
S=$(mktemp -d); mkdir -p $S/mods/layout-v2 $S/mods/layout-v3/remix
ln -s "$REPO/slicer/stl/bayducts/mss/502306" $S/mods/502306-cable-duct
ln -s "$REPO/review/2026-09-23-bay-mods/layout-v2/remix" $S/mods/layout-v2/remix
cd review/2026-09-23-bay-mods/layout-v3/work
# importing remix_v3 re-runs all of layout v3 into $S first, and its listing prints before the new piece exists
BAY_MODS_SCRATCH=$S L=$L P=$P ~/.venv-remix/bin/python -c "
import os, trimesh, remix_v3 as r; L, P = int(os.environ['L']), int(os.environ['P'])
assert L % 12 == 10 and 22 <= L < P, 'L must be 22, 34, 46 ... and shorter than the parent P'
for part, new in (('CMD_V3_1H_%dmm_DUCT', 'V3L_%dmm_DUCT'), ('CMD_V2_6B_%dmm_DUCT_COVER', 'V3L_%dmm_DUCT_COVER')):
    r.save(r.shorten(r.D + part % P + '.stl', P - L, 11.0), new % L + '.stl')
    m = trimesh.load(r.OUT + new % L + '.stl'); print('NEW', new % L, m.extents.round(1), 'watertight' if m.is_watertight else 'OPEN')"
cp $S/mods/layout-v3/remix/V3L_${L}mm_DUCT*.stl "$REPO/slicer/stl/bayducts/remix/"
cd "$REPO"
# edit 1, slicer/plates.py B11-P4: V3L_10mm_DUCT and V3L_10mm_DUCT_COVER 3 -> 2, add V3L_${L}mm_DUCT and _COVER x1.
#         The other two 10 mm pieces keep their roles; never rename the 10 mm line.
# edit 2, slicer/plates.py ORIENT: add "V3L_${L}mm_DUCT.stl" to the "flip" list. The duct is drawn base up, as
#         remix_v3 leaves every body, and flip prints it base down. The cover needs no entry.
# edit 3, slicer/bins.py: ASSIGN "V3L_${L}mm_DUCT.stl" -> "09-ducts-AC" and its _COVER -> "10-lids-AC"; the 10 mm
#         lists stay as they are (copy 1 is the DC one). NOTES: the 10 mm line becomes "1 in 09-ducts-DC (rear-upper
#         run), 1 in 09-ducts-AC (SSR run right end)", and "V3L_${L}mm_DUCT.stl": "stub into the box port".
python3 slicer/fetch_stls.py && python3 slicer/build_plates.py --nest B11-P4 && python3 slicer/check_docs.py
python3 slicer/bin_bags.py --check

check Check

Both NEW lines say watertight, B11-P4 slices with the new duct base down, and check_docs.py passes once the B11 figures it names are updated.

What you're looking at

Every custom straight is a stock MSS duct with a slab cut out. Lengths come in 12 mm steps, 10, 22, 34 up to 154 mm, because each cut sits on a tine boundary. Only the stub changes with a bench gap.

tip Tip

If B11.10's psu row also failed, the SSR run's right-end 10 mm piece comes off P4 too: one fewer on the 10 mm line.

pause Good stopping point · ~15 min since the last one

every piece that needed it is regenerated, back on B11-P4 and re-sliced; check_docs.py is green.

Source: review/2026-09-23-bay-mods/layout-v3/work/remix_v3.py · layout-v2/work/remix.py · slicer/stl/bayducts/README.md