diff options
author | Willian Padovani Germano <wpgermano@gmail.com> | 2004-01-30 07:27:28 +0300 |
---|---|---|
committer | Willian Padovani Germano <wpgermano@gmail.com> | 2004-01-30 07:27:28 +0300 |
commit | 8fbed941bc45c9bc746c9dc635474b7073ca2300 (patch) | |
tree | 8087b2ba838dc6dc2158e9951c50ff52ffba29fc /release/scripts/uv_export.py | |
parent | 3a8ae6fa671a7f1981412bd24318eae51fb191f2 (diff) |
- Last minute script addition (blame / thank Theeth :) -- Theeth's UV Face export script.
- tiny harmless change in module Blender.Material's *doc*.
Aphex: tested your fix for windows (thank you -- and Bill Baxter for reporting):
It doesn't break anything here (linux). So probably no need for #ifdef's.
Diffstat (limited to 'release/scripts/uv_export.py')
-rw-r--r-- | release/scripts/uv_export.py | 240 |
1 files changed, 240 insertions, 0 deletions
diff --git a/release/scripts/uv_export.py b/release/scripts/uv_export.py new file mode 100644 index 00000000000..48d1be41d5e --- /dev/null +++ b/release/scripts/uv_export.py @@ -0,0 +1,240 @@ +#!BPY + +""" +Name: 'UV Face Layout' +Blender: 232 +Group: 'Export' +Tooltip: 'Export the UV Faces layout of the selected object to tga.' +""" + + +# Martin Poirier 2003 # +# theeth@yahoo.com # +# # +# Change the # +# default_file line # +# to point it where # +# you want # +# # +# thanks to jms # +# for the tga funcs # +# # +# -------------------------- +# Version 1.1 +# Clear a bug that crashed the script when UV coords overlapped in the same faces +# -------------------------- +# Version 1.2 +# Now with option to use the object's name as filename +# -------------------------- +# Version 1.3 Updates by Zaz from Elysiun.com +# Default path is now the directory of the last saved .blend +# New options: Work on selected face only & Scale image when face wraps +# -------------------------- + +import Blender +from math import * + +default_file = Blender.sys.dirname(Blender.Get ("filename")) + Blender.sys.sep + +bSize = Blender.Draw.Create(500) +bWSize = Blender.Draw.Create(1) +bFile = Blender.Draw.Create(default_file) +bObFile = Blender.Draw.Create(1) +bWrap = Blender.Draw.Create(1) +bAllFaces = Blender.Draw.Create(1) + +def draw(): + global bSize, bWSize, bFile, bObFile, bWrap, bAllFaces + # clearing screen + Blender.BGL.glClearColor(0.5, 0.5, 0.5, 1) + Blender.BGL.glColor3f(1.,1.,1.) + Blender.BGL.glClear(Blender.BGL.GL_COLOR_BUFFER_BIT) + + #Title + Blender.BGL.glColor3f(1, 1, 1) + Blender.BGL.glRasterPos2d(8, 183) + Blender.Draw.Text("Blender UF Faces Export") + Blender.BGL.glRasterPos2d(8, 163) + Blender.Draw.Text("""(C) Feb. 2003 Martin Poirier (aka "theeth")""") + + # Instructions + Blender.BGL.glRasterPos2d(8, 83) + Blender.Draw.Text("1 - Select the mesh you want to export") + Blender.BGL.glRasterPos2d(8, 63) + Blender.Draw.Text("2 - Define the Size and WireSize parameters") + Blender.BGL.glRasterPos2d(8, 43) + Blender.Draw.Text("3 - Push the EXPORT button!!!") + + # Buttons + Blender.Draw.Button("EXPORT", 3, 10, 10, 100, 25) + Blender.Draw.Button("Exit", 1, 200, 177, 40, 18) + bSize = Blender.Draw.Number("Size", 4, 10, 130, 90, 18, bSize.val, 100, 10000, "Size of the exported image") + bWSize = Blender.Draw.Number("Wire Size", 4, 120, 130, 90, 18, bWSize.val, 1, 5, "Size of the wire of the faces") + bWrap = Blender.Draw.Toggle("Wrap", 5, 220, 130, 50, 20, bWrap.val, "Wrap to image size, scale otherwise") + bAllFaces = Blender.Draw.Toggle("AllFaces", 6, 280, 130, 60, 20, bAllFaces.val, "Export All or only selected faces") + + bFile = Blender.Draw.String("Path: ", 4, 10, 100, 200, 20, bFile.val, 100, "Filename path") + bObFile = Blender.Draw.Toggle("Ob", 4, 212, 100, 30, 20, bObFile.val, "Use object name in filename") + +def event(evt, val): + if evt == Blender.Draw.ESCKEY and not val: Blender.Draw.Exit() + +def bevent(evt): + bSize, bWSize, bFile, bObFile + if evt == 1: Blender.Draw.Exit() + if evt == 3: + if bObFile.val: + UV_Export(bSize.val, bWSize.val, bFile.val + Blender.Object.GetSelected()[0].name + ".tga") + else: + UV_Export(bSize.val, bWSize.val, bFile.val) + +def Buffer(height=16, width=16, profondeur=3,rvb=255 ): + """ + reserve l'espace memoire necessaire + """ + p=[rvb] + b=p*height*width*profondeur + return b + +def write_tgafile(loc2,bitmap,width,height,profondeur): + f=open(loc2,'wb') + + Origine_en_haut_a_gauche=32 + Origine_en_bas_a_gauche=0 + + Data_Type_2=2 + RVB=profondeur*8 + RVBA=32 + entete0=[] + for t in range(18): + entete0.append(chr(0)) + + entete0[2]=chr(Data_Type_2) + entete0[13]=chr(width/256) + entete0[12]=chr(width % 256) + entete0[15]=chr(height/256) + entete0[14]=chr(height % 256) + entete0[16]=chr(RVB) + entete0[17]=chr(Origine_en_bas_a_gauche) + + #Origine_en_haut_a_gauche + + for t in entete0: + f.write(t) + + for t in bitmap: + f.write(chr(t)) + f.close() + +def UV_Export(size, wsize, file): + obj = Blender.Object.GetSelected() + if not obj: + Blender.Draw.PupMenu("ERROR%t|No Active Object!") + return + obj = obj[0]; + if obj.getType() != "Mesh": + Blender.Draw.PupMenu("ERROR%t|Not a Mesh!") + return + mesh = obj.getData() + if not mesh.hasFaceUV(): + Blender.Draw.PupMenu("ERROR%t|No UV coordinates!") + return + + + vList = [] + faces = [] + + minx = 0 + miny = 0 + scale = 1.0 + + step = 0 + + if bAllFaces.val: + faces = mesh.faces + + else: + faces = mesh.getSelectedFaces () + + for f in faces: + vList.append(f.uv) + + img = Buffer(size+1,size+1) + + if bWrap.val: + wrapSize = size + else: + wrapSize = size + maxx = -100000 + maxy = -100000 + for f in vList: + for v in f: + x = int(v[0] * size) + maxx = max (x, maxx) + minx = min (x, minx) + + y = int(v[1] * size) + maxy = max (y, maxy) + miny = min (y, miny) + wrapSize = max (maxx - minx + 1, maxy - miny + 1) + scale = float (size) / float (wrapSize) + + fnum = 0 + fcnt = len (vList) + + for f in vList: + fnum = fnum + 1 + if not fnum % 100: + print "Face " + str (fnum) + " of " + str (fcnt) + + for index in range(len(f)): + co1 = f[index] + if index < len(f) - 1: + co2 = f[index + 1] + else: + co2 = f[0] + step = int(size*sqrt((co1[0]-co2[0])**2+(co1[1]-co2[1])**2)) + if step: + for t in range(step + 1): + x = int((co1[0] + t*(co2[0]-co1[0])/step) * size) + y = int((co1[1] + t*(co2[1]-co1[1])/step) * size) + + if bWrap.val: + x = x % wrapSize + y = y % wrapSize + else: + x = int ((x - minx) * scale) + y = int ((y - miny) * scale) + + co = x * 3 + y * 3 * size + img[co] = 0 + img[co+1] = 0 + img[co+2] = 255 + if wsize > 1: + for x in range(-1*wsize + 1,wsize): + for y in range(-1*wsize,wsize): + img[co + 3 * x + y * 3 * size] = 0 + img[co + 3 * x + y * 3 * size +1] = 0 + img[co + 3 * x + y * 3 * size +2] = 255 + + for v in f: + x = int(v[0] * size) + y = int(v[1] * size) + + if bWrap.val: + x = x % wrapSize + y = y % wrapSize + else: + x = int ((x - minx) * scale) + y = int ((y - miny) * scale) + + co = x * 3 + y * 3 * size + img[co] = 0 + img[co+1] = 0 + img[co+2] = 0 + + + + write_tgafile(file,img,size,size,3) + +Blender.Draw.Register(draw,event,bevent) |