The pad face is wetted where the joint is: the protrusion side,
opposite the component (already read from the owning footprint). The
component-side pad face stays bare - contact_solder_buildups and
tht_joint_buildups no longer coat both outer layers.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
No size-threshold guessing: whether a hole is a via or a THT pad
already comes from KiCad (board.get_vias vs drilled board.get_pads).
Every populated THT pad of the net now carries the complete joint the
contacts got: solder-filled barrel, average-thickness coat over a
pad-diameter disc on the outer layers, and the protruding-lead cone on
the side opposite its owning footprint. The footprint side and the
Do-not-populate flag are read from KiCad (footprint pads store absolute
positions, so owner lookup is an exact (x, y, number) map); DNP pads
stay plating-only with no joint. Contact pads are deduplicated by
barrel center so their cone/coat is never applied twice.
Barrels are now gathered in single-layer runs too: via rings and drill
mouths perforate a lone plane, THT joints stiffen it locally.
ViaLink gains solder_filled + protrusion_side (legacy dumps load with
the old every-THT-pad-filled semantics).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The clipped lead of a soldered THT contact protrudes
THT_LEAD_PROTRUSION_MM (1.5 mm default, 0 disables) out of the hole on
the side opposite the component, and a solder cone wraps it: full
protrusion height at the drill wall, tapering linearly to zero at the
pad edge. Painted as per-cell extra conduction-equivalent copper via
stack.thick_scale - the tall solder column at the wall pulls the joint
vicinity to lead potential (equivalent to extending the barrel wall
vertically), the taper carries the radial spreading. DC-exact additive
conductance; at f > 0 the factor multiplies the skin-corrected sheet
conductance like the via mouths (documented approximation).
The protrusion side is looked up from the owning footprint (pads store
absolute positions; component on F.Cu -> lead tents on B.Cu), with a
logged B.Cu fallback. Dump schema gains protrusion_side and
tht_protrusion_nm (defaults keep older v6 dumps loading).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Selected vias and through-hole pads inject at the drill-wall ring on
every spanned layer (both contact models), not the whole pad face,
so the pad/pour spreading resistance is part of the result. Vias are
now selectable as contacts.
- Soldered THT joints: the hole is modeled solder-filled (core in
parallel with the plating, also for stitching THT barrels) and the
pad face carries an average-thickness solder coat over the modeled
copper (SOLDER_THICKNESS_UM).
- Vias with drills above a configurable threshold (dialog field,
default CAP_MAX_DRILL_MM = 0.5) keep open mouths even with capping
selected - the fab caps only small vias.
- Geometry dump schema v6: electrode barrel fields, cap_max_drill_nm.
- Verified against R = rho/(pi t)*acosh(d/2a) for two circular contacts
on a sheet (+2.6% at h = 0.15 mm, a = 1 mm; uniform model above the
equipotential one as required by the contact bracket).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>