import sys, struct I=[ [1,0,0,0], [0,1,0,0], [0,0,1,0], [0,0,0,1] ] def transpose(matrix): return [[v[i] for v in matrix] for i in xrange(len(matrix[0]))] def multmatrix(vector,matrix): return map(sum, transpose(map(lambda x:[x[0]*p for p in x[1]], zip(vector, transpose(matrix))))) def applymatrix(facet,matrix=I): return [multmatrix(facet[0]+[1],matrix)[:3],map(lambda x:multmatrix(x+[1],matrix)[:3],facet[1])] f=[[0,0,0],[[-3.022642, 0.642482, -9.510565],[-3.022642, 0.642482, -9.510565],[-3.022642, 0.642482, -9.510565]]] m=[ [1,0,0,0], [0,1,0,0], [0,0,1,1], [0,0,0,1] ] def emitstl(filename,facets=[],objname="stltool_export"): if filename is None: return f=open(filename,"w") f.write("solid "+objname+"\n") for i in facets: f.write(" facet normal "+" ".join(map(str,i[0]))+"\n outer loop\n") for j in i[1]: f.write(" vertex "+" ".join(map(str,j))+"\n") f.write(" endloop"+"\n") f.write(" endfacet"+"\n") f.write("endsolid "+objname+"\n") f.close() class stl: def __init__(self, filename=None): self.facet=[[0,0,0],[[0,0,0],[0,0,0],[0,0,0]]] self.facets=[] self.facetsminz=[] self.facetsmaxz=[] self.name="" self.insolid=0 self.infacet=0 self.inloop=0 self.facetloc=0 if filename is None: return self.f=list(open(filename)) if not self.f[0].startswith("solid"): print "Not an ascii stl solid - attempting to parse as binary" f=open(filename,"rb") buf=f.read(84) while(len(buf)<84): newdata=f.read(84-len(buf)) if not len(newdata): break buf+=newdata facetcount=struct.unpack_from("i): working.remove(j[1]) else: break for j in (sorted(s.facetsmaxz)): if(j[0]