The board model (design doc 02 §3): every object TraceMaker reads from a .kicad_pcb,...
std::int32_t NetId
0 = no net
std::vector< EscapeCorridor > plan_escapes(const model::Board &b, const std::vector< char > &needs, const std::function< Coord(model::NetId)> &keep, const EscapeOptions &o={}, EscapeStats *stats=nullptr, const std::function< Coord(model::NetId)> &channel={})
Plans corridors for the pads with needs[pad] != 0.
std::vector< PartEscape > analyse_escapes(const model::Board &b, const model::DesignRules &r, Obstacles &obs, const EscapeAnalysisOptions &o={}, const EscapeOptions &eo={})
std::pair< Coord, Coord > pad_half_extents(const model::Pad &p)
Half extents of a pad's bounding box along x and y (rotation applied).
std::int64_t Coord
Engine coordinate: signed 64-bit nanometres.
Design rules as KiCad defines them (design doc 08 §3–4): board minimums and net classes from the ....
Escape feasibility (M9 analysis): can each pin of a dense package leave it at all under the board's r...
Coord margin
how far outside the package a pin must get
Coord window
search area around the package
Coord lattice
search pitch
std::vector< Point > tail
Version 2 (escape_flow.hpp): the corridor continues from b through these points on tail_layer (the pa...
Coord band
half-width of the reserved strip around the centreline
Point b
centreline: pad centre -> escape point (or via site)
bool has_mid
second-ring pins: a -> mid (between two outer balls) -> b
bool via
b is a dog-bone via site (reserved on every layer)
int layer
copper index the stub runs on
Coord max_pitch
pin pitch up to which a footprint counts as dense (1.27 mm BGAs included)
Coord length
Corridor length past the pad edge for perimeter pins.
int min_pads
smaller footprints escape easily
int escapable
pins still to be routed, and those of them that escape
std::string hint
what would make the dead pins escapable, when it can be told
std::vector< DeadPin > dead
int satisfied
pins whose net is already complete