Step B11.11 — Regenerate a piece whose gap differs¶
Step 11 of 14 · Batch B11 — Bay ducting (PETG V0)
(no image — see text)
Do:
- Stub length: the 12 mm step at or below the SSR gap minus 90. Run the recipe only if that is 22 or more.
- Make the three edits in its comments.
- 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
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
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.
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