Created
April 25, 2021 01:48
-
-
Save devilholk/2c722341f22528ef0902f500ac4b0867 to your computer and use it in GitHub Desktop.
Script for pcbnew to connect unconnected vias to closest pads (currently according to a filter on line 50 - just serves as example)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import pcbnew | |
from dataclasses import dataclass | |
@dataclass | |
class local_pad_representation: | |
pad: object = None | |
footprint: object = None | |
pos: object = None | |
friendly_name: str = None | |
@dataclass | |
class local_via_representation: | |
via: object = None | |
net: object = None | |
net_code: int = None | |
pos: object = None | |
def get_pad_list(board): | |
pad_list = list() | |
for pad in board.GetPads(): | |
footprint = pad.GetParent() | |
pad_list.append(local_pad_representation( | |
pad, | |
footprint, | |
pad.GetPosition(), | |
f'{footprint.GetReference()}-{pad.GetName()}', | |
)) | |
return pad_list | |
def get_via_list(board): | |
via_list = list() | |
for track in board.Tracks(): | |
if isinstance(track, pcbnew.VIA): | |
via_list.append( | |
local_via_representation( | |
track, | |
track.GetNet(), | |
track.GetNet().GetNetCode(), | |
track.GetPosition(), | |
) | |
) | |
return via_list | |
def get_sq_distance(delta): | |
return delta.x ** 2 + delta.y ** 2 | |
def test1(board): | |
pad_list = [pr for pr in get_pad_list(board) if pr.footprint.GetReference().startswith('RN') or pr.footprint.GetReference().startswith('TVS')] | |
via_list = [v for v in get_via_list(board) if v.net_code == 0] | |
for via in via_list: | |
closest_length = 0 | |
closest_pad = None | |
for p_index, pad in enumerate(pad_list): | |
distance = get_sq_distance(via.pos - pad.pos) | |
if closest_pad is None or distance < closest_length: | |
closest_length = distance | |
closest_pad = pad | |
print(f'Closest {via.pos} - {closest_pad.friendly_name}: {closest_length}') | |
via.via.SetNetCode(closest_pad.pad.GetNetCode()) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment