mirror of https://github.com/rene-dev/stmbl.git
76 lines
2.4 KiB
Python
76 lines
2.4 KiB
Python
# python pos2scad.py stmbl_4.0-all-pos.csv stmbl_4.0.emn > pcb.scad
|
|
import csv
|
|
import sys
|
|
from sets import Set
|
|
|
|
pcb = 1.6
|
|
|
|
pos_file = open(sys.argv[1], 'rt')
|
|
idf_file = open(sys.argv[2], 'rt')
|
|
|
|
print "include <lib.scad>"
|
|
print "pcb_height = " + str(pcb) + ";"
|
|
|
|
|
|
try:
|
|
idf = idf_file.readlines()
|
|
state = "start"
|
|
cutout = "-1"
|
|
for line in idf:
|
|
if state == "outline":
|
|
l = line.split(" ")
|
|
if ".END_BOARD_OUTLINE" in l[0]:
|
|
print " ]);"
|
|
print " }"
|
|
print "}"
|
|
state = "end"
|
|
break
|
|
if cutout == "-1":
|
|
print "module pcb(){"
|
|
print " difference(){"
|
|
print " color(\"green\") linear_extrude(height = " + pcb + ", convexity = 10, twist = 0) polygon( points=["
|
|
cutout = "0"
|
|
if l[0] != cutout:
|
|
cutout = l[0]
|
|
print " ]);"
|
|
print " color(\"green\") translate([0, 0, -0.1]) linear_extrude(height = " + pcb + " + 0.2, convexity = 10, twist = 0) polygon( points=["
|
|
if l[0] == cutout:
|
|
#if float(l[3]) != 0.0:
|
|
# for i in range(0, 20):
|
|
print " [" + l[1] + ", " + l[2] + "], "
|
|
|
|
if state == "outline start":
|
|
pcb = line.replace("\n", "")
|
|
print "pcb_height = " + str(pcb) + ";"
|
|
state = "outline"
|
|
|
|
if state == "start":
|
|
if ".BOARD_OUTLINE" in line:
|
|
state = "outline start"
|
|
|
|
reader = list(csv.reader(pos_file))
|
|
reader.pop(0)
|
|
|
|
# packages
|
|
for row in reader:
|
|
row[2] = row[2].replace("-", "_")
|
|
row[2] = row[2].replace(".", "_")
|
|
|
|
packages = Set([])
|
|
for row in reader:
|
|
packages.add(row[2])
|
|
#for p in packages:
|
|
#print "module " + p + "(){}"
|
|
|
|
# place
|
|
print "module place(){"
|
|
for row in reader:
|
|
if row[6] == "top":
|
|
print " translate([" + row[3] + ", " + row[4] + ", " + str(pcb) + "]) rotate([0, 0, " + row[5] + "]) " + row[2] + "(); // " + row[0] + " " + row[1]
|
|
else:
|
|
print " translate([" + row[3] + ", " + row[4] + ", 0]) rotate([180, 0, 0]) rotate([0, 0, 360 - " + row[5] + "]) " + row[2] + "(); // " + row[0] + " " + row[1]
|
|
print "}"
|
|
|
|
finally:
|
|
pos_file.close()
|