Files
Flow_Controller/scripts/tooling_plugin.py
2026-05-23 21:13:38 +02:00

132 lines
3.5 KiB
Python

from kikit.plugin import ToolingPlugin
import pcbnew
class CustomTooling(ToolingPlugin):
def buildTooling(self, panel):
board = panel.board
# panelBBox() -> (xmin, ymin, xmax, ymax)
xmin, ymin, xmax, ymax = panel.panelBBox()
min_x = pcbnew.ToMM(xmin)
min_y = pcbnew.ToMM(ymin)
max_x = pcbnew.ToMM(xmax)
max_y = pcbnew.ToMM(ymax)
margin_x_mm = 10
margin_y_mm = 2.5
center_x = (min_x + max_x) / 2
center_y = (min_y + max_y) / 2
holes = [
(min_x + margin_x_mm, min_y + margin_y_mm), # top left
(center_x, min_y + margin_y_mm), # top center
(max_x - margin_x_mm, min_y + margin_y_mm), # top right
(min_x + margin_x_mm, max_y - margin_y_mm), # bottom left
(center_x, max_y - margin_y_mm), # bottom center
(max_x - margin_x_mm, max_y - margin_y_mm), # bottom right
]
hole_d = pcbnew.FromMM(3.172)
for x_mm, y_mm in holes:
fp = pcbnew.FOOTPRINT(board)
fp.SetReference("")
pos = pcbnew.VECTOR2I(
pcbnew.FromMM(x_mm),
pcbnew.FromMM(y_mm)
)
fp.SetPosition(pos)
pad = pcbnew.PAD(fp)
pad.SetShape(pcbnew.PAD_SHAPE_CIRCLE)
pad.SetAttribute(pcbnew.PAD_ATTRIB_NPTH)
pad.SetSize(pcbnew.VECTOR2I(hole_d, hole_d))
pad.SetDrillSize(pcbnew.VECTOR2I(hole_d, hole_d))
pad.SetPosition(pos)
fp.Add(pad)
board.Add(fp)
# =========================
# SCREEN RECTANGLE
# =========================
screen_w = 153.4
screen_h = 87.0
# Panel center
center_x = (min_x + max_x) / 2
center_y = (min_y + max_y) / 2
# Screen rectangle corners
screen_x0 = center_x - (screen_w / 2)
screen_y0 = center_y - (screen_h / 2)
screen_x1 = center_x + (screen_w / 2)
screen_y1 = center_y + (screen_h / 2)
screen = pcbnew.PCB_SHAPE(board)
screen.SetShape(pcbnew.SHAPE_T_RECT)
screen.SetLayer(pcbnew.Dwgs_User)
screen.SetStart(
pcbnew.VECTOR2I(
pcbnew.FromMM(screen_x0),
pcbnew.FromMM(screen_y0)
)
)
screen.SetEnd(
pcbnew.VECTOR2I(
pcbnew.FromMM(screen_x1),
pcbnew.FromMM(screen_y1)
)
)
screen.SetWidth(pcbnew.FromMM(0.2))
board.Add(screen)
# =========================
# FIXTURE RECTANGLE
# =========================
fixture_w = 200.0
fixture_h = 130.0
# Fixture rectangle corners
fixture_x0 = center_x - (fixture_w / 2)
fixture_y0 = center_y - (fixture_h / 2)
fixture_x1 = center_x + (fixture_w / 2)
fixture_y1 = center_y + (fixture_h / 2)
fixture = pcbnew.PCB_SHAPE(board)
fixture.SetShape(pcbnew.SHAPE_T_RECT)
fixture.SetLayer(pcbnew.Dwgs_User)
fixture.SetStart(
pcbnew.VECTOR2I(
pcbnew.FromMM(fixture_x0),
pcbnew.FromMM(fixture_y0)
)
)
fixture.SetEnd(
pcbnew.VECTOR2I(
pcbnew.FromMM(fixture_x1),
pcbnew.FromMM(fixture_y1)
)
)
fixture.SetWidth(pcbnew.FromMM(0.2))
board.Add(fixture)