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('