Friday, 6 January 2012

3d extrusion from 2d silhouette V2

I was trying out my script on a logo for a friend and it failed!

The logo was just text characters in a fancy font but contained the letter n, the script when working out the y size on the box only checked the left and right hand side of the box to see if it was still within the silhouette, thus it turned the n into a solid cube.

I had been planning an updated version already as I knew it wouldn't handle an enclosed hole in the silhouette, this is the same issue.

Here is the new code, still alpha, still has the exponent colour bug.

import Image, random
def findbox (x,y):
xlen = 0;
ylen = 0;
holeflag = 0;

#    print '(x,y) = '+str(x)+' '+ str(y)
#    print 'current (x,y) '+ str(pix[x,y])
#    print 'current (x+1,y) '+ str(pix[x+1,y])
while (pix[x+xlen+1,y] != 0):
xlen = xlen + 1
#        print 'xlen = ['+str(xlen)+']'
#        print 'current (x+xlen+1) '+ str(pix[x+xlen+1,y]);
if x+xlen+2 >= im.size:
break

#    print 'start y current (x,y) '+ str(pix[x,y])
#    print 'current (x+xlen,y+ylen+1) '+ str(pix[x+xlen,y+ylen+1])
while (pix[x+xlen,y+ylen+1] != 0 and pix[x,y+ylen+1] != 0):
ylen = ylen + 1

for t in range(x,x+xlen):
if (pix[t,y+ylen] == 0):
ylen = ylen -1
holeflag = 1;
break

#        print 'ylen = ['+str(ylen)+']'
#        print 'current (y+ylen+1) '+ str(pix[x+xlen,y+ylen+1]);

#        if (y+ylen)%((xlen+1)) == 0 :
#            break
if holeflag == 1:
break
if y+ylen+2 >= im.size:
break

print 'color(['+str(random.random())+','+str(random.random())+','+str(random.random())+']) translate(['+str(x)+','+str(y)+',0]) cube(['+str(xlen+1+0.
0001)+','+str(ylen+1+0.0001)+',2.5],center =false);'
#    print 'translate(['+str(x)+','+str(y)+',0]) cube(['+str(xlen+1+0.0001)+','+str(ylen+1+0.0001)+',10],center =false);'
im.paste((0),(x,y,x+xlen+1,y+ylen+1))
#    im.show()
return

im = Image.open("logo.bmp")
#im.show()
#print pix[0,0]
#print im.size

for y in xrange(im.size-1):
for x in xrange(im.size-1):
#print pix[x,y]
if pix[x,y] != 0:
findbox (x,y)

-----------------end of code-----------------

I wish there was a way to add attachments to this blog...