The board model (design doc 02 §3): every object TraceMaker reads from a .kicad_pcb,...
LegalizeResult legalize_routes(const model::Board &board, const model::DesignRules &rules, std::vector< ConnRoute > &routes, const LegalizeOptions &opt={})
Moves the vertices of routes (tracks and vias of the connections) so that the clearances of rules hol...
Integer-nanometre points and KiCad-compatible rotation.
TraceMaker's detailed router, version 1 (roadmap M4; design doc 05 §2, §5).
Design rules as KiCad defines them (design doc 08 §3–4): board minimums and net classes from the ....
double box_mm
a vertex stays within this distance of where it started
double subdivide_mm
> 0: every unlocked route track is cut into pieces of at most this length (at the vertices of same-ne...
std::uint64_t seed
!= 0: the pairs are visited in another (seeded) order, which leaves other pinches unresolved: portfol...
double edge_mm
copper stays this far inside the board outline (plus the rule's edge clearance)
std::vector< geom::Point > outline
board outline polygon (Obstacles::outline()); empty = unbounded
double margin_mm
clearance asked for beyond the rule (rounding to nanometres, the pairs between sweeps)
int sweeps
projection sweeps at most
int nodes
vertices of the routes (tracks and vias merged by net and position)
int pairs_before
pairs of copper items closer than the rules allow, before and after
int moved
vertices that ended up elsewhere