The Board bounding box calculation has two modes: edges only and
everything. While the everything mode works as expected, the edges only
calculation (and everything that depends on it) was seeing only the edge
cuts on the board drawings layer and not the footprint edge cuts.
Fixes: lp:1839768
* https://bugs.launchpad.net/kicad/+bug/1839768
(cherry picked from commit 99859727e8)
We do not allow non-copper routed tracks and they will break assumptions
elsewhere in the code. We drop them in the beginning so that they are
not saved.
The standard DIM() macro was not typesafe as it happily deferred errors
to runtime that can be caught at compile time. Replacing it with a
generic C++11 constexpr allows for typecasting, comparison and compile
time error checking.
This adds a check for contiguous board outlines to the DRC. It also
uses the calculated outline to ensure that traces are not crossing the
outlines.
Fixes: lp:1648055
* https://bugs.launchpad.net/kicad/+bug/1648055
Variable netBuffer contains all NET_INFO items, whereas max_netcode
value is determined only basing on pad nets. After a netlist update
there still might be a NETINFO_ITEM that is not assigned to any pad and
has a net code higher than calculated max_netcode. Such situation
results in a out-of-bounds access in sortNetsByNodes().
This fixes the CmpNoCase() == 0 bug on one side, and the
footprint == null bug on the other side; both of which were
previously fixed on only one side.
Fixes: lp:1795561
* https://bugs.launchpad.net/kicad/+bug/1795561
SEGZONE types were confusingly named PCB_ZONE_T. Zones in pcbnew are
now _only_ PCB_ZONE_AREA_T, so we name segzone types PCB_SEGZONE_T to be
clear.
This also removes processing of the SEGZONEs from connectivity
calculations.
... and GetMsgPanelInfo.
Step 4 in the g_UserUnit eradication effort.
Also removes a couple of conversion routines that were close
enough to extinction.
(cherry picked from commit c75da51)
The old item pointers (which aren't safe to keep around) were
removed in favour of opaque references (void*) which are then
compared against existing items when needed.
Also improves brightening by brightening the whole footprint
(ie: its pads, drawings, reference and value) rather than just
its target cross.
(cherry picked from commit 30e90b0)
It happens if the first segment of the new trace is inside a pad: the other segments are not found.
And the erased trace is not the right trace.
However this fix is more a workaround than a fix: currently the detection of the trace boundaries (BOARD::MarkTrace())
does not work very well for segments inside a pad.
Fixes: lp:1776121
https://bugs.launchpad.net/kicad/+bug/1776121
Pads count all pads/pins on the board including unconnected and NPTH.
Nodes count only the pads that can connect to a net and are therefore
routable. These were being calculated as the same number (displayed in
the info bar at the bottom of the screen)
Connectivity searches were slow for large, complex boards. This was
partly due to the need to search all lists for possible connections
between anchors.
We remove this requirement by creating an RTree based on items' bounding
boxes similar to the PNS router. Then we get both the colliding items
and search forward/backward to see if there are connections between the
anchors and the other item.
Because we use RTree, we no longer need the maintenance overhead of multiple
item lists and an anchor list in the connectivity class.
Fixes: lp:1701791
* https://bugs.launchpad.net/kicad/+bug/1701791
Fixes: lp:1769408
* https://bugs.launchpad.net/kicad/+bug/1769408
Fixes: lp:1761989
* https://bugs.launchpad.net/kicad/+bug/1761989
On large boards with high pad-count modules, searching each pad for hits
becomes expensive. We eliminate many of the pad searches by first
checking the module's bounding box before iterating over pads to look
for hits.
m_Zone is a fully deprecated list of SEG_ZONE items (similar to TRACK), used to fill copper zones in *very old* boards.
it is even unlikely there are still boards that use them.
So it should be removed one day.
When reading netlist or updating board from schematic, if the
changes leave a zone with a net with no pads then change the
zone's net to the new net of one of it's connections.
Also improves update-board-from-schematic's dry run reporting
to include zone nets and single-pad nets.
Fixes: lp:1609401
* https://bugs.launchpad.net/kicad/+bug/1609401
The previous algorithm stopped whenever it entered a pad, which
sometimes leaves small track segments inside the pad. This one
keeps going as long as each segment gets us closer to the center
of the pad.
Fixes: lp:1662398
* https://bugs.launchpad.net/kicad/+bug/1662398
Replace all instances of "component" and "part" with "symbol" when
referring to schematic and library symbols.
Replace all instances of "component" with "footprint" when referring to
board and library footprints.
Minor dialog layout fixes to some of the dialogs impacted by the UI
string changes.
- renamed connectivity.[h|cpp] to connectivity_data [.h|.cpp] so that the file name matches the main class name.
- GetNetItems() now returns a vector instead of a list