initial
This commit is contained in:
131
tooling_plugin.py
Normal file
131
tooling_plugin.py
Normal file
@@ -0,0 +1,131 @@
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user