Nets
The NetOperations module handles net queries and net class management.
board = kicad.get_board()
nets = board.nets
Getting Nets
get_all()
Gets all nets on the board.
all_nets = board.nets.get_all()
for net in all_nets:
print(f"{net.name}: {net.class_name}")
get_net(name)
Gets a specific net by name.
net = board.nets.get_net("VCC")
print(f"Net class: {net.class_name}")
find_by_pattern(pattern)
Finds nets matching a pattern.
# Find all data bus nets
data_nets = board.nets.find_by_pattern("DATA*")
# Find all power nets
power_nets = board.nets.find_by_pattern("*VCC*")
Net Information
get_items_on_net(net_name)
Gets all items connected to a net.
items = board.nets.get_items_on_net("GND")
print(f"GND has {len(items)} connected items")
for item in items:
print(f" {item.type}: {item.id}")
get_pads_on_net(net_name)
Gets all pads on a net.
pads = board.nets.get_pads_on_net("VCC")
for pad in pads:
print(f"Pad {pad.number} on {pad.footprint}")
Creating Nets
create_net(name, net_class=None)
Creates a new net.
board.nets.create_net("NEW_SIGNAL", net_class="HighSpeed")
set_name(old_name, new_name)
Renames a net.
board.nets.set_name("Net-(U1-Pad3)", "MCU_TX")
Net Classes
Net classes define routing rules for groups of nets.
get_net_classes()
Gets all net classes.
classes = board.nets.get_net_classes()
for nc in classes:
print(f"{nc.name}: {nc.track_width_mm}mm track, {nc.clearance_mm}mm clearance")
assign_net_class(net_name, class_name)
Assigns a net to a net class.
board.nets.assign_net_class("CLK", "HighSpeed")
assign_nets_by_pattern(pattern, class_name)
Assigns multiple nets by pattern.
# Assign all power nets
board.nets.assign_nets_by_pattern("*VCC*", "Power")
board.nets.assign_nets_by_pattern("*GND*", "Power")
# Assign clock nets
board.nets.assign_nets_by_pattern("CLK*", "HighSpeed")
Example: Analyze Net Statistics
from kipy import KiCad
kicad = KiCad()
board = kicad.get_board()
# Get all nets
all_nets = board.nets.get_all()
# Count items per net
net_stats = []
for net in all_nets:
items = board.nets.get_items_on_net(net.name)
net_stats.append({
'name': net.name,
'items': len(items),
'class': net.class_name
})
# Sort by item count
net_stats.sort(key=lambda x: x['items'], reverse=True)
print("Top 10 nets by connectivity:")
for stat in net_stats[:10]:
print(f" {stat['name']}: {stat['items']} items ({stat['class']})")
Example: Assign Net Classes by Convention
# Power nets
power_patterns = ["VCC", "VDD", "V3.3", "V5", "+*V", "GND", "VSS"]
for pattern in power_patterns:
board.nets.assign_nets_by_pattern(f"*{pattern}*", "Power")
# High-speed differential
diff_patterns = ["*_P", "*_N", "*+", "*-"]
for pattern in diff_patterns:
board.nets.assign_nets_by_pattern(pattern, "DiffPair")
# Clock signals
board.nets.assign_nets_by_pattern("CLK*", "HighSpeed")
board.nets.assign_nets_by_pattern("*_CLK", "HighSpeed")
print("Net classes assigned")
Example: Find Unrouted Nets
# Get nets with no routing
unrouted = []
for net in board.nets.get_all():
tracks = board.routing.get_tracks_on_net(net.name)
if len(tracks) == 0:
pads = board.nets.get_pads_on_net(net.name)
if len(pads) > 1: # Has connections to make
unrouted.append(net.name)
print(f"Unrouted nets ({len(unrouted)}):")
for name in unrouted:
print(f" {name}")
Net Information Structure
class Net:
name: str # Net name
code: int # Internal net code (deprecated)
class_name: str # Net class name
class NetClass:
name: str # Class name
description: str # Description
track_width_mm: float # Default track width
clearance_mm: float # Default clearance
via_diameter_mm: float # Default via size
via_drill_mm: float # Default via drill
diff_pair_gap_mm: float # Differential pair gap
diff_pair_via_gap_mm: float # DP via gap