Route past round pads by their outline, not their bounding square
A circle pad was its bounding box in both the grid and the exact check, so a 4 mm mounting hole's square corners refused legal routes 0.8 mm clear of the real copper. It is now a 16-sided polygon whose sides touch the circle, so the router is never closer than KiCad measures. diagnose.py takes --seed.
This commit is contained in:
+4
-2
@@ -185,7 +185,7 @@ def _flood(router: GridRouter, pin, net_no: int, conns) -> tuple[int, Counter]:
|
||||
|
||||
def diagnose(
|
||||
dsn_text: str, edge_clearance_mm: float | None, resolution: int = 2, shove: bool = False,
|
||||
access_cost: float = 0.0, hole_to_hole_mm: float = 0.25,
|
||||
access_cost: float = 0.0, hole_to_hole_mm: float = 0.25, seed: int | None = None,
|
||||
) -> dict:
|
||||
dsn = parse_dsn(dsn_text)
|
||||
names = {i + 1: n.name for i, n in enumerate(dsn.nets)}
|
||||
@@ -201,6 +201,7 @@ def diagnose(
|
||||
resolution=resolution,
|
||||
shove=shove,
|
||||
access_cost=access_cost,
|
||||
seed=seed,
|
||||
# the product's configuration: net-class widths and hole spacing
|
||||
net_widths=_net_widths_board(dsn, scale),
|
||||
via_drill=_via_drill_board(dsn, scale),
|
||||
@@ -276,12 +277,13 @@ def main(argv: list[str] | None = None) -> int:
|
||||
ap.add_argument("--grid-resolution", type=int, default=2, metavar="K")
|
||||
ap.add_argument("--shove", action="store_true", help="as mckicad routes")
|
||||
ap.add_argument("--access-cost", type=float, default=0.0)
|
||||
ap.add_argument("--seed", type=int, help="route in this shuffled order, as bench.py does")
|
||||
ap.add_argument("--hole-to-hole", type=float, default=0.25, metavar="MM")
|
||||
ap.add_argument("--json", type=Path, help="also write the full table here")
|
||||
args = ap.parse_args(argv)
|
||||
|
||||
report = diagnose(args.dsn.read_text(), args.edge_clearance, args.grid_resolution, args.shove,
|
||||
args.access_cost, args.hole_to_hole)
|
||||
args.access_cost, args.hole_to_hole, args.seed)
|
||||
for row in report["failures"]:
|
||||
extra = ""
|
||||
for w in row.get("walled", []):
|
||||
|
||||
Reference in New Issue
Block a user