#!/usr/bin/python
import math

#Parameter zum einstellen:

#Pad-Masse
pad_length = '1.2mm'
pad_width = '0.3mm'

#Pads pro Seite
pads_per_side = 44

#Abstand der gegenueberliegenden Pad-Reihen (Mitte der Pads)
pad_row_distance = 26.7 - 1.2

#Abstand zwischen den mitten der aeusseren Pads einer Seite
pads_side_length = 21.8 - 0.3

#Siehe Eagle-Doku zu 'SMD'
pad_roundness = '0'

# 4 fuer TQFP etc, 2 fuer SO
sides = 4 # oder 2


#finger weg_
_pad_counter = 1

def smd(pos, orientation, name):
    return "SMD %s %s -%s R%f '%s' (%fmm %fmm)" % (pad_length, pad_width, pad_roundness, orientation, name, pos[0], pos[1])

def rad2deg(a):
    return 180.0 * a / math.pi

def pad_name(i):
    return '%d' % i

def pad_line(start, end, num):
    global _pad_counter
    res = list()
    x_delta = end[0] - start[0]
    y_delta = end[1] - start[1]
    angle = rad2deg(math.atan2(y_delta, x_delta)) + 90.0
    for i in range(num):
        x = start[0] + (end[0] - start[0]) * float(i) / float(num -1 )
        y = start[1] + (end[1] - start[1]) * float(i) / float(num -1 )
        res.append(smd((x,y), angle, pad_name(_pad_counter)))
        _pad_counter += 1
    return res

def create_footprint():
    res = []
    if sides == 4:
        left = ((-pad_row_distance / 2.0, pads_side_length / 2.0), (-pad_row_distance / 2.0, -pads_side_length / 2.0))
        bot =  ((-pads_side_length / 2.0, -pad_row_distance / 2.0), (+pads_side_length / 2.0, -pad_row_distance / 2.0))
        right =((pad_row_distance / 2.0, -pads_side_length / 2.0), (pad_row_distance / 2.0, pads_side_length / 2.0))
        top =  ((pads_side_length / 2.0, pad_row_distance / 2.0), (-pads_side_length / 2.0, pad_row_distance / 2.0))
        res.extend(pad_line(left[0], left[1], pads_per_side))
        res.extend(pad_line(bot[0], bot[1], pads_per_side))
        res.extend(pad_line(right[0], right[1], pads_per_side))
        res.extend(pad_line(top[0], top[1], pads_per_side))
    elif sides == 2:
        left = ((-pad_row_distance / 2.0, pads_side_length / 2.0), (-pad_row_distance / 2.0, -pads_side_length / 2.0))
        right =((pad_row_distance / 2.0, -pads_side_length / 2.0), (pad_row_distance / 2.0, pads_side_length / 2.0))
        res.extend(pad_line(left[0], left[1], pads_per_side))
        res.extend(pad_line(right[0], right[1], pads_per_side))
    return '\n'.join(res)


if __name__ == '__main__':
    print create_footprint()
