DRC
The DRCOperations module provides design rule checking to validate PCB layouts.
board = kicad.get_board()
drc = board.drc
Running DRC
run()
Runs DRC and returns violations.
errors, warnings, exclusions = board.drc.run()
print(f"Errors: {len(errors)}")
print(f"Warnings: {len(warnings)}")
print(f"Exclusions: {len(exclusions)}")
for error in errors:
print(f" {error.description} at {error.position}")
run_and_report(path)
Runs DRC and generates a report file.
board.drc.run_and_report("/path/to/drc_report.txt")
DRC Settings
get_settings()
Gets current DRC settings.
settings = board.drc.get_settings()
print(f"Test tracks against zones: {settings.test_tracks_vs_zones}")
print(f"Test footprints: {settings.test_footprints}")
set_settings(**kwargs)
Updates DRC settings.
board.drc.set_settings(
test_tracks_vs_zones=True,
test_footprints=True,
test_courtyard_overlap=True,
refill_zones=True
)
DRC Exclusions
add_exclusion(violation)
Excludes a specific violation from future reports.
# Add exclusion for a known acceptable violation
board.drc.add_exclusion(violation)
remove_exclusion(violation_id)
Removes an exclusion.
board.drc.remove_exclusion(exclusion_id)
get_exclusions()
Gets all current exclusions.
exclusions = board.drc.get_exclusions()
for exc in exclusions:
print(f"Excluded: {exc.description}")
Design Rules
get_design_rules()
Gets board design rules.
rules = board.drc.get_design_rules()
print(f"Min track width: {rules.min_track_width_mm}mm")
print(f"Min via drill: {rules.min_via_drill_mm}mm")
print(f"Min clearance: {rules.min_clearance_mm}mm")
set_design_rules(**kwargs)
Sets design rules.
board.drc.set_design_rules(
min_track_width_mm=0.15,
min_clearance_mm=0.15,
min_via_diameter_mm=0.6,
min_via_drill_mm=0.3,
min_hole_clearance_mm=0.25,
min_silk_clearance_mm=0.15
)
Severity Settings
set_rule_severity(rule_id, severity)
Changes the severity of a specific rule.
# Change a warning to an error
board.drc.set_rule_severity("courtyard_overlap", "error")
# Ignore a rule
board.drc.set_rule_severity("silkscreen_overlap", "ignore")
Severity options: "error", "warning", "ignore"
Example: Full DRC Workflow
from kipy import KiCad
kicad = KiCad()
board = kicad.get_board()
# Configure DRC
board.drc.set_settings(
test_tracks_vs_zones=True,
test_footprints=True,
test_courtyard_overlap=True,
refill_zones=True
)
# Set design rules
board.drc.set_design_rules(
min_track_width_mm=0.15,
min_clearance_mm=0.15,
min_via_diameter_mm=0.6,
min_via_drill_mm=0.3
)
# Run DRC
errors, warnings, exclusions = board.drc.run()
# Report results
if errors:
print("DRC FAILED")
for error in errors:
print(f" ERROR: {error.description}")
print(f" Items: {error.items}")
print(f" Position: {error.position}")
elif warnings:
print("DRC PASSED with warnings")
for warning in warnings:
print(f" WARNING: {warning.description}")
else:
print("DRC PASSED - no issues found")
# Generate report
board.drc.run_and_report("drc_report.txt")
Example: Filter by Violation Type
errors, warnings, _ = board.drc.run()
# Group violations by type
clearance_errors = [e for e in errors if "clearance" in e.description.lower()]
unconnected_errors = [e for e in errors if "unconnected" in e.description.lower()]
courtyard_errors = [e for e in errors if "courtyard" in e.description.lower()]
print(f"Clearance violations: {len(clearance_errors)}")
print(f"Unconnected items: {len(unconnected_errors)}")
print(f"Courtyard overlaps: {len(courtyard_errors)}")
DRC Violation Structure
class DRCViolation:
description: str # Human-readable description
rule_id: str # Rule identifier
severity: str # "error" or "warning"
position: Vector2 # Location on board
items: List[str] # Item IDs involved
excluded: bool # Is this excluded
Common DRC Rules
| Rule | Description |
|---|---|
clearance | Track/pad/via clearance violations |
unconnected | Unrouted connections |
track_width | Track width below minimum |
via_diameter | Via size violations |
via_drill | Via drill size violations |
courtyard_overlap | Footprint courtyard overlaps |
silkscreen_clipped | Silkscreen over pads |
copper_sliver | Very thin copper slivers |
hole_clearance | Hole-to-copper clearance |