This method shadows the C++ method, and doesn't properly handle updating
the duplicated object's KIID to be unique.
Also add tests to ensure the KIIDs are unique after duplication.
Fixes https://gitlab.com/kicad/code/kicad/issues/14460
(Cherry-picked from 5d0b5e16ff)
pickSingleItem() had a two-attempt algorithm, but the second attempt
was never made because we'd check for no hits before throwing out the
aAvoidItems.
The second attempt would fail anyway because QueryHoverItems() ignored
the aUseClearance flag when not idle, and didn't factor in the actual
clearance.
(cherry picked from commit d040690f60)
Substantial elements following a divot should be at least as far in each
cardinal direction from the origin point in order to be considered
substantial. This catches cases where the "substantial" element is
actually a straight segment away from the divot
Fixes https://gitlab.com/kicad/code/kicad/issues/14130
(cherry picked from commit 914b5a4d21)
Set their parent to nullptr before deleting (as the board may have
already been deleted).
Likely fix for Sentry KICAD-79.
(cherry picked from commit 13e79af8a0)
ShowBoardSetup can be called multiple times from multiple locations,
resulting in duplicate board setup dialog boxes. This is confusing and
should be prevented. We use the established patter from the symbol
picker to ensure that only one copy of the dialog is ever opened at a
time
(cherry picked from commit 7695d510d6)
Previously, it was not always the edited footprint, but a footprint
selected from the library tree.
It was especially annoying when the footprint was loaded from the board editor:
The footprint was not the loaded footprint, but its copy from library.
From master branch
This allows custom rules to be authored without firing the auto-generated
rule from Board Setup > Silk Item Clearance (which should be only for silk-
to-silk clearances).
Fixes https://gitlab.com/kicad/code/kicad/issues/14417
(cherry picked from commit 0266d03f79)
Adds the option to simplify the output of Clipper ops that remove minor
detours from the output lines. These detours are not substantive, so
removing them speeds up the rest of the system by removing unimportant
vertices. This also prevents the introduction of inadvertant concave
points when unioning two, closely-sized rounded shapes
Software like Solidworks and other CAD treat STEP labels as unique entries.
When you import multi STEP files into the same project, it'll start deduplicating your design by those name.
So two completely unrelated PCBs with the same "PCB" name will result in one being replaced by another.
When drawing the ratsnest, we need to be careful to avoid accessing
CONN_ITEMs that have been changed by the underlying model. Checking for
dirty items instead of valid items will prevent us looking at data that
are out of date
Fixes https://gitlab.com/kicad/code/kicad/issues/14265
(cherry picked from commit 283770fc45)
Includes changing the class hierarchy so that dimension objects inherit
from PCB_TEXT rather than containing a PCB_TEXT member variable.
(cherry picked from commit 23accffc6d)
The logic to handle divots needs to account for fully nested, same net
zones. The process of subtracting led to us considering the inner zone
to be a zone knock-out (negative polygon). To avoid this, we need to
check if the inner, higher priority zone has any connection to the outer
zone. If it does not, then we can treat it as an isolated zone without
worrying about divots to the outer zone.
(cherry picked from commit 9146e38af4)
We report bitmaps as being 'on' a copper layer because they are
associated with it but they are not actually physical parts so should
not be included in the DRC checks
Additionally, Bitmaps effective shape starts are the top left corner
rather than the center (unclear why that was there in the first place)
Fixes https://gitlab.com/kicad/code/kicad/issues/14065
(cherry picked from commit 1b8b216ac8)
Rounded line ends when deflating leads to microscopic jags in the
outline that are not visible but add substantial computation time and
minor error when computing polygon offsets.
Instead, the chamfer deflate method prevents these jagged lines by
clipping angles < 90° by the error level. This does not impact deflate
calls where we explicitly require the angles to be maintained
(cherry picked from commit af10878954)
Fractured polygons are always fractured along the x-axis, so when
checking to see if a segment is a fracture point, we check if the y
coordinate is equal. This avoids situations where there are multiple
fracture points between two inflection points
Additionally, we add a second check to ensure we don't hit spurious
blobs (all kinks should be symmetric and therefore be substantial in
each direction)
Fixes https://gitlab.com/kicad/code/kicad/issues/14130
(cherry picked from commit 7653a2bf99)
- The C++ member now uses std::vector<KICAD_T>
- The Python side can use a single value or a list,
like in v6.
The std::vector translation is based on the v6 KICAD_T[]
translation.
Old PLOTTER::Text is not (yet) removed, but it use negative text size
to mirrored text, which is not really compatible with some plotters (especially PDF).
Using TEXT_ATTRIBUTES is much easy and much better,
so PLOTTER::PlotText() is added.
Note: "old" PLOTTER::Text() is not removed yet.
From master, commit 51d46c0e73
This adds Reset() method to KIFACE to reload global libs stored in
global static vars.
Also refactors some lib reload code in various frames to have
common MAIL_RELOAD_LIB handler.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/12500
(cherry picked from commit 2975f53647)
A dielectric layer (between 2 copper layers) can be made by more than one
layer (composite dielectric). Not frequent, but possible.
sub-layers where previously ignored.
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