Footprints now modify their parent container when destroyed due to
26542796, and a temporary footprint is created during DRC
in some situations. This can lead to board caches being messed
with during DRC which can cause unpredictable bad effects due to
multithreading.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/13844
(cherry picked from commit 8440d7258b)
We need a more advanced dirtying system for this to work out for
many users, it turns out. Right now too many changes cause full
zone refills which interrupt workflow.
(cherry picked from commit d8f4d04093)
Since the always plot the edge cuts layer option was deprecate,
the ability to plot multiple board layers was exposed through the
PLOT_CONTROLLER object.
Added the interactive plot information which was overlooked during
version 7 development.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/13841
(cherry picked from commit eb83f76bff)
Nominally, the zcode of a vertex is unique. This is not 100% true,
however, as we must interlace two 32-bit numbers into a single 32-bit
number. Sorting needs to account for the possibility that the zcode
will be the same while other elements of the vertex are different. This
commit fixes the broken boolean logic to more clearly handle these cases
Fixes https://gitlab.com/kicad/code/kicad/issues/13867
(cherry picked from commit e7fe69b97f)
When adding new data, we may have differing sizes of the dynamic
ratsnest and our local copy, so ensure that we are only referencing
elements that exist in both
When two zones with the same net and same priority overlap, they should
both be filled, matching the behavior of v6. If you would like an
explicit override of one or the other, you need to set the zone priority
higher. Relying on the UUID as a tie breaker is good for zones with
different nets but creates unexpected changes from v6 when applying it
to zones of the same net
This makes it clearer that the overrides are not inverses of each
other -- one overrides the flashing state and the other overrides
the connection state (to other zones, not to everything).
Also fixes a bug where we were failing to check the force-no-connect
for pads.
If removing unused via annular ring option is enabled on a layer, then the via will have the ring if both:
- Via center is not inside a rule area with "Keep out copper fill" flag set
- Highest-priority zone the via hole intersects with has the same net
Pads will be flashed if:
- Pad center is not inside a rule area with "Keep out copper fill" flag set
- Highest-priority zone at the pad center has the same net
Fixes https://gitlab.com/kicad/code/kicad/issues/12964
1) Special case doesn't work for polygons with holes
2) Fix special case to handle intersecting lines where neither end is
in the polygon.
Note that only (1) is required for the bug below. (2) was just
discovered while implementing (1).
Fixes https://gitlab.com/kicad/code/kicad/issues/13779
Remove some useless spacers, and do not force some widgets to have a to
large size (by removing empty areas).
Work in progress: one panel is still too big.
Internal routines have no need for locking the mutex they already own.
While external routines that want to recalculate the Ratsnest do need an
exclusive lock before being allowed access
Fixes https://gitlab.com/kicad/code/kicad/issues/13011
Just testing a single point to find copper that is outside the board works
until the arc->segment conversion moves the board outline just enough to
have the filled copper slightly (few IU) outside of the converted outline.
Instead, we do an expensive check of comparing the size of the
intersection between the island and the island's intersection with the
board. If the intersection is at least half as large as the original
island, we can say with certainty that the island is inside. The margin
could be much smaller than half but this preserves the intent without
picking an arbitrary number that might be violated
Fixes https://gitlab.com/kicad/code/kicad/issues/13717
The polygon conversion algorithm mistakenly stored the stroke width of
filled polygons in an integer variable. As a result, all stroke widths
were rounded down to the next smaller integer mm size. This commit changes
the types in the relevant functions and variables from int to double.
Also ensure that calculated areas for island removal are absolute.
The on-outline zone can happen when the clearance to the edge is
particularly small.
Fixes https://gitlab.com/kicad/code/kicad/issues/13717
The lib table returns a properly sorted list of libraries already, which
we just iterate through. A std::set is a sorted collection, but uses a
different sorting function than the lib table, so appending to a
std::set breaks the initial sorting that was done already.
Fixes: https://gitlab.com/kicad/code/kicad/-/issues/13530
It is hard for a user to tell what is going on when their zone
just doesn't fill at all. We catch isolated areas in the DRC so
we can just leave them alone here until the zone has at least one
non-isolated filled area.
Also change default back to always remove islands to reduce confusion
Fixes https://gitlab.com/kicad/code/kicad/-/issues/13271
We call 'RecalculateRatsnest' in multiple locations, this will
invalidate various pointers needed by VIEW::Redraw(). When this is
called through the normal connectivity routines, we have the mutex
locked to prevent conflict but we've added more locations that update
just the Ratsnest. The std::adopt_lock should take over the existing
lock when needed
Fixes https://gitlab.com/kicad/code/kicad/issues/13011