A bounding-box spatial hash (broad phase) with exact IntBox-intersection narrow phase, replacing the exact router's occupancy grid. Supports insert/remove-owner and overlap/region queries, a clearance_conflict test (strict 2-D overlap of the clearance-expanded box, so tiles exactly a clearance apart are allowed), and has_violation for the whole-board DRC check. Tiles are tagged routed vs static so pad-vs-pad spacing in the source design is not counted as a routing violation.
43 lines
1.1 KiB
Python
43 lines
1.1 KiB
Python
"""Board data model for freeroute.
|
|
|
|
The data model a parsed DSN produces and the (future) router operates on:
|
|
layers, units, coordinate transform, nets, clearance matrix, the item hierarchy,
|
|
and the :class:`BasicBoard` container. :func:`build_board` constructs a board
|
|
from a :class:`~freeroute.dsn.model.DsnBoard`.
|
|
|
|
The routing operations (``RoutingBoard``) and the spatial ``ShapeSearchTree``
|
|
belong to the router phase.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from .board import BasicBoard
|
|
from .build import build_board
|
|
from .clearance import ClearanceMatrix
|
|
from .items import ConductionArea, Item, ObstacleArea, Pin, Trace, Via
|
|
from .layer import Layer, LayerStructure
|
|
from .net import Net, Nets
|
|
from .search_tree import ShapeSearchTree, TreeShape
|
|
from .transform import CoordinateTransform
|
|
from .unit import Unit
|
|
|
|
__all__ = [
|
|
"Unit",
|
|
"Layer",
|
|
"LayerStructure",
|
|
"CoordinateTransform",
|
|
"Net",
|
|
"Nets",
|
|
"ClearanceMatrix",
|
|
"Item",
|
|
"Pin",
|
|
"ObstacleArea",
|
|
"ConductionArea",
|
|
"Via",
|
|
"Trace",
|
|
"BasicBoard",
|
|
"ShapeSearchTree",
|
|
"TreeShape",
|
|
"build_board",
|
|
]
|