diff options
author | Campbell Barton <ideasman42@gmail.com> | 2006-07-03 08:12:53 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2006-07-03 08:12:53 +0400 |
commit | acef774a610802bed2874b326ef601776bf0093e (patch) | |
tree | 7b2e2a3803435a80f96318da293472e9e5b91745 /release | |
parent | 8a10a773453bef0ce5c4e2eee40b09ef8f5aacb6 (diff) |
Modernized radiosity i/o - better errors, optimized with LC's modifiers and matricies applied.
Diffstat (limited to 'release')
-rw-r--r-- | release/scripts/radiosity_export.py | 108 | ||||
-rw-r--r-- | release/scripts/radiosity_import.py | 104 |
2 files changed, 128 insertions, 84 deletions
diff --git a/release/scripts/radiosity_export.py b/release/scripts/radiosity_export.py index 43ec7d9838c..461d9f8cfa8 100644 --- a/release/scripts/radiosity_export.py +++ b/release/scripts/radiosity_export.py @@ -69,33 +69,48 @@ specular highlights to the vertex colors. import Blender, meshtools #import time +import BPyMesh try: import struct + NULL_COLOR= struct.pack('<BBBB', 255,255,255,255) except: - msg = "Error: you need a full Python install to run this script." - meshtools.print_boxed(msg) - Blender.Draw.PupMenu("ERROR%t|"+msg) + struct= None + + # ================================ # ====== Write Radio Format ====== # ================================ def write(filename): - #start = time.clock() + if not filename.lower().endswith('.radio'): + filename += '.radio' + + scn= Blender.Scene.GetCurrent() + object= scn.getActiveObject() + if not object: + Blender.Draw.PupMenu('Error%t|Select 1 active object') + return + objname= object.name + + file = open(filename, 'wb') + mesh = BPyMesh.getMeshFromObject(object, None, True, False, scn) + if not mesh: + Blender.Draw.PupMenu('Error%t|Could not get mesh data from active object') + return + + mesh.transform(object.matrixWorld) + + + + start = Blender.sys.time() file = open(filename, "wb") - objects = Blender.Object.GetSelected() - objname = objects[0].name - meshname = objects[0].data.name - mesh = Blender.NMesh.GetRaw(meshname) - obj = Blender.Object.Get(objname) - - if not meshtools.has_vertex_colors(mesh): - message = "Please assign vertex colors before exporting. \n" - message += objname + " object was not saved." - meshtools.print_boxed(message) - Blender.Draw.PupMenu("ERROR%t|"+message) - return + if not mesh.faceUV: + mesh.faceUV= 1 + #message = 'Please assign vertex colors before exporting "%s"|object was not saved' % object.name + #Blender.Draw.PupMenu("ERROR%t|"+message) + #return # === Object Name === file.write(struct.pack("<h", len(objname))) @@ -103,38 +118,45 @@ def write(filename): # === Vertex List === file.write(struct.pack("<l", len(mesh.verts))) - for i in range(len(mesh.verts)): - if not i%100 and meshtools.show_progress: - Blender.Window.DrawProgressBar(float(i)/len(mesh.verts), "Writing Verts") - - x, y, z = mesh.verts[i].co + for v in mesh.verts: + #if not i%100 and meshtools.show_progress: + # Blender.Window.DrawProgressBar(float(i)/len(mesh.verts), "Writing Verts") + x, y, z = tuple(v.co) file.write(struct.pack("<fff", x, y, z)) # === Face List === - file.write(struct.pack("<l", len(mesh.faces))) - for i in range(len(mesh.faces)): - if not i%100 and meshtools.show_progress: - Blender.Window.DrawProgressBar(float(i)/len(mesh.faces), "Writing Faces") - - file.write(struct.pack("<b", len(mesh.faces[i].v))) - for j in range(len(mesh.faces[i].v)): - file.write(struct.pack("<h", mesh.faces[i].v[j].index)) - - for j in range(4): # .col always has a length of 4 - file.write(struct.pack("<BBBB", mesh.faces[i].col[j].r, - mesh.faces[i].col[j].g, - mesh.faces[i].col[j].b, - mesh.faces[i].col[j].a)) - + file.write(struct.pack('<l', len(mesh.faces))) + #for i in range(len(mesh.faces)): + for f in mesh.faces: + #if not i%100 and meshtools.show_progress: + # Blender.Window.DrawProgressBar(float(i)/len(mesh.faces), "Writing Faces") + + file.write(struct.pack('<b', len(f) )) + #for j in range(len(mesh.faces[i].v)): + for v in f.v: + file.write(struct.pack('<h', v.index)) + + f_col= f.col + for c in f_col: # .col always has a length of 4 + file.write(struct.pack('<BBBB', c.r, c.g, c.b, c.a)) + + # Write the last values out again. always have 4 cols even for tris + if len(f_col) == 3: + file.write(NULL_COLOR) + Blender.Window.DrawProgressBar(1.0, '') # clear progressbar file.close() - #end = time.clock() - #seconds = " in %.2f %s" % (end-start, "seconds") - message = "Successfully exported " + Blender.sys.basename(filename)# + seconds + end = Blender.sys.time() + message = 'Successfully exported "%s" in %.2f seconds' % (Blender.sys.basename(filename), end-start) meshtools.print_boxed(message) -def fs_callback(filename): - if filename.find('.radio', -6) <= 0: filename += '.radio' - write(filename) -Blender.Window.FileSelector(fs_callback, "Export Radio") +def main(): + if not struct: + Blender.Draw.PupMenu('ERROR%t|Error: you need a full Python install to run this script') + return + + Blender.Window.FileSelector(write, 'Export Radio', Blender.sys.makename(ext='.radio')) + +if __name__ == '__main__': + main() diff --git a/release/scripts/radiosity_import.py b/release/scripts/radiosity_import.py index d2d45568b99..85ad1a891b2 100644 --- a/release/scripts/radiosity_import.py +++ b/release/scripts/radiosity_import.py @@ -53,76 +53,98 @@ file to open. # ***** END GPL LICENCE BLOCK ***** import Blender, meshtools -#import time try: import struct except: - msg = "Error: you need a full Python install to run this script." - meshtools.print_boxed(msg) - Blender.Draw.PupMenu("ERROR%t|"+msg) + struct= None # =============================== # ====== Read Radio Format ====== # =============================== def read(filename): - #start = time.clock() + start = Blender.sys.time() file = open(filename, "rb") mesh = Blender.NMesh.GetRaw() #mesh.addMaterial(Blender.Material.New()) - + + NULL_UV3= [ (0,0), (0,1), (1,1) ] + NULL_UV4= [ (0,0), (0,1), (1,1), (1,0) ] + + # === Object Name === namelen, = struct.unpack("<h", file.read(2)) objname, = struct.unpack("<"+`namelen`+"s", file.read(namelen)) # === Vertex List === + Vert= Blender.NMesh.Vert numverts, = struct.unpack("<l", file.read(4)) - for i in range(numverts): - if not i%100 and meshtools.show_progress: - Blender.Window.DrawProgressBar(float(i)/numverts, "Reading Verts") - x, y, z = struct.unpack("<fff", file.read(12)) - mesh.verts.append(Blender.NMesh.Vert(x, y, z)) - + + # Se we can run in a LC + def _vert_(): + x,y,z= struct.unpack('<fff', file.read(12)) + return Vert(x, y, z) + + mesh.verts= [_vert_() for i in xrange(numverts)] + del _vert_ + + # === Face List === + Face= Blender.NMesh.Face + Col= Blender.NMesh.Col numfaces, = struct.unpack("<l", file.read(4)) - for i in range(numfaces): - if not i%100 and meshtools.show_progress: - Blender.Window.DrawProgressBar(float(i)/numfaces, "Reading Faces") + for i in xrange(numfaces): + #if not i%100 and meshtools.show_progress: + # Blender.Window.DrawProgressBar(float(i)/numfaces, "Reading Faces") - face = Blender.NMesh.Face() + numfaceverts, = struct.unpack("<b", file.read(1)) - - for j in range(numfaceverts): - index, = struct.unpack("<h", file.read(2)) - face.v.append(mesh.verts[index]) - - for j in range(4): - r, g, b, a = struct.unpack("<BBBB", file.read(4)) - vertexcolor = Blender.NMesh.Col(r, g, b, a) - face.col.append(vertexcolor) - - if len(face.v) == 3: - face.uv = [ (0,0), (0,1), (1,1) ] + + + face = Face(\ + [\ + mesh.verts[\ + struct.unpack("<h", file.read(2))[0]] for j in xrange(numfaceverts)\ + ] + ) + + face.col= [ Col(r, g, b, a) \ + for j in xrange(4)\ + for r,g,b,a in ( struct.unpack("<BBBB", file.read(4)), )] + + if len(face) == 3: + face.uv = NULL_UV3 else: - face.uv = [ (0,0), (0,1), (1,1), (1,0) ] + face.uv = NULL_UV4 + face.mode = 0 mesh.faces.append(face) - # ->tools.create_mesh(verts, faces, objname): - Blender.NMesh.PutRaw(mesh, objname) - object = Blender.Object.GetSelected() - object[0].name=objname - # ->tools.create_mesh(verts, faces, objname): - + scn= Blender.Scene.GetCurrent() + for obj in scn.getChildren(): + obj.sel= 0 + + obj= Blender.Object.New('Mesh', objname) + mesh.name= objname + obj.link(mesh) + scn.link(obj) + obj.sel= 1 + obj.Layers= scn.Layers + Blender.Window.DrawProgressBar(1.0, '') # clear progressbar file.close() - #end = time.clock() - #seconds = " in %.2f %s" % (end-start, "seconds") - message = "Successfully imported " + Blender.sys.basename(filename)# + seconds + end = Blender.sys.time() + message = 'Successfully imported "%s" in %.2f seconds' % (Blender.sys.basename(filename), end-start) meshtools.print_boxed(message) -def fs_callback(filename): - read(filename) -Blender.Window.FileSelector(fs_callback, "Import Radio") +def main(): + if not struct: + Blender.Draw.PupMenu('ERROR%t|Error: you need a full Python install to run this script') + return + + Blender.Window.FileSelector(read, "Import Radio", Blender.sys.makename(ext='.radio')) + +if __name__ == '__main__': + main() |