git.s-ol.nu hw/0x10.mod / main outline.py
main

Tree @main (Download .tar.gz)

outline.py @mainraw · history · blame

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)