From 094c6a1a92d1fe1d4fac827ab106ff93c84d52cf Mon Sep 17 00:00:00 2001 From: Kliment Yanev Date: Thu, 22 Sep 2011 12:10:27 +0200 Subject: [PATCH] Move normal calculation into stltool Fix inverted Y coordinates in normals --- stltool.py | 28 +++++++++++++++++++++------- zscaper.py | 24 +++++++----------------- 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/stltool.py b/stltool.py index 34959b8..10168cb 100644 --- a/stltool.py +++ b/stltool.py @@ -1,4 +1,15 @@ -import sys, struct +import sys, struct, math + +def cross(v1,v2): + return [v1[1]*v2[2]-v1[2]*v2[1],v1[2]*v2[0]-v1[0]*v2[2],v1[0]*v2[1]-v1[1]*v2[0]] + +def genfacet(v): + veca=[v[1][0]-v[0][0],v[1][1]-v[0][1],v[1][2]-v[0][2]] + vecb=[v[2][0]-v[1][0],v[2][1]-v[1][1],v[2][2]-v[1][2]] + vecx=cross(veca,vecb) + vlen=math.sqrt(sum(map(lambda x:x*x,vecx))) + normal=map(lambda x:x/vlen, vecx) + return [normal,v] I=[ [1,0,0,0], @@ -8,13 +19,16 @@ I=[ ] def transpose(matrix): - return [[v[i] for v in matrix] for i in xrange(len(matrix[0]))] + return zip(*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])] + #return facet + #return [map(lambda x:-1.0*x,multmatrix(facet[0]+[1],matrix)[:3]),map(lambda x:multmatrix(x+[1],matrix)[:3],facet[1])] + return genfacet(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=[ @@ -182,9 +196,9 @@ class stl: self.facet[1][self.facetloc]=map(float,l.split()[1:]) self.facetloc+=1 return 1 -if __name__=="__main__" and 0: - s=stl("sphere.stl") - for i in xrange(-10,11): +if __name__=="__main__": + s=stl("../../Downloads/frame-vertex-neo-foot-x4.stl") + for i in xrange(11,11): working=s.facets[:] for j in reversed(sorted(s.facetsminz)): if(j[0]>i): @@ -198,5 +212,5 @@ if __name__=="__main__" and 0: break print i,len(working) - emitstl("sphereout.stl",s.facets,"emitted_object") + emitstl("../../Downloads/frame-vertex-neo-foot-x4-a.stl",s.facets,"emitted_object") #stl("../prusamendel/stl/mendelplate.stl") diff --git a/zscaper.py b/zscaper.py index 4719868..6d4a96a 100644 --- a/zscaper.py +++ b/zscaper.py @@ -1,19 +1,9 @@ -import stltool,wx,math +import wx,math +from stltool import * a=wx.App() -def cross(v1,v2): - return [v1[1]*v2[2]-v1[2]*v2[1],v1[0]*v2[2]-v1[2]*v2[0],v1[0]*v2[1]-v1[1]*v2[0]] - -def genfacet(v): - veca=[v[1][0]-v[0][0],v[1][1]-v[0][1],v[1][2]-v[0][2]] - vecb=[v[2][0]-v[0][0],v[2][1]-v[0][1],v[2][2]-v[0][2]] - vecx=cross(veca,vecb) - vlen=math.sqrt(sum(map(lambda x:x*x,vecx))) - normal=map(lambda x:x/vlen, vecx) - return [normal,v] - def genscape(data=[[0,1,0,0],[1,0,2,0],[1,0,0,0],[0,1,0,1]],pscale=1.0,bheight=1.0,zscale=1.0): - o=stltool.stl(None) + o=stl(None) datal=len(data) datah=len(data[0]) #create bottom: @@ -55,8 +45,8 @@ def zimage(name,out): data=[] for i in xrange(s[0]): data+=[b[i*s[1]:(i+1)*s[1]]] - data=[i[::5] for i in data[::5]] - stltool.emitstl(out,genscape(data,zscale=0.1).facets,name) + #data=[i[::5] for i in data[::5]] + emitstl(out,genscape(data,zscale=0.1).facets,name) """ class scapewin(wx.Frame): @@ -69,12 +59,12 @@ class scapewin(wx.Frame): """ if __name__ == '__main__': -""" + """ app = wx.App(False) main = scapewin() main.Show() app.MainLoop() """ - zimage("testimg.png","testobj.stl") + zimage("catposthtmap2.jpg","testobj.stl") del a