Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
d630422
feat(place,mcp): compact a layout by closing its gaps to a target spa…
JeffMboya Oct 28, 2026
e09f277
feat(router): route again in the engine's other net orders when a boa…
JeffMboya Oct 27, 2026
7d6f143
feat(router): move a via the engine left in a pad of its own net off it
JeffMboya Oct 28, 2026
77f680b
fix(layout): read a circle, arc or polygon courtyard whole, not as none
JeffMboya Oct 27, 2026
2b10ca9
fix(place): gap compaction returns each flush connector to its edge
JeffMboya Oct 28, 2026
2fae87d
feat(place): advise on like parts that miss a shared row and on small…
JeffMboya Oct 28, 2026
4635931
feat(place): advise when a passive in the edge rim holds the outline …
JeffMboya Oct 28, 2026
c7a4d3e
feat(place): advise when a rail capacitor sits far from the part it s…
JeffMboya Oct 28, 2026
a796423
feat(kicad): smaller reference labels placed clear of neighbours and,…
JeffMboya Oct 28, 2026
016724a
fix(layout): parts left out of every group share an implicit region s…
JeffMboya Oct 28, 2026
4f76047
feat(kicad): place the most crowded labels first and try more places …
JeffMboya Oct 28, 2026
ac0bfc1
test(place,layout): measure a hole and a turned arc at their real size
JeffMboya Oct 28, 2026
1393d26
fix(kicad): a label never sits on its own part
JeffMboya Oct 28, 2026
127f008
fix(kicad): keep the silkscreen clearance between two labels
JeffMboya Oct 28, 2026
a86f0f1
feat(router): move reference labels off vias and pads after routing
JeffMboya Oct 29, 2026
6f3665b
place: keep main's repeated-circuit code after the merge and give the…
JeffMboya Oct 30, 2026
45b747d
fix(router): island repair joins pads and vias by their copper, exact…
JeffMboya Oct 29, 2026
4baf4ed
feat(router): cut silkscreen outlines back from vias after routing
JeffMboya Oct 29, 2026
2bfdbe9
feat(router): widen thin silkscreen and cut outlines back from pads a…
JeffMboya Oct 29, 2026
0b8c67d
feat(router): keep silkscreen 0.25 mm off copper and draw strokes at …
JeffMboya Oct 30, 2026
9096846
feat(router): drop a silkscreen circle that hugs a pad or a via
JeffMboya Oct 30, 2026
dda885c
feat(router): drop a silkscreen polygon that sits on a pad or a via, …
JeffMboya Oct 30, 2026
2c80d81
feat(router): move a reference label that overlaps another label or a…
JeffMboya Oct 30, 2026
1f72011
feat(router): hide a reference label that overlaps silkscreen and has…
JeffMboya Oct 30, 2026
923ed97
fix(place): the alignment advice walks its parts in id order, so ties…
rodneyosodo Nov 2, 2026
5000143
fix(router): move labels off copper before the candidate is judged, s…
rodneyosodo Nov 2, 2026
02ab948
fix(router): a net order the caller chose is not replaced by the retr…
rodneyosodo Nov 2, 2026
568d69b
docs(place): the mounting-hole floor covers a missing library, not an…
rodneyosodo Nov 2, 2026
ff48067
fix(kicad): draw reference labels at the silkscreen minimum stroke
rodneyosodo Nov 2, 2026
a94a957
fix(router): measure a reference label at the font it is drawn in
rodneyosodo Nov 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 27 additions & 2 deletions crates/synth-kicad/src/pcb.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
use std::collections::HashMap;
use std::fmt::Write as _;

use synth_geometry::{mm_to_nm, nm_to_mm, Layer, Point, Rotation};
use synth_geometry::{mm_to_nm, nm_to_mm, Layer, Point, Rect, Rotation};
use synth_ir::{Board, ComponentId, Stackup, StackupLayer};
use synth_pcb::{Routing, Segment};
use synth_place::{ComponentPlacement, Placement};
Expand Down Expand Up @@ -145,6 +145,7 @@ pub fn build_pcb(
&label_parts(board, &placements_by_id),
placement.board_outline,
&label_overrides_by_id(board, label_overrides),
&via_copper(routing),
);
for component in &board.components {
let Some(part) = component.part.as_ref() else {
Expand Down Expand Up @@ -536,6 +537,21 @@ fn inner_plane_layers(layer_count: u32) -> Vec<&'static str> {
}

/// Emit a single `(via ...)` block.
/// The copper of every routed via as a box, so a reference label can keep off it.
fn via_copper(routing: &Routing) -> Vec<Rect> {
routing
.vias
.iter()
.map(|via| {
let half = via.pad_diameter_nm / 2;
Rect::new(
Point::new(via.at.x_nm - half, via.at.y_nm - half),
Point::new(via.at.x_nm + half, via.at.y_nm + half),
)
})
.collect()
}

fn build_via(
via: &synth_pcb::Via,
idx: usize,
Expand Down Expand Up @@ -2301,7 +2317,16 @@ fn build_footprint_instance(
"effects",
vec![Sexp::list(
"font",
vec![Sexp::list("size", vec![num(1.0), num(1.0)])],
vec![
Sexp::list(
"size",
vec![
num(silk_labels::LABEL_FONT_MM),
num(silk_labels::LABEL_FONT_MM),
],
),
Sexp::list("thickness", vec![num(silk_labels::LABEL_STROKE_MM)]),
],
)],
));

Expand Down
Loading
Loading