PADSTACK::CopperLayer() (const overload) used m_copperProps.at(ALL_LAYERS)
as a final fallback. For CUSTOM padstacks, ALL_LAYERS == F_Cu is the only
key present after a freshly-created CUSTOM padstack (converted from NORMAL).
When a pad belonging to a flipped footprint was edited in the Pad Properties
dialog, TransferDataFromWindow would call m_currentPad->Flip() after copying
the padstack from the (front-side) preview pad. PAD::Flip() calls
PADSTACK::FlipLayers() which, in CUSTOM mode, renames every copper-layer key
in m_copperProps via BOARD::FlipLayer(), so F_Cu became B_Cu. After the
flip, ALL_LAYERS (= F_Cu) was no longer in m_copperProps.
Any subsequent const call to CopperLayer(F_Cu) -- e.g. from
PAD::GetMsgPanelInfo() which uses PADSTACK::ALL_LAYERS as a hardcoded
layer -- then fell through to m_copperProps.at(ALL_LAYERS) and threw
std::out_of_range, surfacing as an "Unhandled exception" error.
Fix: in const PADSTACK::CopperLayer() for CUSTOM mode, if the requested
layer is not explicitly in the map and ALL_LAYERS is also absent, return
the first available entry instead of throwing. Apply the same defensive
logic to PADSTACK::EffectiveLayerFor().
Adds a regression test (Issue23234_CustomPadstackFlip) in qa_pcbnew.
Fixes: https://gitlab.com/kicad/code/kicad/-/issues/23234
This breaks the view_item.h -> inspectable.h -> property.h chain that
pulled wx/propgrid/property.h into 150-200 TUs. The lean inspectable.h
now includes only wx/any.h, wx/string.h, wx/variant.h.
Headers using DECLARE_ENUM_TO_WXANY (board_item.h, sch_item.h) retain
their property.h include since the macro requires it.
While it might be tempting to put these in the individual property
setters, there's no well-defined order in which they're called,
and many of the consistency checks are between multiple properties.
Also include specifically defined padstack items. So if a padstack
includes a unique shape on a layer, include it in the list.
We may want to reduce the sensitivity of the check in the future
Fixes https://gitlab.com/kicad/code/kicad/-/issues/21363
These parameters store a similar info for round rect corner, but only one should
be used to avoid missing init of one value (or mismatch) in code.
round_rect_radius_ratio is now only kept.
- Allow setting backdrill (from B.Cu up) and tertiary drill (from F.Cu
down) width and target layer (backdrill is inclusive)
- Allow setting post machining options (counterbore, countersink)
- Update properties for vias and THT pads
- Add output for Excellon and Gerber drill files as separated files for
different drill depths
- Add drill map output calling out post-machined holes
- Add STEP export support
- Add 3d-viewer support
- Add 2581 support using backdrill property. Post machining called out
in comments
- Add ODB++ support using separate drill file for each depth
- Add DRC check for tracks connected to pad layers that are backdrilled
or post-machined
Fixes https://gitlab.com/kicad/code/kicad/-/issues/18836
Recommendation is to avoid using the year nomenclature as this
information is already encoded in the git repo. Avoids needing to
repeatly update.
Also updates AUTHORS.txt from current repo with contributor names
This tidies up quite a performance hit on layer change
caused by repainting vias, pads and tracks for their
clearances.
Instead, on a layer change, just disable any old clearance
layer and enable the new one (if any).
Fixes: https://gitlab.com/kicad/code/kicad/-/issues/19404
The primitives were not duplicated in the new pad, so creating bugs especially
when trying to edit a flipped custom shaped pad or its footprint parent
(just opening/closing the dialog break the pad).
CHANGED: PCB file format now supports saving/loading complex padstacks
CHANGED: PTH pads are now rendered per copper layer in the copper color;
the PTH pad color is no longer used.
ADDED: support for importing complex pad stacks from Altium PCBs
Enforce padstack-aware access to pad properties across KiCad
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8182