def draw(filename, data, fontname='Times-Roman', images=[],
         fontsize= DEFAULT_FONT_SIZE,
         reverse=False,
         case=string.upper,
         seven_seg=False,
         ):
    PCB_W = (11.3) * inch
    
    PCB_H = (14 + 7./8) *inch
    H = 16 * inch
    W = 11.75 * inch
    W = 11.324 * inch
    H = 16 * inch
    W = 16 * inch
    PAGE_MARGIN = 1*inch
    can = canvas.Canvas(filename,
                        pagesize=(W + 2 * PAGE_MARGIN, H + 2 * PAGE_MARGIN))
    can.translate(1.5 * inch + dx, 1 * inch) ## PCB Lower left is origen
    data = [[case(char) for char in line] for line in data]
    YS = arange(N_ROW) * DY + (3 + 7/16.) * inch + dy / 4
    XS = arange(N_COL) * DX
    ys = arange(n_row) * dy + (3 + 7/16.) * inch
    xs = arange(n_col) * dx +  dx/2

    for x in xs[:-1]:
        for y in ys[:1]:
            # can.circle(x, y, 2.5 * mm, fill=False)
            pass
    for x in xs:
        for y in ys:
            # can.circle(x, y, 2.5 * mm, fill=False)
            pass
        
			    
    led_xs = XS + DX / 2.
    led_ys = YS + DY / 2.

    can.setTitle("Peggy2 Faceplate: %s" % fontname)
    can.setFont(fontname, 15)
    can.drawCentredString(4.5 * inch, -.75* inch, 'Peggy2 Faceplate, %s, 0.25" Painted/Etched Acrylic' % fontname)

    # can.setFont(fontname, 80)
    #  can.drawCentredString(PCB_W/2, 1.5 * inch, 'Peggy2.0')

    can.setFont(fontname, fontsize)

    # label font
    can.drawString(1.25*inch, H + .25 * inch , fontname)

    if reverse:
        can.translate(9 * inch, 0 * inch)
        can.scale(-1, 1)

    ldr_x = 48.8 * mm + 1 * inch
    ldr_y = 9*inch - 6.38*mm
    ldr_r = 2.5*mm
    # can.circle(ldr_x, ldr_y, ldr_r, fill=True) # ldr

    can.setLineWidth(1)
    margin = 10*mm
    letter_bbox = (XS[0], YS[0], XS[-1] - XS[0] + DX, YS[-1] - YS[0] + DY)
    bbox = (0, 0, W, H)
    faceplate = MyPath()
    # faceplate.rect(bbox)
    

    backplate = MyPath()
    backplate.rect(bbox)
    keyhole = Keyhole()
    backplate.route(keyhole)
    keyhole.translate((9 - .75 - .75) * inch, 0 * inch)
    backplate.route(keyhole)
        
    pcb_bbox = (0, 0, PCB_W, PCB_H)
    pcb = MyPath()
    pcb.rect(pcb_bbox)

    W = DX * 12 + 2 * inch
    H = DY * 12 + 5 * inch
    # can.circle(XS[-1] + 1 * DX + 1 * inch, YS[0], DX * 1.3)
    # can.circle(XS[0] - 1 * inch, YS[0], DX * 1.3)
    # can.circle(W / 2, H, 1 * inch)
    # can.circle(W / 2, H -.5 * inch, 1 * inch)
    # can.circle(W / 2, -.5 * inch, 4 * inch)
    bbox = (XS[0] - 1 * inch, 0 * inch, W, H)
    edge = MyPath()
    edge.rect(bbox)
    edge.drawOn(can, 1)

################################################################################
    encName = 'winansi'
    decoder = codecs.lookup(encName)[1]
    def decodeFunc(txt):
        if txt is None:
            return ' '
        else:
            return case(decoder(txt, errors='replace')[0])
    data = [[decodeFunc(case(char)) for char in line] for line in data]
################################################################################

    for y, l in zip(YS + DY * .27, data[::-1]):
        for x, c in zip(XS + DX / 2., l):
            can.drawCentredString(x, y, c)

    can.drawCentredString(XS[-2] + DX/2, YS[1] + DY/4,
                        decodeFunc(chr(186) + 'C'))
    can.drawCentredString(XS[-1] + DX/2, YS[1] + DY/4,
                        decodeFunc(chr(186) + 'F'))
    can.drawCentredString(XS[6] + DX * .6, YS[4] + DY * .3, "o'")

    for x in xs[:-1]:
        can.drawCentredString(x, ys[0] - .41* inch,
                              decodeFunc(chr(186)))
        
    mount_r = 1.8 * mm
    magnet_r = 6 * mm
    pcb_mounts = array([[        1. * inch / 4,         1. * inch / 4],
                        [PCB_W - 1. * inch / 4,         1. * inch / 4],
                        [PCB_W - 1. * inch / 4, PCB_H - 1. * inch / 4],
                        [        1. * inch / 4, PCB_H - 1. * inch / 4]
                        ]) 

    fp_mounts = array([[     -  1. * inch / 2,         1. * inch / 4],
                       [PCB_W - 1. * inch / 4,         1. * inch / 4],
                       [PCB_W - 1. * inch / 4, H - 1. * inch / 2],
                       [        1. * inch / 4, H - 1. * inch / 2]
                       ]) 

    for x, y in fp_mounts:
        pcb.drill(x, y, mount_r)
        pcb.drill(x, y, magnet_r)
        backplate.drill(x, y, mount_r)

    for x, y in pcb_mounts:
        pcb.drill(x, y, mount_r)
        backplate.drill(x, y, mount_r)
    pcb.drawOn(can, 1)

    faceplate.drawOn(can)
    can.showPage()
    can.save()
    print 'wrote', filename
Esempio n. 2
0
        can.drawCentredString(x, ys[0] - .41 * inch, decodeFunc(chr(186)))

    mount_r = 1.8 * mm
    magnet_r = 6 * mm
    pcb_mounts = array([[1. * inch / 4, 1. * inch / 4],
                        [PCB_W - 1. * inch / 4, 1. * inch / 4],
                        [PCB_W - 1. * inch / 4, PCB_H - 1. * inch / 4],
                        [1. * inch / 4, PCB_H - 1. * inch / 4]])

    fp_mounts = array([[-1. * inch / 2, 1. * inch / 4],
                       [PCB_W - 1. * inch / 4, 1. * inch / 4],
                       [PCB_W - 1. * inch / 4, H - 1. * inch / 2],
                       [1. * inch / 4, H - 1. * inch / 2]])

    for x, y in fp_mounts:
        pcb.drill(x, y, mount_r)
        pcb.drill(x, y, magnet_r)
        backplate.drill(x, y, mount_r)

    for x, y in pcb_mounts:
        pcb.drill(x, y, mount_r)
        backplate.drill(x, y, mount_r)
    pcb.drawOn(can, 1)

    faceplate.drawOn(can)
    can.showPage()
    can.save()
    print 'wrote', filename


def findfilecb(target_dest, directory, names):