-
-
Save tannewt/0acd1f6af48c43dc7e15243fe0af47ed to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from kicad.units import * | |
from kicad import Point | |
import pcbnew | |
# importlib.reload(stemma_grid); stemma_grid.stemma_grid(pcb, 2, 1); pcbnew.Refresh() | |
RIGHT = (180, 360) | |
LEFT = (0, 180) | |
UP = (90, 270) | |
DOWN = (270, 90) | |
FULL = (0, 360) | |
pattern = { | |
(0, 0): DOWN, | |
(0, 1): RIGHT, | |
(0, 2): LEFT, | |
(1, 0): UP, | |
(1, 1): FULL, | |
(1, 2): DOWN, | |
(2, 0): RIGHT, | |
(2, 1): LEFT, | |
(2, 2): UP, | |
} | |
CORNERS = ( | |
(0, 0, 1, 1, 270, 360), | |
(0, 1, 1, -1, 180, 270), | |
(1, 0, -1, 1, 0, 90), | |
(1, 1, -1, -1, 90, 180) | |
) | |
def _round(values): | |
return [round(v, 2) for v in values] | |
def stemma_grid(pcb, rows: int, cols: int, pos=(1, 1)): | |
"""blah""" | |
height = 0.6 * rows | |
deciheight = 6 * rows | |
width = 0.6 * cols | |
deciwidth = 6 * cols | |
# Corners | |
for xmul, ymul, xshift, yshift, start, end in CORNERS: | |
x = pos[0] + xshift * 0.05 + (xmul * width) | |
y = pos[1] + yshift * 0.05 + (ymul * height) | |
pcb.add_arc(inch_to_mm(_round((x, y))), inch_to_mm(0.1 / 2), start, end, layer="Edge.Cuts") | |
logo = pcbnew.FootprintLoad("/home/tannewt/.local/share/kicad/7.0/footprints/adafruit.pretty", "ADAFRUIT_2.5MM") | |
logo_anchor = inch_to_mm([pos[0] + 0.01, pos[1] + 0.645]) | |
logo.SetPosition(Point.native_from(logo_anchor)) | |
pcb._obj.Add(logo) | |
anchor = inch_to_mm([pos[0] + 0.325, pos[1] + 0.6]) | |
pcb.add_text(anchor, f"{rows}x{cols} v2", layer="F.Silkscreen", size=1.5, thickness=0.3) | |
# Horizontal edges and silk grid | |
for y in range(0, deciheight + 1): | |
if y % 6 != 0: | |
continue | |
for layer in ["Edge.Cuts", "F.Silkscreen", "B.Silkscreen"]: | |
trim = 0.05 | |
trim_left = 0 | |
edge = y == 0 or y == deciheight | |
if edge and layer != "Edge.Cuts": | |
continue | |
if not edge and layer == "Edge.Cuts": | |
continue | |
if y == 6 and layer == "F.Silkscreen": | |
trim_left = 0.5 | |
if cols == 1: | |
continue | |
start = inch_to_mm(_round([pos[0] + trim + trim_left, pos[1] + y / 10])) | |
end = inch_to_mm(_round([pos[0] + width - trim, pos[1] + y / 10])) | |
pcb.add_line(start, end, layer=layer) | |
# Vertical edges and silk grid | |
for x in range(0, int(deciwidth) + 1): | |
if x % 6 != 0: | |
continue | |
trim = 0.05 | |
if x == 0 or x == deciwidth: | |
layers = ["Edge.Cuts"] | |
else: | |
# Do silk and copper to give more of a tactile feel | |
layers = ["F.Silkscreen", "B.Silkscreen", "F.Cu", "B.Cu"] | |
start = inch_to_mm(_round([pos[0] + x / 10, pos[1] + trim])) | |
end = inch_to_mm(_round([pos[0] + x / 10, pos[1] + height - trim])) | |
for layer in layers: | |
pcb.add_line(start, end, layer=layer) | |
# Coordinates | |
for r in range(rows): | |
for c in range(cols): | |
anchor = _round(inch_to_mm([pos[0] + 0.3 + 0.6 * c, pos[1] + 0.3 + 0.6 * r + 0.1])) | |
pcb.add_text(anchor, f"{r},{c}", layer="F.Silkscreen") | |
pcb.add_text(anchor, f"{r},{c}", mirrored=True, layer="B.Silkscreen") | |
for x in range(0, deciwidth): | |
for y in range(0, deciheight): | |
start, end = pattern[((y // 2) % 3, (x // 2) % 3)] | |
shift = (0.1, 0.1) | |
if x % 2 != 0 or y % 2 != 0: | |
direction = pattern[((y // 2) % 3, (x // 2) % 3)] | |
if direction == RIGHT and y % 2 == 0: | |
start = _round(inch_to_mm([pos[0] + shift[0] + x / 10 - 0.1, pos[1] + shift[1] + y / 10 - 0.05])) | |
end = _round(inch_to_mm([pos[0] + shift[0] + x / 10 + 0.1, pos[1] + shift[1] + y / 10 - 0.05])) | |
pcb.add_line(start, end, layer="Edge.Cuts") | |
start = _round(inch_to_mm([pos[0] + shift[0] + x / 10 - 0.1, pos[1] + shift[1] + y / 10 + 0.05])) | |
end = _round(inch_to_mm([pos[0] + shift[0] + x / 10 + 0.1, pos[1] + shift[1] + y / 10 + 0.05])) | |
pcb.add_line(start, end, layer="Edge.Cuts") | |
continue | |
elif direction == DOWN and x % 2 == 0: | |
start = _round(inch_to_mm([pos[0] + shift[0] + x / 10 - 0.05, pos[1] + shift[1] + y / 10 - 0.1])) | |
end = _round(inch_to_mm([pos[0] + shift[0] + x / 10 - 0.05, pos[1] + shift[1] + y / 10 + 0.1])) | |
pcb.add_line(start, end, layer="Edge.Cuts") | |
start = _round(inch_to_mm([pos[0] + shift[0] + x / 10 + 0.05, pos[1] + shift[1] + y / 10 - 0.1])) | |
end = _round(inch_to_mm([pos[0] + shift[0] + x / 10 + 0.05, pos[1] + shift[1] + y / 10 + 0.1])) | |
pcb.add_line(start, end, layer="Edge.Cuts") | |
continue | |
else: | |
continue | |
# pcb.add_circle(round(inch_to_mm([pos[0] + x / 10, pos[1] + y / 10]), 0.04, layer="User.Eco1") | |
continue | |
center = _round(inch_to_mm([pos[0] + shift[0] + x / 10, pos[1] + shift[1] + y / 10])) | |
pcb.add_arc(center, inch_to_mm(0.1 / 2), start, end, layer="Edge.Cuts") |
What os are you using? https://www.kicad.org/download/
…On Sat, Jul 22, 2023, at 7:56 AM, vkuehn wrote:
***@***.**** commented on this gist.
@tannewt <https://github.com/tannewt> that looks very interesting. I am new to KiCad. I only found how to run plugins.Pip does not install kicad or pcbnew. Can you kindldy give some hint how to run that ?
—
Reply to this email directly, view it on GitHub <https://gist.github.com/tannewt/0acd1f6af48c43dc7e15243fe0af47ed#gistcomment-4637452> or unsubscribe <https://github.com/notifications/unsubscribe-auth/AAAM3KM5ADHCAZ6ZNQHFXY3XRPSZBBFKMF2HI4TJMJ2XIZLTSKBKK5TBNR2WLJDHNFZXJJDOMFWWLK3UNBZGKYLEL52HS4DFQKSXMYLMOVS2I5DSOVS2I3TBNVS3W5DIOJSWCZC7OBQXE5DJMNUXAYLOORPWCY3UNF3GS5DZVRZXKYTKMVRXIX3UPFYGLK2HNFZXIQ3PNVWWK3TUUZ2G64DJMNZZDAVEOR4XAZNEM5UXG5FFOZQWY5LFVEYTEMRYGU4DSMJQU52HE2LHM5SXFJTDOJSWC5DF>.
You are receiving this email because you were mentioned.
Triage notifications on the go with GitHub Mobile for iOS <https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675> or Android <https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub>.
Ubutu Linux 22.04, I did install KiCad and the Editor starts fine (version 7.0)
When launching the Kicad command prompt and trying pip install kicad, I get the following error:
ERROR: Could not find a version that satisfies the requirement kicad (from versions: none)
ERROR: No matching distribution found for kicad
Any suggestions on how to remedy that?
@adi-b-kea Follow the installation instructions here: https://github.com/atait/kicad-python/
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@tannewt that looks very interesting. I am new to KiCad. I only found how to run plugins.Pip does not install kicad or pcbnew. Can you kindldy give some hint how to run that ?