mirror of https://codeberg.org/topola/topola.git
tests: add four 3rd order SMD LC filters test
This commit is contained in:
parent
540d9707dc
commit
765d8495c6
|
|
@ -11,4 +11,4 @@ steps:
|
|||
environment: [CARGO_TERM_COLOR=always]
|
||||
commands:
|
||||
- rustup default "$CHANNEL"
|
||||
- cargo test --features "$FEATURES"
|
||||
- cargo test --verbose --features "$FEATURES"
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ impl Autoroute {
|
|||
return Err(AutorouterError::NothingToRoute);
|
||||
};
|
||||
|
||||
let (source, target) = Self::ratline_endpoints(autorouter, cur_ratline);
|
||||
let (source, target) = autorouter.ratline_endpoints(cur_ratline);
|
||||
let navmesh = Some(Navmesh::new(autorouter.board.layout(), source, target)?);
|
||||
|
||||
let this = Self {
|
||||
|
|
@ -81,7 +81,7 @@ impl Autoroute {
|
|||
observer: &mut impl RouterObserverTrait<R>,
|
||||
) -> Result<AutorouterStatus, AutorouterError> {
|
||||
let (new_navmesh, new_ratline) = if let Some(cur_ratline) = self.ratlines_iter.next() {
|
||||
let (source, target) = Self::ratline_endpoints(autorouter, cur_ratline);
|
||||
let (source, target) = autorouter.ratline_endpoints(cur_ratline);
|
||||
|
||||
(
|
||||
Some(
|
||||
|
|
@ -117,37 +117,6 @@ impl Autoroute {
|
|||
}
|
||||
}
|
||||
|
||||
fn ratline_endpoints<R: RulesTrait>(
|
||||
autorouter: &mut Autorouter<R>,
|
||||
ratline: EdgeIndex<usize>,
|
||||
) -> (FixedDotIndex, FixedDotIndex) {
|
||||
let (source, target) = autorouter.ratsnest.graph().edge_endpoints(ratline).unwrap();
|
||||
|
||||
let source_dot = match autorouter
|
||||
.ratsnest
|
||||
.graph()
|
||||
.node_weight(source)
|
||||
.unwrap()
|
||||
.vertex_index()
|
||||
{
|
||||
RatsnestVertexIndex::FixedDot(dot) => dot,
|
||||
RatsnestVertexIndex::Zone(zone) => autorouter.board.layout_mut().zone_apex(zone),
|
||||
};
|
||||
|
||||
let target_dot = match autorouter
|
||||
.ratsnest
|
||||
.graph()
|
||||
.node_weight(target)
|
||||
.unwrap()
|
||||
.vertex_index()
|
||||
{
|
||||
RatsnestVertexIndex::FixedDot(dot) => dot,
|
||||
RatsnestVertexIndex::Zone(zone) => autorouter.board.layout_mut().zone_apex(zone),
|
||||
};
|
||||
|
||||
(source_dot, target_dot)
|
||||
}
|
||||
|
||||
pub fn navmesh(&self) -> &Option<Navmesh> {
|
||||
&self.navmesh
|
||||
}
|
||||
|
|
@ -200,6 +169,37 @@ impl<R: RulesTrait> Autorouter<R> {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn ratline_endpoints(
|
||||
&mut self,
|
||||
ratline: EdgeIndex<usize>,
|
||||
) -> (FixedDotIndex, FixedDotIndex) {
|
||||
let (source, target) = self.ratsnest.graph().edge_endpoints(ratline).unwrap();
|
||||
|
||||
let source_dot = match self
|
||||
.ratsnest
|
||||
.graph()
|
||||
.node_weight(source)
|
||||
.unwrap()
|
||||
.vertex_index()
|
||||
{
|
||||
RatsnestVertexIndex::FixedDot(dot) => dot,
|
||||
RatsnestVertexIndex::Zone(zone) => self.board.layout_mut().zone_apex(zone),
|
||||
};
|
||||
|
||||
let target_dot = match self
|
||||
.ratsnest
|
||||
.graph()
|
||||
.node_weight(target)
|
||||
.unwrap()
|
||||
.vertex_index()
|
||||
{
|
||||
RatsnestVertexIndex::FixedDot(dot) => dot,
|
||||
RatsnestVertexIndex::Zone(zone) => self.board.layout_mut().zone_apex(zone),
|
||||
};
|
||||
|
||||
(source_dot, target_dot)
|
||||
}
|
||||
|
||||
fn selected_ratlines(&self, selection: &Selection) -> Vec<EdgeIndex<usize>> {
|
||||
self.ratsnest
|
||||
.graph()
|
||||
|
|
|
|||
|
|
@ -65,6 +65,10 @@ impl<R: RulesTrait> Invoker<R> {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn destruct(self) -> (Autorouter<R>, History) {
|
||||
(self.autorouter, self.history)
|
||||
}
|
||||
|
||||
pub fn execute(
|
||||
&mut self,
|
||||
command: Command,
|
||||
|
|
|
|||
|
|
@ -73,6 +73,6 @@ fn test() {
|
|||
.unwrap()
|
||||
.vertex_index()
|
||||
.node_index();
|
||||
assert!(unionfind.equiv(from_index, to_index));
|
||||
assert_eq!(unionfind.find(from_index), unionfind.find(to_index));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,73 @@
|
|||
{
|
||||
"done": [
|
||||
{
|
||||
"Autoroute": {
|
||||
"pins": [
|
||||
"L3-1",
|
||||
"L3-2",
|
||||
"C3-1",
|
||||
"L1-2",
|
||||
"C2-1",
|
||||
"L2-2",
|
||||
"J2-1",
|
||||
"J1-1",
|
||||
"L1-1",
|
||||
"C1-1",
|
||||
"L2-1"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"Autoroute": {
|
||||
"pins": [
|
||||
"C6-1",
|
||||
"J4-1",
|
||||
"L5-1",
|
||||
"J3-1",
|
||||
"C5-1",
|
||||
"L6-2",
|
||||
"L5-2",
|
||||
"C4-1",
|
||||
"L6-1",
|
||||
"L4-1",
|
||||
"L4-2"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"Autoroute": {
|
||||
"pins": [
|
||||
"C9-1",
|
||||
"J5-1",
|
||||
"L7-1",
|
||||
"J6-1",
|
||||
"L9-2",
|
||||
"C7-1",
|
||||
"L8-2",
|
||||
"L9-1",
|
||||
"L8-1",
|
||||
"L7-2",
|
||||
"C8-1"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"Autoroute": {
|
||||
"pins": [
|
||||
"L10-1",
|
||||
"L12-1",
|
||||
"J7-1",
|
||||
"L10-2",
|
||||
"C10-1",
|
||||
"C12-1",
|
||||
"L12-2",
|
||||
"L11-1",
|
||||
"C11-1",
|
||||
"L11-2",
|
||||
"J8-1"
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"undone": []
|
||||
}
|
||||
|
|
@ -0,0 +1,288 @@
|
|||
(pcb /home/mikolaj/proj/topola/tests/data/four_3rd_order_smd_lc_filters/four_3rd_order_smd_lc_filters.dsn
|
||||
(parser
|
||||
(string_quote ")
|
||||
(space_in_quoted_tokens on)
|
||||
(host_cad "KiCad's Pcbnew")
|
||||
(host_version "8.0.2")
|
||||
)
|
||||
(resolution um 10)
|
||||
(unit um)
|
||||
(structure
|
||||
(layer F.Cu
|
||||
(type signal)
|
||||
(property
|
||||
(index 0)
|
||||
)
|
||||
)
|
||||
(layer B.Cu
|
||||
(type signal)
|
||||
(property
|
||||
(index 1)
|
||||
)
|
||||
)
|
||||
(boundary
|
||||
(path pcb 0 122682 -88900 109220 -88900 109220 -68834 122682 -68834
|
||||
122682 -88900)
|
||||
)
|
||||
(via "Via[0-1]_600:300_um")
|
||||
(rule
|
||||
(width 200)
|
||||
(clearance 200)
|
||||
(clearance 200 (type default_smd))
|
||||
(clearance 50 (type smd_smd))
|
||||
)
|
||||
)
|
||||
(placement
|
||||
(component Inductor_SMD:L_0603_1608Metric_Pad1.05x0.95mm_HandSolder
|
||||
(place L12 119267.000000 -86487.000000 front 0.000000 (PN L))
|
||||
(place L1 112649.000000 -69723.000000 front 0.000000 (PN L))
|
||||
(place L6 119239.000000 -75311.000000 front 0.000000 (PN L))
|
||||
(place L5 115937.000000 -75311.000000 front 0.000000 (PN L))
|
||||
(place L7 112649.000000 -80899.000000 front 0.000000 (PN L))
|
||||
(place L10 112663.000000 -86487.000000 front 0.000000 (PN L))
|
||||
(place L3 119253.000000 -69723.000000 front 0.000000 (PN L))
|
||||
(place L9 119253.000000 -80899.000000 front 0.000000 (PN L))
|
||||
(place L2 115951.000000 -69723.000000 front 0.000000 (PN L))
|
||||
(place L8 115951.000000 -80899.000000 front 0.000000 (PN L))
|
||||
(place L11 115965.000000 -86487.000000 front 0.000000 (PN L))
|
||||
(place L4 112635.000000 -75311.000000 front 0.000000 (PN L))
|
||||
)
|
||||
(component Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder
|
||||
(place C12 119267.000000 -88011.000000 front 180.000000 (PN C))
|
||||
(place C3 119253.000000 -71247.000000 front 180.000000 (PN C))
|
||||
(place C4 112635.000000 -76835.000000 front 180.000000 (PN C))
|
||||
(place C7 112649.000000 -82423.000000 front 180.000000 (PN C))
|
||||
(place C6 119239.000000 -76835.000000 front 180.000000 (PN C))
|
||||
(place C1 112649.000000 -71247.000000 front 180.000000 (PN C))
|
||||
(place C11 115965.000000 -88011.000000 front 180.000000 (PN C))
|
||||
(place C9 119253.000000 -82423.000000 front 180.000000 (PN C))
|
||||
(place C10 112663.000000 -88011.000000 front 180.000000 (PN C))
|
||||
(place C2 115951.000000 -71247.000000 front 180.000000 (PN C))
|
||||
(place C5 115937.000000 -76835.000000 front 180.000000 (PN C))
|
||||
(place C8 115951.000000 -82423.000000 front 180.000000 (PN C))
|
||||
)
|
||||
(component Connector_PinHeader_1.00mm:PinHeader_1x02_P1.00mm_Horizontal
|
||||
(place J1 110000.000000 -70000.000000 back 0.000000 (PN Conn_01x02_Męski))
|
||||
(place J3 109968.000000 -75565.000000 back 0.000000 (PN Conn_01x02_Męski))
|
||||
(place J7 109974.000000 -86733.000000 back 0.000000 (PN Conn_01x02_Męski))
|
||||
(place J5 109982.000000 -81153.000000 back 0.000000 (PN Conn_01x02_Męski))
|
||||
)
|
||||
(component Connector_PinHeader_1.00mm:PinHeader_1x02_P1.00mm_Horizontal::1
|
||||
(place J6 121920.000000 -82161.000000 back 180.000000 (PN Conn_01x02_Męski))
|
||||
(place J8 121956.000000 -87749.000000 back 180.000000 (PN Conn_01x02_Męski))
|
||||
(place J2 121920.000000 -70993.000000 back 180.000000 (PN Conn_01x02_Męski))
|
||||
(place J4 121906.000000 -76565.000000 back 180.000000 (PN Conn_01x02_Męski))
|
||||
)
|
||||
)
|
||||
(library
|
||||
(image Inductor_SMD:L_0603_1608Metric_Pad1.05x0.95mm_HandSolder
|
||||
(outline (path signal 120 -171.267 510 171.267 510))
|
||||
(outline (path signal 120 -171.267 -510 171.267 -510))
|
||||
(outline (path signal 50 -1650 730 1650 730))
|
||||
(outline (path signal 50 -1650 -730 -1650 730))
|
||||
(outline (path signal 50 1650 730 1650 -730))
|
||||
(outline (path signal 50 1650 -730 -1650 -730))
|
||||
(outline (path signal 100 -800 400 800 400))
|
||||
(outline (path signal 100 -800 -400 -800 400))
|
||||
(outline (path signal 100 800 400 800 -400))
|
||||
(outline (path signal 100 800 -400 -800 -400))
|
||||
(pin RoundRect[T]Pad_1050x950_238.404_um_0.000000_0 1 -875 0)
|
||||
(pin RoundRect[T]Pad_1050x950_238.404_um_0.000000_0 2 875 0)
|
||||
)
|
||||
(image Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder
|
||||
(outline (path signal 120 -146.267 -510 146.267 -510))
|
||||
(outline (path signal 120 -146.267 510 146.267 510))
|
||||
(outline (path signal 50 1650 -730 -1650 -730))
|
||||
(outline (path signal 50 1650 730 1650 -730))
|
||||
(outline (path signal 50 -1650 -730 -1650 730))
|
||||
(outline (path signal 50 -1650 730 1650 730))
|
||||
(outline (path signal 100 800 -400 -800 -400))
|
||||
(outline (path signal 100 800 400 800 -400))
|
||||
(outline (path signal 100 -800 -400 -800 400))
|
||||
(outline (path signal 100 -800 400 800 400))
|
||||
(pin RoundRect[T]Pad_1075x950_238.404_um_0.000000_0 1 -862.5 0)
|
||||
(pin RoundRect[T]Pad_1075x950_238.404_um_0.000000_0 2 862.5 0)
|
||||
)
|
||||
(image Connector_PinHeader_1.00mm:PinHeader_1x02_P1.00mm_Horizontal
|
||||
(outline (path signal 120 1310 210 3310 210))
|
||||
(outline (path signal 120 1310 150 3310 150))
|
||||
(outline (path signal 120 1310 30 3310 30))
|
||||
(outline (path signal 120 1310 -90 3310 -90))
|
||||
(outline (path signal 120 3310 210 3310 -210))
|
||||
(outline (path signal 120 1310 -790 3310 -790))
|
||||
(outline (path signal 120 3310 -790 3310 -1210))
|
||||
(outline (path signal 120 685 560 1310 560))
|
||||
(outline (path signal 120 3310 -210 1310 -210))
|
||||
(outline (path signal 120 685 -500 1310 -500))
|
||||
(outline (path signal 120 3310 -1210 1310 -1210))
|
||||
(outline (path signal 120 1310 560 1310 -1560))
|
||||
(outline (path signal 120 1310 -1560 394.493 -1560))
|
||||
(outline (path signal 120 -685 685 0 685))
|
||||
(outline (path signal 120 -685 0 -685 685))
|
||||
(outline (path signal 50 3750 -2000 3750 1000))
|
||||
(outline (path signal 50 -1000 -2000 3750 -2000))
|
||||
(outline (path signal 50 3750 1000 -1000 1000))
|
||||
(outline (path signal 50 -1000 1000 -1000 -2000))
|
||||
(outline (path signal 100 1250 150 3250 150))
|
||||
(outline (path signal 100 3250 150 3250 -150))
|
||||
(outline (path signal 100 1250 -150 3250 -150))
|
||||
(outline (path signal 100 1250 -850 3250 -850))
|
||||
(outline (path signal 100 3250 -850 3250 -1150))
|
||||
(outline (path signal 100 1250 -1150 3250 -1150))
|
||||
(outline (path signal 100 500 500 1250 500))
|
||||
(outline (path signal 100 1250 500 1250 -1500))
|
||||
(outline (path signal 100 250 250 500 500))
|
||||
(outline (path signal 100 250 -1500 250 250))
|
||||
(outline (path signal 100 -150 150 250 150))
|
||||
(outline (path signal 100 -150 -150 250 -150))
|
||||
(outline (path signal 100 -150 -850 250 -850))
|
||||
(outline (path signal 100 -150 -1150 250 -1150))
|
||||
(outline (path signal 100 1250 -1500 250 -1500))
|
||||
(outline (path signal 100 -150 150 -150 -150))
|
||||
(outline (path signal 100 -150 -850 -150 -1150))
|
||||
(pin Rect[A]Pad_850x850_um 1 0 0)
|
||||
(pin Oval[A]Pad_850x850_um 2 0 -1000)
|
||||
)
|
||||
(image Connector_PinHeader_1.00mm:PinHeader_1x02_P1.00mm_Horizontal::1
|
||||
(outline (path signal 120 -685 0 -685 685))
|
||||
(outline (path signal 120 -685 685 0 685))
|
||||
(outline (path signal 120 1310 -1560 394.493 -1560))
|
||||
(outline (path signal 120 1310 560 1310 -1560))
|
||||
(outline (path signal 120 3310 -1210 1310 -1210))
|
||||
(outline (path signal 120 685 -500 1310 -500))
|
||||
(outline (path signal 120 3310 -210 1310 -210))
|
||||
(outline (path signal 120 685 560 1310 560))
|
||||
(outline (path signal 120 3310 -790 3310 -1210))
|
||||
(outline (path signal 120 1310 -790 3310 -790))
|
||||
(outline (path signal 120 3310 210 3310 -210))
|
||||
(outline (path signal 120 1310 -90 3310 -90))
|
||||
(outline (path signal 120 1310 30 3310 30))
|
||||
(outline (path signal 120 1310 150 3310 150))
|
||||
(outline (path signal 120 1310 210 3310 210))
|
||||
(outline (path signal 50 -1000 1000 -1000 -2000))
|
||||
(outline (path signal 50 3750 1000 -1000 1000))
|
||||
(outline (path signal 50 -1000 -2000 3750 -2000))
|
||||
(outline (path signal 50 3750 -2000 3750 1000))
|
||||
(outline (path signal 100 -150 -850 -150 -1150))
|
||||
(outline (path signal 100 -150 150 -150 -150))
|
||||
(outline (path signal 100 1250 -1500 250 -1500))
|
||||
(outline (path signal 100 -150 -1150 250 -1150))
|
||||
(outline (path signal 100 -150 -850 250 -850))
|
||||
(outline (path signal 100 -150 -150 250 -150))
|
||||
(outline (path signal 100 -150 150 250 150))
|
||||
(outline (path signal 100 250 -1500 250 250))
|
||||
(outline (path signal 100 250 250 500 500))
|
||||
(outline (path signal 100 1250 500 1250 -1500))
|
||||
(outline (path signal 100 500 500 1250 500))
|
||||
(outline (path signal 100 1250 -1150 3250 -1150))
|
||||
(outline (path signal 100 3250 -850 3250 -1150))
|
||||
(outline (path signal 100 1250 -850 3250 -850))
|
||||
(outline (path signal 100 1250 -150 3250 -150))
|
||||
(outline (path signal 100 3250 150 3250 -150))
|
||||
(outline (path signal 100 1250 150 3250 150))
|
||||
(pin Rect[A]Pad_850x850_um 1 0 0)
|
||||
(pin Oval[A]Pad_850x850_um 2 0 -1000)
|
||||
)
|
||||
(padstack Oval[A]Pad_850x850_um
|
||||
(shape (path F.Cu 850 0 0 0 0))
|
||||
(shape (path B.Cu 850 0 0 0 0))
|
||||
(attach off)
|
||||
)
|
||||
(padstack RoundRect[T]Pad_1050x950_238.404_um_0.000000_0
|
||||
(shape (polygon F.Cu 0 -525.904 237.5 -507.757 328.733 -456.077 406.077 -378.733 457.757
|
||||
-287.5 475.904 287.5 475.904 378.733 457.757 456.077 406.077
|
||||
507.757 328.733 525.904 237.5 525.904 -237.5 507.757 -328.733
|
||||
456.077 -406.077 378.733 -457.757 287.5 -475.904 -287.5 -475.904
|
||||
-378.733 -457.757 -456.077 -406.077 -507.757 -328.733 -525.904 -237.5
|
||||
-525.904 237.5))
|
||||
(attach off)
|
||||
)
|
||||
(padstack RoundRect[T]Pad_1075x950_238.404_um_0.000000_0
|
||||
(shape (polygon F.Cu 0 -538.404 237.5 -520.257 328.733 -468.577 406.077 -391.233 457.757
|
||||
-300 475.904 300 475.904 391.233 457.757 468.577 406.077
|
||||
520.257 328.733 538.404 237.5 538.404 -237.5 520.257 -328.733
|
||||
468.577 -406.077 391.233 -457.757 300 -475.904 -300 -475.904
|
||||
-391.233 -457.757 -468.577 -406.077 -520.257 -328.733 -538.404 -237.5
|
||||
-538.404 237.5))
|
||||
(attach off)
|
||||
)
|
||||
(padstack Rect[A]Pad_850x850_um
|
||||
(shape (rect F.Cu -425 -425 425 425))
|
||||
(shape (rect B.Cu -425 -425 425 425))
|
||||
(attach off)
|
||||
)
|
||||
(padstack "Via[0-1]_600:300_um"
|
||||
(shape (circle F.Cu 600))
|
||||
(shape (circle B.Cu 600))
|
||||
(attach off)
|
||||
)
|
||||
)
|
||||
(network
|
||||
(net "Net-(C1-Pad1)"
|
||||
(pins L1-2 C1-1 L2-1)
|
||||
)
|
||||
(net GND
|
||||
(pins C12-2 C3-2 C4-2 C7-2 C6-2 C1-2 C11-2 C9-2 C10-2 C2-2 C5-2 C8-2 J1-2 J6-2
|
||||
J8-2 J2-2 J3-2 J7-2 J4-2 J5-2)
|
||||
)
|
||||
(net "Net-(C2-Pad1)"
|
||||
(pins L3-1 L2-2 C2-1)
|
||||
)
|
||||
(net "Net-(J2-Pin_1)"
|
||||
(pins C3-1 L3-2 J2-1)
|
||||
)
|
||||
(net "Net-(C4-Pad1)"
|
||||
(pins C4-1 L5-1 L4-2)
|
||||
)
|
||||
(net "Net-(C5-Pad1)"
|
||||
(pins L6-1 L5-2 C5-1)
|
||||
)
|
||||
(net "Net-(J4-Pin_1)"
|
||||
(pins L6-2 C6-1 J4-1)
|
||||
)
|
||||
(net "Net-(C7-Pad1)"
|
||||
(pins C7-1 L7-2 L8-1)
|
||||
)
|
||||
(net "Net-(C8-Pad1)"
|
||||
(pins L9-1 L8-2 C8-1)
|
||||
)
|
||||
(net "Net-(J6-Pin_1)"
|
||||
(pins L9-2 C9-1 J6-1)
|
||||
)
|
||||
(net "Net-(C10-Pad1)"
|
||||
(pins L10-2 C10-1 L11-1)
|
||||
)
|
||||
(net "Net-(C11-Pad1)"
|
||||
(pins L12-1 C11-1 L11-2)
|
||||
)
|
||||
(net "Net-(J8-Pin_1)"
|
||||
(pins L12-2 C12-1 J8-1)
|
||||
)
|
||||
(net "Net-(J1-Pin_1)"
|
||||
(pins L1-1 J1-1)
|
||||
)
|
||||
(net "Net-(J3-Pin_1)"
|
||||
(pins L4-1 J3-1)
|
||||
)
|
||||
(net "Net-(J5-Pin_1)"
|
||||
(pins L7-1 J5-1)
|
||||
)
|
||||
(net "Net-(J7-Pin_1)"
|
||||
(pins L10-1 J7-1)
|
||||
)
|
||||
(class kicad_default "" GND "Net-(C1-Pad1)" "Net-(C10-Pad1)" "Net-(C11-Pad1)"
|
||||
"Net-(C2-Pad1)" "Net-(C4-Pad1)" "Net-(C5-Pad1)" "Net-(C7-Pad1)" "Net-(C8-Pad1)"
|
||||
"Net-(J1-Pin_1)" "Net-(J2-Pin_1)" "Net-(J3-Pin_1)" "Net-(J4-Pin_1)"
|
||||
"Net-(J5-Pin_1)" "Net-(J6-Pin_1)" "Net-(J7-Pin_1)" "Net-(J8-Pin_1)"
|
||||
(circuit
|
||||
(use_via Via[0-1]_600:300_um)
|
||||
)
|
||||
(rule
|
||||
(width 200)
|
||||
(clearance 200)
|
||||
)
|
||||
)
|
||||
)
|
||||
(wiring
|
||||
)
|
||||
)
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,83 @@
|
|||
{
|
||||
"board": {
|
||||
"active_layer": 44,
|
||||
"active_layer_preset": "All Layers",
|
||||
"auto_track_width": true,
|
||||
"hidden_netclasses": [],
|
||||
"hidden_nets": [],
|
||||
"high_contrast_mode": 0,
|
||||
"net_color_mode": 1,
|
||||
"opacity": {
|
||||
"images": 0.6,
|
||||
"pads": 1.0,
|
||||
"tracks": 1.0,
|
||||
"vias": 1.0,
|
||||
"zones": 0.6
|
||||
},
|
||||
"selection_filter": {
|
||||
"dimensions": true,
|
||||
"footprints": true,
|
||||
"graphics": true,
|
||||
"keepouts": true,
|
||||
"lockedItems": false,
|
||||
"otherItems": true,
|
||||
"pads": true,
|
||||
"text": true,
|
||||
"tracks": true,
|
||||
"vias": true,
|
||||
"zones": true
|
||||
},
|
||||
"visible_items": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
8,
|
||||
9,
|
||||
10,
|
||||
11,
|
||||
12,
|
||||
13,
|
||||
15,
|
||||
16,
|
||||
17,
|
||||
18,
|
||||
19,
|
||||
20,
|
||||
21,
|
||||
22,
|
||||
23,
|
||||
24,
|
||||
25,
|
||||
26,
|
||||
27,
|
||||
28,
|
||||
29,
|
||||
30,
|
||||
32,
|
||||
33,
|
||||
34,
|
||||
35,
|
||||
36,
|
||||
39,
|
||||
40
|
||||
],
|
||||
"visible_layers": "fffffff_ffffffff",
|
||||
"zone_display_mode": 0
|
||||
},
|
||||
"git": {
|
||||
"repo_password": "",
|
||||
"repo_type": "",
|
||||
"repo_username": "",
|
||||
"ssh_key": ""
|
||||
},
|
||||
"meta": {
|
||||
"filename": "four_3rd_order_smd_lc_filters.kicad_prl",
|
||||
"version": 3
|
||||
},
|
||||
"project": {
|
||||
"files": []
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,582 @@
|
|||
{
|
||||
"board": {
|
||||
"3dviewports": [],
|
||||
"design_settings": {
|
||||
"defaults": {
|
||||
"apply_defaults_to_fp_fields": false,
|
||||
"apply_defaults_to_fp_shapes": false,
|
||||
"apply_defaults_to_fp_text": false,
|
||||
"board_outline_line_width": 0.05,
|
||||
"copper_line_width": 0.2,
|
||||
"copper_text_italic": false,
|
||||
"copper_text_size_h": 1.5,
|
||||
"copper_text_size_v": 1.5,
|
||||
"copper_text_thickness": 0.3,
|
||||
"copper_text_upright": false,
|
||||
"courtyard_line_width": 0.05,
|
||||
"dimension_precision": 4,
|
||||
"dimension_units": 3,
|
||||
"dimensions": {
|
||||
"arrow_length": 1270000,
|
||||
"extension_offset": 500000,
|
||||
"keep_text_aligned": true,
|
||||
"suppress_zeroes": false,
|
||||
"text_position": 0,
|
||||
"units_format": 1
|
||||
},
|
||||
"fab_line_width": 0.1,
|
||||
"fab_text_italic": false,
|
||||
"fab_text_size_h": 1.0,
|
||||
"fab_text_size_v": 1.0,
|
||||
"fab_text_thickness": 0.15,
|
||||
"fab_text_upright": false,
|
||||
"other_line_width": 0.1,
|
||||
"other_text_italic": false,
|
||||
"other_text_size_h": 1.0,
|
||||
"other_text_size_v": 1.0,
|
||||
"other_text_thickness": 0.15,
|
||||
"other_text_upright": false,
|
||||
"pads": {
|
||||
"drill": 0.762,
|
||||
"height": 1.524,
|
||||
"width": 1.524
|
||||
},
|
||||
"silk_line_width": 0.1,
|
||||
"silk_text_italic": false,
|
||||
"silk_text_size_h": 1.0,
|
||||
"silk_text_size_v": 1.0,
|
||||
"silk_text_thickness": 0.1,
|
||||
"silk_text_upright": false,
|
||||
"zones": {
|
||||
"min_clearance": 0.5
|
||||
}
|
||||
},
|
||||
"diff_pair_dimensions": [],
|
||||
"drc_exclusions": [],
|
||||
"meta": {
|
||||
"version": 2
|
||||
},
|
||||
"rule_severities": {
|
||||
"annular_width": "error",
|
||||
"clearance": "error",
|
||||
"connection_width": "warning",
|
||||
"copper_edge_clearance": "error",
|
||||
"copper_sliver": "warning",
|
||||
"courtyards_overlap": "error",
|
||||
"diff_pair_gap_out_of_range": "error",
|
||||
"diff_pair_uncoupled_length_too_long": "error",
|
||||
"drill_out_of_range": "error",
|
||||
"duplicate_footprints": "warning",
|
||||
"extra_footprint": "warning",
|
||||
"footprint": "error",
|
||||
"footprint_symbol_mismatch": "warning",
|
||||
"footprint_type_mismatch": "ignore",
|
||||
"hole_clearance": "error",
|
||||
"hole_near_hole": "error",
|
||||
"invalid_outline": "error",
|
||||
"isolated_copper": "warning",
|
||||
"item_on_disabled_layer": "error",
|
||||
"items_not_allowed": "error",
|
||||
"length_out_of_range": "error",
|
||||
"lib_footprint_issues": "warning",
|
||||
"lib_footprint_mismatch": "warning",
|
||||
"malformed_courtyard": "error",
|
||||
"microvia_drill_out_of_range": "error",
|
||||
"missing_courtyard": "ignore",
|
||||
"missing_footprint": "warning",
|
||||
"net_conflict": "warning",
|
||||
"npth_inside_courtyard": "ignore",
|
||||
"padstack": "warning",
|
||||
"pth_inside_courtyard": "ignore",
|
||||
"shorting_items": "error",
|
||||
"silk_edge_clearance": "warning",
|
||||
"silk_over_copper": "warning",
|
||||
"silk_overlap": "warning",
|
||||
"skew_out_of_range": "error",
|
||||
"solder_mask_bridge": "error",
|
||||
"starved_thermal": "error",
|
||||
"text_height": "warning",
|
||||
"text_thickness": "warning",
|
||||
"through_hole_pad_without_hole": "error",
|
||||
"too_many_vias": "error",
|
||||
"track_dangling": "warning",
|
||||
"track_width": "error",
|
||||
"tracks_crossing": "error",
|
||||
"unconnected_items": "error",
|
||||
"unresolved_variable": "error",
|
||||
"via_dangling": "warning",
|
||||
"zones_intersect": "error"
|
||||
},
|
||||
"rules": {
|
||||
"max_error": 0.005,
|
||||
"min_clearance": 0.0,
|
||||
"min_connection": 0.0,
|
||||
"min_copper_edge_clearance": 0.5,
|
||||
"min_hole_clearance": 0.25,
|
||||
"min_hole_to_hole": 0.25,
|
||||
"min_microvia_diameter": 0.2,
|
||||
"min_microvia_drill": 0.1,
|
||||
"min_resolved_spokes": 2,
|
||||
"min_silk_clearance": 0.0,
|
||||
"min_text_height": 0.8,
|
||||
"min_text_thickness": 0.08,
|
||||
"min_through_hole_diameter": 0.3,
|
||||
"min_track_width": 0.0,
|
||||
"min_via_annular_width": 0.1,
|
||||
"min_via_diameter": 0.5,
|
||||
"solder_mask_to_copper_clearance": 0.0,
|
||||
"use_height_for_length_calcs": true
|
||||
},
|
||||
"teardrop_options": [
|
||||
{
|
||||
"td_onpadsmd": true,
|
||||
"td_onroundshapesonly": false,
|
||||
"td_ontrackend": false,
|
||||
"td_onviapad": true
|
||||
}
|
||||
],
|
||||
"teardrop_parameters": [
|
||||
{
|
||||
"td_allow_use_two_tracks": true,
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_on_pad_in_zone": false,
|
||||
"td_target_name": "td_round_shape",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
},
|
||||
{
|
||||
"td_allow_use_two_tracks": true,
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_on_pad_in_zone": false,
|
||||
"td_target_name": "td_rect_shape",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
},
|
||||
{
|
||||
"td_allow_use_two_tracks": true,
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_on_pad_in_zone": false,
|
||||
"td_target_name": "td_track_end",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
}
|
||||
],
|
||||
"track_widths": [],
|
||||
"tuning_pattern_settings": {
|
||||
"diff_pair_defaults": {
|
||||
"corner_radius_percentage": 80,
|
||||
"corner_style": 1,
|
||||
"max_amplitude": 1.0,
|
||||
"min_amplitude": 0.2,
|
||||
"single_sided": false,
|
||||
"spacing": 1.0
|
||||
},
|
||||
"diff_pair_skew_defaults": {
|
||||
"corner_radius_percentage": 80,
|
||||
"corner_style": 1,
|
||||
"max_amplitude": 1.0,
|
||||
"min_amplitude": 0.2,
|
||||
"single_sided": false,
|
||||
"spacing": 0.6
|
||||
},
|
||||
"single_track_defaults": {
|
||||
"corner_radius_percentage": 80,
|
||||
"corner_style": 1,
|
||||
"max_amplitude": 1.0,
|
||||
"min_amplitude": 0.2,
|
||||
"single_sided": false,
|
||||
"spacing": 0.6
|
||||
}
|
||||
},
|
||||
"via_dimensions": [],
|
||||
"zones_allow_external_fillets": false
|
||||
},
|
||||
"ipc2581": {
|
||||
"dist": "",
|
||||
"distpn": "",
|
||||
"internal_id": "",
|
||||
"mfg": "",
|
||||
"mpn": ""
|
||||
},
|
||||
"layer_presets": [],
|
||||
"viewports": []
|
||||
},
|
||||
"boards": [],
|
||||
"cvpcb": {
|
||||
"equivalence_files": []
|
||||
},
|
||||
"erc": {
|
||||
"erc_exclusions": [],
|
||||
"meta": {
|
||||
"version": 0
|
||||
},
|
||||
"pin_map": [
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
2,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
1,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
2,
|
||||
1,
|
||||
1,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
2,
|
||||
1,
|
||||
2,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
2,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
2,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
2,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
2,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2
|
||||
]
|
||||
],
|
||||
"rule_severities": {
|
||||
"bus_definition_conflict": "error",
|
||||
"bus_entry_needed": "error",
|
||||
"bus_to_bus_conflict": "error",
|
||||
"bus_to_net_conflict": "error",
|
||||
"conflicting_netclasses": "error",
|
||||
"different_unit_footprint": "error",
|
||||
"different_unit_net": "error",
|
||||
"duplicate_reference": "error",
|
||||
"duplicate_sheet_names": "error",
|
||||
"endpoint_off_grid": "warning",
|
||||
"extra_units": "error",
|
||||
"global_label_dangling": "warning",
|
||||
"hier_label_mismatch": "error",
|
||||
"label_dangling": "error",
|
||||
"lib_symbol_issues": "warning",
|
||||
"missing_bidi_pin": "warning",
|
||||
"missing_input_pin": "warning",
|
||||
"missing_power_pin": "error",
|
||||
"missing_unit": "warning",
|
||||
"multiple_net_names": "warning",
|
||||
"net_not_bus_member": "warning",
|
||||
"no_connect_connected": "warning",
|
||||
"no_connect_dangling": "warning",
|
||||
"pin_not_connected": "error",
|
||||
"pin_not_driven": "error",
|
||||
"pin_to_pin": "warning",
|
||||
"power_pin_not_driven": "error",
|
||||
"similar_labels": "warning",
|
||||
"simulation_model_issue": "ignore",
|
||||
"unannotated": "error",
|
||||
"unit_value_mismatch": "error",
|
||||
"unresolved_variable": "error",
|
||||
"wire_dangling": "error"
|
||||
}
|
||||
},
|
||||
"libraries": {
|
||||
"pinned_footprint_libs": [],
|
||||
"pinned_symbol_libs": []
|
||||
},
|
||||
"meta": {
|
||||
"filename": "four_3rd_order_smd_lc_filters.kicad_pro",
|
||||
"version": 1
|
||||
},
|
||||
"net_settings": {
|
||||
"classes": [
|
||||
{
|
||||
"bus_width": 12,
|
||||
"clearance": 0.2,
|
||||
"diff_pair_gap": 0.25,
|
||||
"diff_pair_via_gap": 0.25,
|
||||
"diff_pair_width": 0.2,
|
||||
"line_style": 0,
|
||||
"microvia_diameter": 0.3,
|
||||
"microvia_drill": 0.1,
|
||||
"name": "Default",
|
||||
"pcb_color": "rgba(0, 0, 0, 0.000)",
|
||||
"schematic_color": "rgba(0, 0, 0, 0.000)",
|
||||
"track_width": 0.2,
|
||||
"via_diameter": 0.6,
|
||||
"via_drill": 0.3,
|
||||
"wire_width": 6
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"version": 3
|
||||
},
|
||||
"net_colors": null,
|
||||
"netclass_assignments": null,
|
||||
"netclass_patterns": []
|
||||
},
|
||||
"pcbnew": {
|
||||
"last_paths": {
|
||||
"gencad": "",
|
||||
"idf": "",
|
||||
"netlist": "",
|
||||
"plot": "",
|
||||
"pos_files": "",
|
||||
"specctra_dsn": "four_3rd_order_smd_lc_filters.dsn",
|
||||
"step": "",
|
||||
"svg": "",
|
||||
"vrml": ""
|
||||
},
|
||||
"page_layout_descr_file": ""
|
||||
},
|
||||
"schematic": {
|
||||
"annotate_start_num": 0,
|
||||
"bom_fmt_presets": [],
|
||||
"bom_fmt_settings": {
|
||||
"field_delimiter": ",",
|
||||
"keep_line_breaks": false,
|
||||
"keep_tabs": false,
|
||||
"name": "CSV",
|
||||
"ref_delimiter": ",",
|
||||
"ref_range_delimiter": "",
|
||||
"string_delimiter": "\""
|
||||
},
|
||||
"bom_presets": [],
|
||||
"bom_settings": {
|
||||
"exclude_dnp": false,
|
||||
"fields_ordered": [
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Reference",
|
||||
"name": "Reference",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": true,
|
||||
"label": "Value",
|
||||
"name": "Value",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Datasheet",
|
||||
"name": "Datasheet",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Footprint",
|
||||
"name": "Footprint",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Qty",
|
||||
"name": "${QUANTITY}",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": true,
|
||||
"label": "DNP",
|
||||
"name": "${DNP}",
|
||||
"show": true
|
||||
}
|
||||
],
|
||||
"filter_string": "",
|
||||
"group_symbols": true,
|
||||
"name": "Grouped By Value",
|
||||
"sort_asc": true,
|
||||
"sort_field": "Reference"
|
||||
},
|
||||
"connection_grid_size": 50.0,
|
||||
"drawing": {
|
||||
"dashed_lines_dash_length_ratio": 12.0,
|
||||
"dashed_lines_gap_length_ratio": 3.0,
|
||||
"default_line_thickness": 6.0,
|
||||
"default_text_size": 50.0,
|
||||
"field_names": [],
|
||||
"intersheets_ref_own_page": false,
|
||||
"intersheets_ref_prefix": "",
|
||||
"intersheets_ref_short": false,
|
||||
"intersheets_ref_show": false,
|
||||
"intersheets_ref_suffix": "",
|
||||
"junction_size_choice": 3,
|
||||
"label_size_ratio": 0.375,
|
||||
"operating_point_overlay_i_precision": 3,
|
||||
"operating_point_overlay_i_range": "~A",
|
||||
"operating_point_overlay_v_precision": 3,
|
||||
"operating_point_overlay_v_range": "~V",
|
||||
"overbar_offset_ratio": 1.23,
|
||||
"pin_symbol_size": 25.0,
|
||||
"text_offset_ratio": 0.15
|
||||
},
|
||||
"legacy_lib_dir": "",
|
||||
"legacy_lib_list": [],
|
||||
"meta": {
|
||||
"version": 1
|
||||
},
|
||||
"net_format_name": "",
|
||||
"page_layout_descr_file": "",
|
||||
"plot_directory": "",
|
||||
"spice_current_sheet_as_root": false,
|
||||
"spice_external_command": "spice \"%I\"",
|
||||
"spice_model_current_sheet_as_root": true,
|
||||
"spice_save_all_currents": false,
|
||||
"spice_save_all_dissipations": false,
|
||||
"spice_save_all_voltages": false,
|
||||
"subpart_first_id": 65,
|
||||
"subpart_id_separator": 0
|
||||
},
|
||||
"sheets": [
|
||||
[
|
||||
"c335cb5a-108f-4efe-927e-854b96e1559e",
|
||||
"Root"
|
||||
]
|
||||
],
|
||||
"text_variables": {}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,86 @@
|
|||
use std::fs::File;
|
||||
|
||||
use petgraph::{
|
||||
unionfind::UnionFind,
|
||||
visit::{EdgeRef, IntoEdgeReferences, NodeIndexable},
|
||||
};
|
||||
use topola::{
|
||||
autorouter::{invoker::Invoker, Autorouter},
|
||||
drawing::graph::GetMaybeNet,
|
||||
dsn::design::DsnDesign,
|
||||
graph::GetNodeIndex,
|
||||
triangulation::GetVertexIndex,
|
||||
};
|
||||
|
||||
#[test]
|
||||
fn test() {
|
||||
let design = DsnDesign::load_from_file(
|
||||
"tests/data/four_3rd_order_smd_lc_filters/four_3rd_order_smd_lc_filters.dsn",
|
||||
);
|
||||
let board = design.unwrap().make_board();
|
||||
|
||||
let mut invoker = Invoker::new(Autorouter::new(board).unwrap());
|
||||
let file = File::open("tests/data/four_3rd_order_smd_lc_filters/autoroute_signal.cmd").unwrap();
|
||||
invoker.replay(serde_json::from_reader(file).unwrap());
|
||||
|
||||
let (mut autorouter, ..) = invoker.destruct();
|
||||
|
||||
for ratline in autorouter.ratsnest().graph().edge_indices() {
|
||||
// Accessing endpoints may create new dots because apex construction is lazy, so we access
|
||||
// tem all before starting unionfind, as it requires a constant index bound.
|
||||
let _ = autorouter.ratline_endpoints(ratline);
|
||||
}
|
||||
|
||||
let mut unionfind = UnionFind::new(
|
||||
autorouter
|
||||
.board()
|
||||
.layout()
|
||||
.drawing()
|
||||
.geometry()
|
||||
.graph()
|
||||
.node_bound(),
|
||||
);
|
||||
|
||||
for edge in autorouter
|
||||
.board()
|
||||
.layout()
|
||||
.drawing()
|
||||
.geometry()
|
||||
.graph()
|
||||
.edge_references()
|
||||
{
|
||||
unionfind.union(edge.source(), edge.target());
|
||||
}
|
||||
|
||||
for ratline in autorouter.ratsnest().graph().edge_indices() {
|
||||
let (source_dot, target_dot) = autorouter.ratline_endpoints(ratline);
|
||||
let source_net = autorouter
|
||||
.board()
|
||||
.layout()
|
||||
.drawing()
|
||||
.primitive(source_dot)
|
||||
.maybe_net();
|
||||
let target_net = autorouter
|
||||
.board()
|
||||
.layout()
|
||||
.drawing()
|
||||
.primitive(target_dot)
|
||||
.maybe_net();
|
||||
|
||||
assert_eq!(source_net, target_net);
|
||||
let net = source_net.unwrap();
|
||||
|
||||
if let Some(netname) = autorouter.board().netname(net) {
|
||||
dbg!(netname);
|
||||
|
||||
// We don't route GND.
|
||||
if netname != "GND" {
|
||||
dbg!(source_dot, target_dot);
|
||||
assert_eq!(
|
||||
unionfind.find(source_dot.node_index()),
|
||||
unionfind.find(target_dot.node_index())
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue