import sys
import cadquery as cq
import math as m
spacing = 21.5
size = spacing * 1.5 / m.sqrt(3)
radius = size * 4/3
def shape2points(shape):
lines = shape.strip('\n').split('\n')
for y, line in enumerate(lines):
for x, char in enumerate(line):
if char != ' ':
yield x, y
def gridify(gen):
for x, y in gen:
yield (y * size, x * spacing / 2)
def make_outline():
results = []
key_pos = list(gridify(shape2points('''
X X X X
X X X X
X X X X
X X X X
''')))
plate = (
cq.Workplane("XY")
.pushPoints(key_pos)
.polygon(6, radius)
.extrude(1)
.rotate((0,0,0), (0,0,1), -90)
.translate((3*spacing, -4*size, 0))
)
top = plate.faces('<Z').val().outerWire()
pcb = (cq.Workplane("XY")
.newObject([top])
.toPending()
.offset2D(-0.2, kind='intersection')
.extrude(1)
# fillets
.edges('|Z')
.fillet(4)
)
return pcb.section()
try:
show_object
except NameError:
show_object = None
if __name__ == "__main__" or show_object:
filename = 'outline.dxf'
obj = make_outline()
if show_object:
show_object(obj, name=filename)
else:
print('generating "{}"...'.format(filename))
cq.exporters.export(obj, filename)