busbars: FDM test-print export (extruded STL + STEP)

Adds a way to print a busbar on a 3D printer to physically verify
sizing before laser-cutting nickel/copper. The existing "Extrude
solid + 0.2mm" path stays for thin-strip STEP — slicers can't print
0.2mm sheet — so the FDM path has its own thickness input (default
2mm, min 0.5mm).

Backend:
- busbar_export.py: new to_stl() writer. Forces extrude_flag = True
  (STL is inherently 3D) and bumps thickness up to 2mm if the
  incoming value is <0.5mm. Registers under WRITERS["stl"] so the
  existing /api/export/<fmt> route serves it for free.

UI:
- index.html: new "FDM test print" block under the Params panel
  with its own thickness input and two buttons (STL, STEP). The
  existing 'Extrude solid' checkbox + 0.2mm thickness keep
  driving plain "Export STEP".
- styles.css: .fdm-block / .fdm-row / .fdm-buttons styles
  matching the existing panel typography.
- app.js: _exportFdm(fmt) reuses Exporter.exportFormat with a
  shallow-merged params override ({extrude: true, thickness: fdmT}),
  so the on-the-fly request gets the FDM settings without
  mutating the live params state.

Verified: STL render of a 3-cell strip @ 2mm => 73KB binary STL
(opens cleanly in slicers); STEP @ 2mm => 160KB ISO-10303-21
solid; existing flat STEP path unchanged at 15KB.
This commit is contained in:
wenil
2026-05-25 14:04:19 +03:00
parent 102cfcee64
commit 7512393ef4
4 changed files with 79 additions and 1 deletions
+17 -1
View File
@@ -115,7 +115,23 @@
<label>Slit width (mm) <input type="number" id="p-slit-width" value="1.0" step="0.1" title="Width of each cross arm"></label>
<label>Neighbor factor <input type="number" id="p-neighbor-factor" value="1.15" step="0.05" min="1.0" title="Bridge two cells if distance ≤ factor × shortest pair distance"></label>
<label class="checkbox"><input type="checkbox" id="p-extrude"> Extrude solid</label>
<label>Thickness (mm) <input type="number" id="p-thickness" value="0.2" step="0.05"></label>
<label>Thickness (mm) <input type="number" id="p-thickness" value="0.2" step="0.05"
title="Used only with 'Extrude solid' above (STEP export of a thin nickel/copper plate). FDM print uses its own thickness below."></label>
</div>
<div class="fdm-block">
<h3 class="fdm-title" title="3D-printable plate for verifying dimensions on a real printer. Forces extrusion regardless of the 'Extrude solid' checkbox.">
FDM test print
</h3>
<div class="fdm-row">
<label>Thickness (mm)
<input type="number" id="p-fdm-thickness" value="2.0" min="0.5" step="0.1"
title="Layer-printable wall thickness. 2 mm is a safe starting value on a 0.4 mm nozzle.">
</label>
<div class="fdm-buttons">
<button id="btn-export-fdm-stl" type="button" class="primary" title="Extruded STL ready for the slicer">STL</button>
<button id="btn-export-fdm-step" type="button" title="Extruded STEP for CAD import">STEP</button>
</div>
</div>
</div>
</section>