132 lines
3.5 KiB
Python
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)
|
|
|