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
Note: as JOINTs are indexed by position and net, we can have a joint with four track segments belonging to two LINEs linked (two on layer A, two on layer B, e.g. two corners of two separate lines going through). The previous version
of the function would stop at such a joint (thinking it's a corner joint). As such situation is pretty common while shoving/moving vias, the algorithm was easily confused.
Private note: just fixed another 11-year-old bug...
Due to the architecture of the NODE storage (overrides), JOINTs that don't have any items attached are still kept in the child nodes, but with empty link list. So has to be the layer range, otherwise adding new items to a child node might result with JOINTs having mismatched layers vs items.
F_Cu = 0
B_Cu = 2
Remaining internal copper layers are even and incrementing
Non-copper layers are odd and incrementing.
This means that we can no longer do things like:
for( PCB_LAYER_ID layer = F_Cu; layer <= B_Cu; ++layer)
Instead, we have the class LAYER_RANGE:
for( PCB_LAYER_ID layer : LAYER_RANGE( F_Cu, B_Cu) )
Similarly, gt/lt tests should not refer to the integer value of the
layer. We have functions such as IsCopperLayer to test whether a layer
is copper or not.
When using the connectivity RTree, the third dimension is layer, so we
provide B_Cu with the special INT_MAX value, ensuring that elements
between F_Cu and B_Cu will be identified. There is a new, special
function GetBoardLayer() for interfacing with CN_ITEMS
Similarly, PNS layers remain unchanged and sequential. A set of
interface functions is provided to map PNS layers to Board layers and
back. This allows the PNS_LAYER_RANGE to function as expected
Fix mismatched parameter passing in TOPOLOGY::followTrivialPath()
and TOPOLOGY::AssembleTrivialPath().
Fix logic error in PNS::JOINT::IsLineCorner().
Handle VVIAs in PNS::JOINT::IsNonFanoutVia().
Fixes https://gitlab.com/kicad/code/kicad/-/issues/10614
- prerequisite for holes as first class objects code
- introduced the OWNABLE_ITEM interface that defines the owning container (NODE/other ITEM/ITEM_SET)
- simplified the ITEM_SET interface
- constified a lot of APIs (ownership/JOINT management) as a side effect
Rebased and cleaned up by Jeff Young <jeff@rokeby.ie> 5 April 2023
- some STL cover types removed
Handle segment width test in the case of locked segs
Fix logic failure where vias on path cause crash
Fixes https://gitlab.com/kicad/code/kicad/-/issues/11990
(cherry picked from commit 25123759887fb6a94c5eaebfbf2e7c065ef4d1e7)
When we generate hulls, by default we subtract the clearance epsilon
to prevent false collisions in the router that wouldn't be flagged
by DRC. However, we need to use the actual hull with no epsilon
when generating hulls for pathfinding in the walkaround system.
Without this change, it is possible for the walkaround to generate
a valid-seeming path that results in a DRC violation, for example
when dragging a drag against a board edge.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/10536
Fixes https://gitlab.com/kicad/code/kicad/-/issues/11365
Fixes https://gitlab.com/kicad/code/kicad/-/issues/10710
(cherry picked from commit 2a91ba35c1a1e443714c4a33334236be1f60413e)
This reverts commit 41e4bc4d9fe52c81986ad1522dc3f8965a4ef6bf.
This commit requires additional testing before recommitting as it causes
issues with FindJoint().
- PNS_ITEMSET now keeps ownership info (does not rely on PNS_ITEM::Owner(), avoiding the risk of dangling pointers)
- fixed vias losing connected traces when dragging in mark obstacles mode
- fixed rare segfault when board item returned null netclass
- re-worked PNS_LINE_PLACER and PNS_ROUTER classes a bit, removing duplicate class members
- cleaned up Andrew's blind/buried via fixes
- fixed 'custom via width' dialog bug updating the width even when closed/cancelled
- fixed incorrect radius of drawn microvias