Add continuous expansion-room routing track

A third engine (engine='room') that replaces the fixed routing grid with
FreeRouting's free-space rooms. Per layer, the space not occupied by items
(inflated by the routing clearance) is decomposed into exact rectangles via
coordinate compression (the orthogonal analogue of
CompleteFreeSpaceExpansionRoom); adjacent rooms share an edge door, and a via
door joins overlapping rooms on two layers. The maze search is an A* over
rooms-through-doors (cost = geometric distance + via cost), so a path may
cross a door anywhere along its width rather than at a quantized cell. The
found room sequence is realized into an exact orthogonal Polyline through the
door mid-gates and verified DRC-clean against the ShapeSearchTree, dropping
the net if it cannot be made exactly clean.

Maps to autoroute/: ExpansionRoom / CompleteFreeSpaceExpansionRoom (rooms),
ExpansionDoor / TargetItemExpansionDoor (doors), MazeSearchAlgo /
AutorouteEngine (search), LocateFoundConnectionAlgo (realization).

Foundation scope: rooms are axis-aligned rectangles (not general Simplex
tiles); realization uses an L-connector through door mid-gates. Any-angle
rooms, optimal gate placement (true sub-cell shove), and optimization passes
are follow-ups. The grid and exact tracks are unchanged; this is opt-in.

Routes simple/crossing (with a via) and all four multi-pin nets of the real
KiCad board, DRC-clean.
This commit is contained in:
2026-07-13 09:38:40 -06:00
parent e58f63e0f1
commit 6a24ffc540
3 changed files with 504 additions and 3 deletions
+6
View File
@@ -18,11 +18,14 @@ from .exact_router import ExactRouteResult, route_board_exact
from .grid_router import GridRouter, RouteResult, route_board
from .pipeline import (
build_exact_routing_result,
build_rooms_routing_result,
build_routing_result,
route,
route_dsn_board,
route_dsn_board_exact,
route_dsn_board_rooms,
)
from .room_router import route_board_rooms
__all__ = [
"GridRouter",
@@ -35,4 +38,7 @@ __all__ = [
"route_board_exact",
"build_exact_routing_result",
"route_dsn_board_exact",
"route_board_rooms",
"build_rooms_routing_result",
"route_dsn_board_rooms",
]