Model SMD pad copper: exact net pad shapes stamped on their layers
Build PCM package / build (push) Successful in 6s

Pads are the junctions where traces and thermal-relief spokes actually
meet; without their copper a multi-track junction necks down to the
accidental overlap of the rounded track ends, or is severed outright.
gather_smd_pad_copper fetches the exact shape of every undrilled pad
on the net (one API call per pad, layer from the padstack) and
build_problem stamps them onto their own layer (INCLUDE_SMD_PADS).
Selected SMD-pad contacts get their real copper as a side effect
(previously electrode-shape intersected whatever lay underneath).
Dead-end pads become floating islands that the existing connectivity
restriction drops.

Closes the documented SMD-pad-copper limitation (prompted by the
padne comparison).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
janik
2026-07-17 13:37:06 +07:00
parent 38f8cdf7be
commit bc95b444b4
4 changed files with 70 additions and 3 deletions
+7 -3
View File
@@ -137,9 +137,13 @@ SWIG API. Requires KiCad **10.0.1+**.
series resistance carries no discretization error and no cell-size
tuning is needed for thin traces. 1D-modeled traces show potential,
power density, and |J| (the true in-trace density from the link
currents, |ΔV|/(ρ·Δl)). THT pad copper is part of the conductor
(exact shapes, see above); **SMD** pad copper other than the
selected contacts is still **not**.
currents, |ΔV|/(ρ·Δl)). Pad copper is part of the conductor: THT pad
shapes are stamped on every included layer (see above), **SMD** pad
shapes on their own layer (`INCLUDE_SMD_PADS`) — pads are the
junctions where traces and thermal-relief spokes actually meet, so
without them a multi-track junction necks down to the accidental
overlap of the track ends. Dead-end pads (component terminals) are
dropped with the other copper not connected to both contacts.
- **Solder buildup on mask openings** (dialog checkbox, **off by
default**; `INCLUDE_MASK_BUILDUP`): zones drawn on `F.Mask`/`B.Mask`
are treated as mask openings that collect `SOLDER_THICKNESS_UM`