Replace the single stacked config pane with a top tab strip (Pack, Cells, BMS,
Busbars) so only one group is visible at a time. Pack sizing defaults to
Series × Parallel with a summary chip that shows count and footprint, with a
mm-size mode for users who prefer direct dimensions. Cells and Housing are
merged under one tab separated by a divider.
Exports are now per component: the cellholder is a STEP solid, and each busbar
downloads as either STEP (3D stencil) or DXF (flat laser cut pattern) chosen by
a dropdown. Mirrored and rotated duplicates are deduplicated by a
pairwise-distance signature so only one copy per shape class is emitted.
The DXF writer produces just the union outline: pads as CIRCLE or ARC entities
restricted to uncovered angular ranges, capsule sides as LINE entities clipped
(Liang-Barsky + disc intersection) against every other primitive so no lines
remain inside the busbar body.
README documents setup, features, and project layout.
At every vertex (cell or waypoint) where two capsule segments meet, the union of the
rectangles and pad discs left a sharp inward V on the concave side. Canvas lineJoin
only smooths the convex side, so added an explicit tangent-arc region per concave
corner: intersect the inner offset lines to find the notch tip, place the arc center
on the angle bisector at radius padRadius, and fill the curved-triangle bounded by
the two tangent points and the arc. The added subpath unions into the existing fill.
Pan/zoom handlers redraw the cell holder canvas but skipped the busbar overlay, which was only drawn from updatePreview(). Cache the last draw args and expose redrawBusbarOverlay() so the overlay stays visible during wheel, drag, and touch interactions.