Let pins on turned fine-pitch pads leave along the pad's axis
A QFN placed at 45 degrees had no exit on the grid: every horizontal or vertical step from a pin passes its neighbours inside clearance. A pin whose pad is turned more than ten degrees off the grid axes now leaves along the pad's own axis, away from the part, until an L from there to a grid cell clears every other net's pad, then searches as usual. The slanted leg is checked and stored as an exact slab (segment_slab), not its bounding box, in the grid stub checks and in the exact engine. Where pins leave side by side, a cell names only its first owner, so stubs are also indexed per cell for every connection near them; the exact stub-vs-stub check, trace entry and rip-up all consult that index. A pin with an axis exit and no clear cell reports no way out instead of falling back to a cell on another net's route. diagnose.py replays with the exits.
This commit is contained in:
@@ -215,6 +215,8 @@ def diagnose(
|
||||
|
||||
# the board as the best pass left it
|
||||
state = _fresh(seen)
|
||||
# pins on turned pads leave along their pad's axis: replay with the same exits
|
||||
state._axis_exits = dict(routed._axis_exits)
|
||||
conns = state._conns
|
||||
for idx, (path, a_end, b_end) in best.items():
|
||||
conns[idx].a_end, conns[idx].b_end = a_end, b_end
|
||||
|
||||
Reference in New Issue
Block a user