mirror of https://codeberg.org/topola/topola.git
feat: improve Selection API (BREAKS HISTORY)
Test command files were rewritten using: ``` for f in tests/**/*.cmd; do jq ".done?.[].Autoroute[0] |= .selectors" "$f" | sponge "$f"; done ``` (compatible with bash/zsh/...)
This commit is contained in:
parent
5a26c02b4e
commit
1fd61f773c
|
|
@ -16,32 +16,8 @@ pub struct PinSelector {
|
||||||
pub layer: String,
|
pub layer: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
|
impl PinSelector {
|
||||||
pub struct PinSelection {
|
pub fn try_from_node(
|
||||||
selectors: HashSet<PinSelector>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl PinSelection {
|
|
||||||
pub fn new() -> Self {
|
|
||||||
Self::default()
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn new_select_layer(board: &Board<impl AccessMesadata>, layer: usize) -> Self {
|
|
||||||
let mut this = Self::new();
|
|
||||||
|
|
||||||
for node in board.layout().drawing().layer_primitive_nodes(layer) {
|
|
||||||
if let Some(selector) = this.node_selector(board, GenericNode::Primitive(node)) {
|
|
||||||
if !this.contains_node(board, GenericNode::Primitive(node)) {
|
|
||||||
this.select(selector);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this
|
|
||||||
}
|
|
||||||
|
|
||||||
fn node_selector(
|
|
||||||
&self,
|
|
||||||
board: &Board<impl AccessMesadata>,
|
board: &Board<impl AccessMesadata>,
|
||||||
node: NodeIndex,
|
node: NodeIndex,
|
||||||
) -> Option<PinSelector> {
|
) -> Option<PinSelector> {
|
||||||
|
|
@ -74,22 +50,35 @@ impl PinSelection {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn select(&mut self, selector: PinSelector) {
|
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
|
||||||
self.selectors.insert(selector);
|
pub struct PinSelection(HashSet<PinSelector>);
|
||||||
|
|
||||||
|
impl PinSelection {
|
||||||
|
pub fn new() -> Self {
|
||||||
|
Self::default()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn deselect(&mut self, selector: &PinSelector) {
|
pub fn new_select_layer(board: &Board<impl AccessMesadata>, layer: usize) -> Self {
|
||||||
self.selectors.remove(selector);
|
let mut this = Self::default();
|
||||||
|
|
||||||
|
for node in board.layout().drawing().layer_primitive_nodes(layer) {
|
||||||
|
if let Some(selector) = PinSelector::try_from_node(board, GenericNode::Primitive(node))
|
||||||
|
{
|
||||||
|
this.0.insert(selector);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn contains_node(&self, board: &Board<impl AccessMesadata>, node: NodeIndex) -> bool {
|
pub fn contains_node(&self, board: &Board<impl AccessMesadata>, node: NodeIndex) -> bool {
|
||||||
self.node_selector(board, node)
|
PinSelector::try_from_node(board, node).map_or(false, |selector| self.0.contains(&selector))
|
||||||
.map_or(false, |selector| self.selectors.contains(&selector))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn selectors(&self) -> impl Iterator<Item = &PinSelector> {
|
pub fn selectors(&self) -> impl Iterator<Item = &PinSelector> {
|
||||||
self.selectors.iter()
|
self.0.iter()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -98,18 +87,8 @@ pub struct BandSelector {
|
||||||
pub band: BandName,
|
pub band: BandName,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
|
impl BandSelector {
|
||||||
pub struct BandSelection {
|
pub fn try_from_node(
|
||||||
selectors: HashSet<BandSelector>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl BandSelection {
|
|
||||||
pub fn new() -> Self {
|
|
||||||
Self::default()
|
|
||||||
}
|
|
||||||
|
|
||||||
fn node_selector(
|
|
||||||
&self,
|
|
||||||
board: &Board<impl AccessMesadata>,
|
board: &Board<impl AccessMesadata>,
|
||||||
node: NodeIndex,
|
node: NodeIndex,
|
||||||
) -> Option<BandSelector> {
|
) -> Option<BandSelector> {
|
||||||
|
|
@ -131,22 +110,23 @@ impl BandSelection {
|
||||||
.clone(),
|
.clone(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn select(&mut self, selector: BandSelector) {
|
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
|
||||||
self.selectors.insert(selector);
|
pub struct BandSelection(HashSet<BandSelector>);
|
||||||
}
|
|
||||||
|
|
||||||
fn deselect(&mut self, selector: &BandSelector) {
|
impl BandSelection {
|
||||||
self.selectors.remove(selector);
|
pub fn new() -> Self {
|
||||||
|
Self::default()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn contains_node(&self, board: &Board<impl AccessMesadata>, node: NodeIndex) -> bool {
|
pub fn contains_node(&self, board: &Board<impl AccessMesadata>, node: NodeIndex) -> bool {
|
||||||
self.node_selector(board, node)
|
BandSelector::try_from_node(board, node)
|
||||||
.map_or(false, |selector| self.selectors.contains(&selector))
|
.map_or(false, |selector| self.0.contains(&selector))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn selectors(&self) -> impl Iterator<Item = &BandSelector> {
|
pub fn selectors(&self) -> impl Iterator<Item = &BandSelector> {
|
||||||
self.selectors.iter()
|
self.0.iter()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -162,17 +142,17 @@ impl Selection {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn toggle_at_node(&mut self, board: &Board<impl AccessMesadata>, node: NodeIndex) {
|
pub fn toggle_at_node(&mut self, board: &Board<impl AccessMesadata>, node: NodeIndex) {
|
||||||
if let Some(selector) = self.pin_selection.node_selector(board, node) {
|
if let Some(selector) = PinSelector::try_from_node(board, node) {
|
||||||
if self.pin_selection.contains_node(board, node) {
|
if self.pin_selection.0.contains(&selector) {
|
||||||
self.pin_selection.deselect(&selector);
|
self.pin_selection.0.remove(&selector);
|
||||||
} else {
|
} else {
|
||||||
self.pin_selection.select(selector);
|
self.pin_selection.0.insert(selector);
|
||||||
}
|
}
|
||||||
} else if let Some(selector) = self.band_selection.node_selector(board, node) {
|
} else if let Some(selector) = BandSelector::try_from_node(board, node) {
|
||||||
if self.band_selection.contains_node(board, node) {
|
if self.band_selection.0.contains(&selector) {
|
||||||
self.band_selection.deselect(&selector);
|
self.band_selection.0.remove(&selector);
|
||||||
} else {
|
} else {
|
||||||
self.band_selection.select(selector);
|
self.band_selection.0.insert(selector);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,18 +2,16 @@
|
||||||
"done": [
|
"done": [
|
||||||
{
|
{
|
||||||
"Autoroute": [
|
"Autoroute": [
|
||||||
{
|
[
|
||||||
"selectors": [
|
{
|
||||||
{
|
"pin": "R1-2",
|
||||||
"pin": "R1-2",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "J1-2",
|
||||||
"pin": "J1-2",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
}
|
||||||
}
|
],
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"presort_by_pairwise_detours": false,
|
"presort_by_pairwise_detours": false,
|
||||||
"router_options": {
|
"router_options": {
|
||||||
|
|
@ -26,18 +24,16 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Autoroute": [
|
"Autoroute": [
|
||||||
{
|
[
|
||||||
"selectors": [
|
{
|
||||||
{
|
"pin": "J1-1",
|
||||||
"pin": "J1-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "R1-1",
|
||||||
"pin": "R1-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
}
|
||||||
}
|
],
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"presort_by_pairwise_detours": false,
|
"presort_by_pairwise_detours": false,
|
||||||
"router_options": {
|
"router_options": {
|
||||||
|
|
|
||||||
|
|
@ -2,54 +2,52 @@
|
||||||
"done": [
|
"done": [
|
||||||
{
|
{
|
||||||
"Autoroute": [
|
"Autoroute": [
|
||||||
{
|
[
|
||||||
"selectors": [
|
{
|
||||||
{
|
"pin": "L3-1",
|
||||||
"pin": "L3-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "L3-2",
|
||||||
"pin": "L3-2",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "C3-1",
|
||||||
"pin": "C3-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "L1-2",
|
||||||
"pin": "L1-2",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "C2-1",
|
||||||
"pin": "C2-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "L2-2",
|
||||||
"pin": "L2-2",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "J2-1",
|
||||||
"pin": "J2-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "J1-1",
|
||||||
"pin": "J1-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "L1-1",
|
||||||
"pin": "L1-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "C1-1",
|
||||||
"pin": "C1-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "L2-1",
|
||||||
"pin": "L2-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
}
|
||||||
}
|
],
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"presort_by_pairwise_detours": false,
|
"presort_by_pairwise_detours": false,
|
||||||
"router_options": {
|
"router_options": {
|
||||||
|
|
@ -62,54 +60,52 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Autoroute": [
|
"Autoroute": [
|
||||||
{
|
[
|
||||||
"selectors": [
|
{
|
||||||
{
|
"pin": "C6-1",
|
||||||
"pin": "C6-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "J4-1",
|
||||||
"pin": "J4-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "L5-1",
|
||||||
"pin": "L5-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "J3-1",
|
||||||
"pin": "J3-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "C5-1",
|
||||||
"pin": "C5-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "L6-2",
|
||||||
"pin": "L6-2",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "L5-2",
|
||||||
"pin": "L5-2",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "C4-1",
|
||||||
"pin": "C4-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "L6-1",
|
||||||
"pin": "L6-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "L4-1",
|
||||||
"pin": "L4-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "L4-2",
|
||||||
"pin": "L4-2",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
}
|
||||||
}
|
],
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"presort_by_pairwise_detours": false,
|
"presort_by_pairwise_detours": false,
|
||||||
"router_options": {
|
"router_options": {
|
||||||
|
|
@ -122,54 +118,52 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Autoroute": [
|
"Autoroute": [
|
||||||
{
|
[
|
||||||
"selectors": [
|
{
|
||||||
{
|
"pin": "C9-1",
|
||||||
"pin": "C9-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "J5-1",
|
||||||
"pin": "J5-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "L7-1",
|
||||||
"pin": "L7-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "J6-1",
|
||||||
"pin": "J6-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "L9-2",
|
||||||
"pin": "L9-2",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "C7-1",
|
||||||
"pin": "C7-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "L8-2",
|
||||||
"pin": "L8-2",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "L9-1",
|
||||||
"pin": "L9-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "L8-1",
|
||||||
"pin": "L8-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "L7-2",
|
||||||
"pin": "L7-2",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "C8-1",
|
||||||
"pin": "C8-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
}
|
||||||
}
|
],
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"presort_by_pairwise_detours": false,
|
"presort_by_pairwise_detours": false,
|
||||||
"router_options": {
|
"router_options": {
|
||||||
|
|
@ -182,54 +176,52 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Autoroute": [
|
"Autoroute": [
|
||||||
{
|
[
|
||||||
"selectors": [
|
{
|
||||||
{
|
"pin": "L10-1",
|
||||||
"pin": "L10-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "L12-1",
|
||||||
"pin": "L12-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "J7-1",
|
||||||
"pin": "J7-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "L10-2",
|
||||||
"pin": "L10-2",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "C10-1",
|
||||||
"pin": "C10-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "C12-1",
|
||||||
"pin": "C12-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "L12-2",
|
||||||
"pin": "L12-2",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "L11-1",
|
||||||
"pin": "L11-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "C11-1",
|
||||||
"pin": "C11-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "L11-2",
|
||||||
"pin": "L11-2",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "J8-1",
|
||||||
"pin": "J8-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
}
|
||||||
}
|
],
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"presort_by_pairwise_detours": false,
|
"presort_by_pairwise_detours": false,
|
||||||
"router_options": {
|
"router_options": {
|
||||||
|
|
|
||||||
|
|
@ -2,34 +2,32 @@
|
||||||
"done": [
|
"done": [
|
||||||
{
|
{
|
||||||
"Autoroute": [
|
"Autoroute": [
|
||||||
{
|
[
|
||||||
"selectors": [
|
{
|
||||||
{
|
"pin": "J2-2",
|
||||||
"pin": "J2-2",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "J1-2",
|
||||||
"pin": "J1-2",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "J2-3",
|
||||||
"pin": "J2-3",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "J2-1",
|
||||||
"pin": "J2-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "J1-3",
|
||||||
"pin": "J1-3",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "J1-1",
|
||||||
"pin": "J1-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
}
|
||||||
}
|
],
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"presort_by_pairwise_detours": false,
|
"presort_by_pairwise_detours": false,
|
||||||
"router_options": {
|
"router_options": {
|
||||||
|
|
|
||||||
|
|
@ -2,54 +2,52 @@
|
||||||
"done": [
|
"done": [
|
||||||
{
|
{
|
||||||
"Autoroute": [
|
"Autoroute": [
|
||||||
{
|
[
|
||||||
"selectors": [
|
{
|
||||||
{
|
"pin": "J2-2",
|
||||||
"pin": "J2-2",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "J2-1",
|
||||||
"pin": "J2-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "D3-2",
|
||||||
"pin": "D3-2",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "D2-1",
|
||||||
"pin": "D2-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "D3-1",
|
||||||
"pin": "D3-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "D1-1",
|
||||||
"pin": "D1-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "J1-1",
|
||||||
"pin": "J1-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "D2-2",
|
||||||
"pin": "D2-2",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "D1-2",
|
||||||
"pin": "D1-2",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "D4-1",
|
||||||
"pin": "D4-1",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "J1-2",
|
||||||
"pin": "J1-2",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
}
|
||||||
}
|
],
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"presort_by_pairwise_detours": false,
|
"presort_by_pairwise_detours": false,
|
||||||
"router_options": {
|
"router_options": {
|
||||||
|
|
@ -62,18 +60,16 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Autoroute": [
|
"Autoroute": [
|
||||||
{
|
[
|
||||||
"selectors": [
|
{
|
||||||
{
|
"pin": "D4-2",
|
||||||
"pin": "D4-2",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
},
|
||||||
},
|
{
|
||||||
{
|
"pin": "J2-2",
|
||||||
"pin": "J2-2",
|
"layer": "F.Cu"
|
||||||
"layer": "F.Cu"
|
}
|
||||||
}
|
],
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"presort_by_pairwise_detours": false,
|
"presort_by_pairwise_detours": false,
|
||||||
"router_options": {
|
"router_options": {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue