mirror of
git://projects.qi-hardware.com/xue.git
synced 2024-11-16 12:35:21 +02:00
98 lines
3.3 KiB
Python
Executable File
98 lines
3.3 KiB
Python
Executable File
#!/usr/bin/python
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
Copyright (C) 2010 Andres Calderon, andres.calderon@emqbit.com
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
|
"""
|
|
|
|
from datetime import datetime
|
|
from math import ceil
|
|
|
|
|
|
class KcLibrary:
|
|
def __init__(self, name):
|
|
self.name = name
|
|
self.parts = []
|
|
|
|
def add_part(self, unit):
|
|
self.parts.append(unit)
|
|
|
|
def write(self):
|
|
of = open(self.name,'w')
|
|
|
|
of.writelines('EESchema-LIBRARY Version 2.3 Date: ' + datetime.now().strftime("%d/%m/%Y-%H:%M:%S") + '\n\n')
|
|
|
|
for p in self.parts:
|
|
p.write(of)
|
|
|
|
class KcComponent:
|
|
def __init__(self, part):
|
|
self.part = part
|
|
self.units = []
|
|
|
|
def add_unit(self, unit):
|
|
self.units.append(unit)
|
|
|
|
def write(self, of):
|
|
of.writelines('DEF ' + self.part + " U 0 40 Y Y " + str(len(self.units)) + " F N\n")
|
|
of.writelines('F0 "U" 0 100 70 H V C C\n')
|
|
of.writelines('F1 "' + self.part + '" 0 -100 70 H V C C\n')
|
|
of.writelines('DRAW\n')
|
|
|
|
for u in self.units:
|
|
u.write(of,self.part)
|
|
|
|
of.writelines('ENDDRAW\n')
|
|
of.writelines('ENDDEF\n')
|
|
|
|
class KcUnit:
|
|
def __init__(self, id_unit):
|
|
self.id_unit = id_unit
|
|
self.top_pins = []
|
|
self.bot_pins = []
|
|
self.left_pins = []
|
|
self.right_pins = []
|
|
|
|
def write(self, of, part):
|
|
ll = max(self.left_pins, key=lambda KcPin: len(KcPin.name))
|
|
lr = max(self.right_pins, key=lambda KcPin: len(KcPin.name))
|
|
sl = (len( ll.name + " " + part + " " + lr.name))/2
|
|
|
|
H = max(len(self.left_pins),len(self.right_pins),10)/2*100
|
|
W = max(len(self.top_pins)*60+len(ll.name)*40+40,len(self.bot_pins)*60+len(lr.name)*40+40,sl/2*100)
|
|
W = int(ceil(W/100.0)*100)
|
|
|
|
of.writelines('S ' + str(-W) + ' ' + str(-H-100) + ' ' + str(W) + ' ' + str(H+100) + ' ' + str(self.id_unit) +' 1 0 f\n')
|
|
|
|
self.write_pin(of,self.left_pins, -W-300, (len(self.right_pins)/2*100),0,-100,'R')
|
|
self.write_pin(of,self.right_pins, W+300,-(len(self.right_pins)/2*100),0, 100,'L')
|
|
|
|
self.write_pin(of,self.top_pins,-(len(self.top_pins)/2*100), H+400,100,0,'D')
|
|
self.write_pin(of,self.bot_pins,-(len(self.bot_pins)/2*100),-H-400,100,0,'U')
|
|
|
|
def write_pin(self, of, pins, x, y, dx, dy, d):
|
|
for signal in pins:
|
|
of.writelines('X ' + signal.name + ' ' + signal.pin + ' ' + str(x) + ' ' + str(y) +' 300 ' + d + ' 60 60 ' + str(self.id_unit) + ' 1 ' + signal.electrical_type + ' ' + signal.pin_type + '\n')
|
|
x = x + dx
|
|
y = y + dy
|
|
|
|
class KcPin:
|
|
def __init__(self, name, pin , electrical_type='P', pin_type=''):
|
|
self.pin = pin
|
|
self.name = name
|
|
self.pin_type = pin_type
|
|
self.electrical_type = electrical_type |