diff --git a/release/scripts/raw_export.py b/release/scripts/raw_export.py index b8469adc5f4..02eb5ad3f36 100644 --- a/release/scripts/raw_export.py +++ b/release/scripts/raw_export.py @@ -1,8 +1,8 @@ #!BPY """ -Name: 'Raw Triangle (.raw)...' -Blender: 232 +Name: 'Raw Faces (.raw)...' +Blender: 242 Group: 'Export' Tooltip: 'Export selected mesh to Raw Triangle Format (.raw)' """ @@ -53,49 +53,48 @@ Usage:
# # ***** END GPL LICENCE BLOCK ***** -import Blender, meshtools -import sys -#import time +import Blender +import BPyMesh # ================================= # === Write RAW Triangle Format === # ================================= def write(filename): - #start = time.clock() + start = Blender.sys.time() + if not filename.lower().endswith('.raw'): + filename += '.raw' + + scn= Blender.Scene.GetCurrent() + object= scn.getActiveObject() + if not object: + Blender.Draw.PupMenu('Error%t|Select 1 active object') + return + + 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) + + 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) - - - std=sys.stdout - sys.stdout=file - for face in mesh.faces: - if len(face.v) == 3: # triangle - v1, v2, v3 = face.v - faceverts = tuple(v1.co) + tuple(v2.co) + tuple(v3.co) - print "% f % f % f % f % f % f % f % f % f" % faceverts - else: # quadrilateral - v1, v2, v3, v4 = face.v - faceverts1 = tuple(v1.co) + tuple(v2.co) + tuple(v3.co) - faceverts2 = tuple(v3.co) + tuple(v4.co) + tuple(v1.co) - print "% f % f % f % f % f % f % f % f % f" % faceverts1 - print "% f % f % f % f % f % f % f % f % f" % faceverts2 - sys.stdout=std - - - Blender.Window.DrawProgressBar(1.0, '') # clear progressbar + for f in mesh.faces: + for v in f.v: + file.write('%.6f %.6f %.6f ' % tuple(v.co)) + file.write('\n') file.close() - #end = time.clock() - #seconds = " in %.2f %s" % (end-start, "seconds") - message = "Successfully exported " + Blender.sys.basename(filename)# + seconds - meshtools.print_boxed(message) + + end = Blender.sys.time() + message = 'Successfully exported "%s" in %.4f seconds' % ( Blender.sys.basename(filename), end-start) + print message -def fs_callback(filename): - if filename.find('.raw', -4) <= 0: filename += '.raw' - write(filename) -Blender.Window.FileSelector(fs_callback, "Export Raw") +def main(): + Blender.Window.FileSelector(write, 'RAW Export', Blender.sys.makename(ext='.raw')) + + +if __name__=='__main__': + main() diff --git a/release/scripts/raw_import.py b/release/scripts/raw_import.py index a452bb4b40e..d3e509e192d 100644 --- a/release/scripts/raw_import.py +++ b/release/scripts/raw_import.py @@ -1,8 +1,8 @@ #!BPY """ -Name: 'Raw Triangle (.raw)...' -Blender: 232 +Name: 'Raw Faces (.raw)...' +Blender: 242 Group: 'Import' Tooltip: 'Import Raw Triangle File Format (.raw)' """ @@ -59,50 +59,67 @@ tolerance. # # ***** END GPL LICENCE BLOCK ***** -import Blender, meshtools -#import time +import Blender # ================================ # === Read RAW Triangle Format === # ================================ def read(filename): - #start = time.clock() + t = Blender.sys.time() file = open(filename, "rb") # Collect data from RAW format - faces = [] - for line in file.readlines(): - try: - f1, f2, f3, f4, f5, f6, f7, f8, f9 = map(float, line.split()) - faces.append([(f1, f2, f3), (f4, f5, f6), (f7, f8, f9)]) - except: # Quad - f1, f2, f3, f4, f5, f6, f7, f8, f9, A, B, C = map(float, line.split()) - faces.append([(f1, f2, f3), (f4, f5, f6), (f7, f8, f9), (A, B, C)]) - + def line_to_face(line): + # Each triplet is an xyz float + line_split= map(float, line.split()) + if len(line_split)==9: # Tri + f1, f2, f3, f4, f5, f6, f7, f8, f9 = line_split + return [(f1, f2, f3), (f4, f5, f6), (f7, f8, f9)] + if len(line_split)==12: # Quad + f1, f2, f3, f4, f5, f6, f7, f8, f9, A, B, C = line_split + return [(f1, f2, f3), (f4, f5, f6), (f7, f8, f9), (A, B, C)] + + faces = [ line_to_face(line) for line in file.readlines()] + file.close() + # Generate verts and faces lists, without duplicates verts = [] coords = {} index = 0 - for i in range(len(faces)): - for j in range(len(faces[i])): - vertex = faces[i][j] - if not coords.has_key(vertex): - coords[vertex] = index - index += 1 - verts.append(vertex) - faces[i][j] = coords[vertex] - + + for f in faces: + if f: # Line might be blank + for i, v in enumerate(f): + try: + f[i]= coords[v] + except: + f[i]= coords[v] = index + index += 1 + verts.append(v) + + me= Blender.Mesh.New() + me.verts.extend(verts) + me.faces.extend(faces) + + objname = Blender.sys.splitext(Blender.sys.basename(filename))[0] + scn= Blender.Scene.GetCurrent() + for obj in scn.getChildren(): + obj.sel= 0 + + me.name= objname + ob= Blender.Object.New('Mesh', objname) + ob.link(me) + scn.link(ob) + ob.sel= 1 + ob.Layers= scn.Layers + Blender.Redraw() + + print 'Successfully imported "%s" in %.4f seconds' % (Blender.sys.basename(filename), Blender.sys.time()-t) - meshtools.create_mesh(verts, faces, objname) - 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 - meshtools.print_boxed(message) -def fs_callback(filename): - read(filename) +def main(): + Blender.Window.FileSelector(read, 'RAW Import', Blender.sys.makename(ext='.raw')) -Blender.Window.FileSelector(fs_callback, "Import Raw") +if __name__=='__main__': + main()