Mark low-current copper as polygons on user layers (dialog opt-in)
Build PCM package / build (push) Successful in 7s
tests / ubuntu-latest · py3.11 (push) Successful in 53s
tests / ubuntu-latest · py3.13 (push) Successful in 1m43s
tests / archlinux:latest (push) Successful in 39s
tests / debian:12 (push) Successful in 49s
tests / fedora:latest (push) Successful in 1m1s
tests / ubuntu:24.04 (push) Successful in 1m26s
tests / NixOS (FHS wrapper from docs/NIXOS.md) (push) Has been skipped
Build PCM package / build (push) Successful in 7s
tests / ubuntu-latest · py3.11 (push) Successful in 53s
tests / ubuntu-latest · py3.13 (push) Successful in 1m43s
tests / archlinux:latest (push) Successful in 39s
tests / debian:12 (push) Successful in 49s
tests / fedora:latest (push) Successful in 1m1s
tests / ubuntu:24.04 (push) Successful in 1m26s
tests / NixOS (FHS wrapper from docs/NIXOS.md) (push) Has been skipped
New EXPERIMENTAL dialog option (default off): after the solve, copper whose |J| is below a threshold (default 10% of the mean |J| over all solved copper cells - mean, not max, since contact-corner spikes would dwarf a max-relative threshold) is vectorized into filled graphic polygons on TRIM_LAYERS (User.5..User.8, configurable), one polygon per region so Edit > Convert can turn one into a rule area by hand. Areas are printed and the polygons saved to low_current_copper.json. The mask -> polygon step is the 0.5 contour of the binary field via contourpy (already in every venv as matplotlib dependency), padded so regions touching the raster edge close, simplified with Douglas-Peucker at 0.4 cells: staircase bevels collapse, one-cell-wide strips survive. Specks under TRIM_MIN_AREA_MM2 are dropped. Explicitly a suggestion, not a safe cut list (docstring, dialog and README all say so): copper carries little current BECAUSE the rest carries it, so removal redistributes |J| - the constant-density optimizer that iterates this to convergence is future work. board_io: the create/delete-with-status-surfaced helpers are now generic (_create_items_checked / _remove_items_checked) and shared between reference-image overlays and trim polygons. Tested on the dev stack (3.13) and the Python 3.9 mac-stack venv, 148 passed each; contourpy 1.3.x has identical API on both. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -177,6 +177,24 @@ spelled out per step and in *Platform notes* below.
|
||||
reference images on those layers**, so don't store unrelated images
|
||||
there. Also available headless:
|
||||
`python tools/kicad_heatmap_overlay.py --net X --amps 10`.
|
||||
6. **Experimental — low-current copper marking** (dialog checkbox,
|
||||
default off): after the solve, the copper whose |J| is **below a
|
||||
threshold** (dialog-settable, default 10 % of the mean |J| over all
|
||||
solved copper) is outlined as **filled graphic polygons** on
|
||||
`User.5`…`User.8` (`TRIM_LAYERS` in `fill_resistance/config.py`;
|
||||
enable them in Board Setup), copper layers mapped in stackup order,
|
||||
top first. Marked specks under `TRIM_MIN_AREA_MM2` (0.5 mm²) are
|
||||
dropped. Each region is one selectable polygon — use KiCad's
|
||||
**Edit → Convert** to turn one into a rule area or zone cutout by
|
||||
hand. Per-layer areas are printed to the Messages panel and the
|
||||
polygons also land in `low_current_copper.json` next to the PNGs.
|
||||
Every push **replaces all graphic polygons on those layers** (one
|
||||
undo step). **This is a suggestion, not a safe cut list**: copper
|
||||
carries little current *because* the rest carries it — removing
|
||||
copper redistributes the current and raises |J| everywhere else, so
|
||||
re-run after any change. The pour may also serve thermal spreading,
|
||||
EMI return paths, or plane capacitance, which this DC analysis does
|
||||
not see.
|
||||
|
||||
## Model & limits
|
||||
|
||||
|
||||
Reference in New Issue
Block a user